2021-02-16

机器学习遇到的问题:

  1. 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?
  2. [OneHotEncoder的用法](https://www.cnblogs.com/zhoukui/p/9159909.html)
    总结下来:就是把一个非数字的变量拆成多个用0,1表示的列
  3. sklearn.preprocessing.StandardScaler()原理与作用
    神经网络模型,或者无监督学习,数据会要求做一些预处理。比如,要求所有输入特征的数据变化范围相似,某种理想的情况是:均值为0,方差为1。
    标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。
    标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)
    Scikit-learn中的StandardScaler即是这种数据预处理。其原理:
    X_scaled = (X - X.mean()) / X.std()

其实还是不太明白StrandardScaler的作用,还不明白为什么StrandardScaler为什么要在数据划分之后才对数据进行处理。

  1. 在数据预处理的时候,在X只有一列的数据的时候需要注意
X = dataset.iloc[: , 0].values
X = dataset.iloc[: , :1].values
这两行代码看起来相同,但是得到的结果是不一样的。
第一行代码得到是1*n的array数组
第二行代码得到是n*1的array数组
  1. np.array的移位操作(列位置的该百年)
    初入门,小小的列位置变换都不会,查了很久,方法如下:
X = X[: , [1, 2, 0]]
将 X 的列位置顺序从原来的0 1 2 变成 1 2 0
  1. random_state
    random_state 相当于随机数种子random.seed() 。random_state 与 random seed 作用是相同的。
    如果你在需要设置随机数种子的地方都设置好,那么当别人重新运行你的代码的时候就能得到完全一样的结果,复现和你一样的过程。如果不设置,那么每次运行的结果都会不相同。
    如果不加入random_state,当你用sklearn分割完测试集和训练集,确定模型和初始参数以后,你会发现程序每运行一次,都会得到不同的准确率,无法调参。重新加上以后就可以调参了。
    参考:python sklearn模型中random_state参数的意义
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值