机器学习遇到的问题:
- OneHotEncoder使用的过程中出现如下问题:
__init__() got an unexpected keyword argument 'categorical_features'
解决方法:使用ColumnTransfomer来解决
解决方法中的参数说明:
ct = ColumnTransformer([("Country", OneHotEncoder(), [1])], remainder = 'passthrough')
参数:remainder = ‘passthrough’ 的功能是忽略其他列,只对第一列进行操作。
ColumnTransformer的具体用法与功能:
ColumnTransformer在Python的机器学习库scikit-learn中,可以选择地进行数据转换。例如,它允许将特定的转换或转换序列仅应用于数字列,而将单独的转换序列仅应用于类别列。
要使用ColumnTransformer,必须指定一个转换器列表。每个转换器是一个三元素元组,用于定义转换器的名称,要应用的转换以及要应用于其的列索引,例如:(名称,对象,列)。
参考:如何使用ColumnTransformer? - [OneHotEncoder的用法](https://www.cnblogs.com/zhoukui/p/9159909.html)
总结下来:就是把一个非数字的变量拆成多个用0,1表示的列 - sklearn.preprocessing.StandardScaler()原理与作用
神经网络模型,或者无监督学习,数据会要求做一些预处理。比如,要求所有输入特征的数据变化范围相似,某种理想的情况是:均值为0,方差为1。
标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。
标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)
Scikit-learn中的StandardScaler即是这种数据预处理。其原理:
X_scaled = (X - X.mean()) / X.std()
其实还是不太明白StrandardScaler的作用,还不明白为什么StrandardScaler为什么要在数据划分之后才对数据进行处理。
- 在数据预处理的时候,在X只有一列的数据的时候需要注意
X = dataset.iloc[: , 0].values
X = dataset.iloc[: , :1].values
这两行代码看起来相同,但是得到的结果是不一样的。
第一行代码得到是1*n的array数组
第二行代码得到是n*1的array数组
- np.array的移位操作(列位置的该百年)
初入门,小小的列位置变换都不会,查了很久,方法如下:
X = X[: , [1, 2, 0]]
将 X 的列位置顺序从原来的0 1 2 变成 1 2 0
- random_state
random_state 相当于随机数种子random.seed() 。random_state 与 random seed 作用是相同的。
如果你在需要设置随机数种子的地方都设置好,那么当别人重新运行你的代码的时候就能得到完全一样的结果,复现和你一样的过程。如果不设置,那么每次运行的结果都会不相同。
如果不加入random_state,当你用sklearn分割完测试集和训练集,确定模型和初始参数以后,你会发现程序每运行一次,都会得到不同的准确率,无法调参。重新加上以后就可以调参了。
参考:python sklearn模型中random_state参数的意义
本文介绍了在机器学习中遇到的一个问题:使用OneHotEncoder时出现错误。解决方法是利用ColumnTransformer,特别是参数remainder='passthrough'的应用。ColumnTransformer允许选择性地对数据列进行转换,适用于混合类型数据集。此外,还讲解了StandardScaler的作用,它是用于数据标准化,确保特征在同一尺度上,以优化模型性能。在数据预处理时要注意列的维度处理,例如1*n与n*1数组的区别。最后,提到了random_state在模型中的重要性,用于保证结果的可重复性。
886

被折叠的 条评论
为什么被折叠?



