什么是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

 

 

对于这里的特定特征编码,我这里只选取了一个特定特征,你也可以选择多个,通过列表存储,遍历操作,即可实现!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM