使用方法

df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b']})
print(df)
dummies = pd.get_dummies(df['key'], prefix='key')
print(dummies)

python django 获取多对多 python dummies_one-hot

python django 获取多对多 python dummies_数据_02

主要用于将分类变量进行one-hot的编码

参数 prefix  就是前缀的的意思 就是根据编码的向量名的前缀进行命名。

为啥数据要进行one-hot编码  

举一个例子,如血型,一般分为A、B、O、AB四个类型,为无序多分类变量,通常情况下在录入数据的时候,为了使数据量化,我们常会将其赋值为1、2、3、4。

从数字的角度来看,赋值为1、2、3、4后,它们是具有从小到大一定的顺序关系的,而实际上,四种血型之间并没有这种大小关系存在,它们之间应该是相互平等独立的关系。如果按照1、2、3、4赋值并带入到回归模型中是不合理的,此时我们就需要将其转化为哑变量。

由于分类器往往默认数据数据是连续的,并且是有序的,但是在很多机器学习任务中,存在很多离散(分类)特征,因而将特征值转化成数字时,往往也是不连续的, One-Hot 编码解决了这个问题。 并且,经过独热编码后,特征变成了稀疏的了。这有两个好处,一是解决了分类器不好处理属性数据的问题,二是在一定程度上也起到了扩充特征的作用。

 

什么情况下不用这个

四. 什么情况下(不)用独热编码? http://www.likecs.com/show-64021.html

  • 用:独热编码用来解决类别型数据的离散值问题,
  • 不用:将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。 有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。  Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。

  总的来说,要是one hot encoding的类别数目不太多,建议优先考虑。