OneHotEncoder 和 get_dummies

OneHotEncoder和get_dummies都是将分类变量(categorical features)转化为数字变量(numerical features)的方法。

为什么要转化为数字变量呢? 因为大部分的机器学习方法需要所有特征/变量(features/variables)都是数值型的。树相关的机器学习方法可以直接处理分类变量。

OneHotEncoder 和 get_dummies 的不同之处:

1. OneHotEncoder 来自于sklearn。 导包:from sklearn.preprocessing import OneHotEncoder

    get_dummies来自于Pandas。 导包和使用:import Pandas as pd

                                                                           pd.get_dummies(df)

2. 此处区别存在,当sklearn的版本0.20.0在以下:

    OneHotEncoder 不能直接处理string类型的分类变量,如果是nominal类型的分类变量需要将分类变量映射为integer, 可以用字典,或者使用LabelEncoder。

    如果是ordinal类型的分类变量,只需LabelEncoder就可(不需要继续使用OneHotEncoder)

但是sklearn 0.20.0 之后的版本,OneHotEncoder可以直接处理string类型的分类变量。

下面是一个当sklearn版本是0.20.2的OneHotEncoder例子:

下面是使用get_dummies的例子:

对于机器学习,建议使用OneHotEncoder。因为get_dummies容易使用,可以用于分析类的工作。

为什么推荐使用OneHotEncoder?

举个例子:如果训练数据“颜色” 这个变量有“红”,“黄”两个值,但是在测试数据的“颜色”变量除了“红”,“黄”还有“蓝”。这个时候使用get_dummies转化训练数据会生成新的column:红,黄。之后用这个数据训练模型。同时使用get_dummies转化测试数据会生成新的column:红,黄,蓝。之后应用训练好的模型进行测试数据的预测。这时就会出现错误。因为在模型训练的过程并没有“蓝”这一列。

但是使用OneHotEncoder(handle_unknown="ignore")就可以解决上述问题。

例子如下:

测试数据存在“THURSDAY”和"FRIDAY"是训练数据中不存在的,OneHotEncoder将其转化为都是0的array。

你可能感兴趣的:(OneHotEncoder 和 get_dummies)