数据预处理之One-Hot
0.说在前面
1.什么是One_Hot?
2.One_Hot编码处理离散特征
3.One_Hot编码实现
4.作者的话
0.说在前面
前面一节我们讲了机器学习过程中的特征工程处理,那么这一节是不是该到数据预处理了呢,对头!
接下来,我们进入数据预处理环节,而在数据预处理过程中,非常重要的一节就是One-Hot编码问题,之前在研究TensorFlow时候,听说过One-Hot编码(独热编码),但不清楚是什么,那么我们现在一起来深入学习一下什么是One-Hot编码,它对我们的机器学习过程的模型又有什么影响呢?
对于这些问题我们从问题由来,问题分析,及实战操作,深入探究!
1.什么是One_Hot?
对于这个问题,之前谷歌了一下,还涉及寄存器了(one-hot编码是N位状态寄存器为N个状态进行编码的方式)。。真的无语。这里不说那些很底层的,我们只需要了解one-hot编码是将类别变量转换为机器学习算法中容易处理的一种形式!
概念太抽象了,对太抽了,那么从实际例子来说明。
如下我们有两个特征:
我们看到有两个特证名为:animal与food,解释一下两列值意思,第一列代表的是动物的名字,第二列是食物的个数,比如第一行cat 2 描述为猫吃了两个食物,这里是测试数据,主要是想通过,这些数据给予直观的认识及实际操作。
而对上述数据做one-hot编码后得结果为:
animal列数据类型是字符串,而第二列是数值型,如果我们能将这些特征值用0/1表示,是不是在机器学习中,对这些非连续值非常有帮助。
综上,我们推论出,如果你在处理的数据中,通过特征工程这一步操作,能够将特征的类型判别出来,哪些是连续的,哪些是非连续的,那么我们就可以对它进行特殊处理,比如此处的one-hot编码!
对于定义我们有了基础的了解之后,下面我们来深入了解一下为什么one-hot编码可以用来处理非连续(离散)特征?
2.One_Hot处理离散特征
在使用one-hot编码中,我们可以将离散特征的取值扩展到欧式空间,在机器学习中,我们的研究范围就是在欧式空间中,首先这一步,保证了能够适用于机器学习中;而另外对于one-hot处理的离散的特征的某个取值也就对应了欧式空间的某个点!
那么对于上面这句话,你会有很多疑问,比如:为何one-hot编码能将离散特征映射到欧式空间?
原因是,在统计机器学习算法中的回归,分类这些问题中,特征之间距离的计算或相似度计算非常重要,比如大家常用的k-means,而我们常用的这些计算都在欧式空间中进行相似度计算。换句话说,就是我上面说的研究范围在欧式空间,保证了one-hot编码的成立!
3.One_Hot编码实现
还是以上述animal为例:
【数据展示】
importpandasaspd
data = {
'animal':['cat','dog','cat','lion'],
'food':[2,3,5,3],
}
data_learn = pd.DataFrame(data)
data_learn
【完整特征编码】
dummies = pd.get_dummies(data_learn,columns=data_learn.columns)
dummies
【特定特征编码】
dummies = pd.get_dummies(data_learn['animal'])
dummies = dummies.add_prefix("{}_".format('animal'))
data_learn.drop('animal',axis=1,inplace=True)
data_learn = data_learn.join(dummies)
data_learn
对于这里的特定特征编码,我这里只选取了一个特定特征,你也可以选择多个,通过列表存储,遍历操作,即可实现!
4.作者的话
最后,您如果觉得本公众号对您有帮助,欢迎您多多支持,转发,谢谢!
领取专属 10元无门槛券
私享最新 技术干货