数据预处理之One-Hot

  • 2019 年 10 月 6 日
  • 笔记

数据预处理之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为例:

数据展示

import pandas as pd  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.作者的话

最后,您如果觉得本公众号对您有帮助,欢迎您多多支持,转发,谢谢!