机器学习遇到的问题:
- 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参数的意义