pandas中使用get_dummies和one-hot编码

一: 为什么要用one-hot编码

  在进行机器学习的模型训练时,通常在数据集中会遇到一些离散特征.
  这些特征以int类型的数据形式存在于数据中,如果直接扔进模型中进行训练则会对模型的训练造成影响.因为数值并不表示大小,而是表示类型.
   这里用到一个经典案例,Boston房价预测数据集中的MSSubClass特征.


MSSubClass属性.png
In: all_df['MSSubClass'].dtypes
Out: dtype('int64')

  即特征的类型为整形数据.但是结合数据集的特征描述,可以发现整形数值只代表种类type,而并非衡量大小.将这种数据直接扔进模型,将是数据噪声.对其进行优化也是至关重要的一步.
'MSSubClass: Identifies the type of dwelling involved in the sale.'

二: 什么是one-hot编码?

 one-hot编码又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位指定,并且在任何时候都只有一位有效.
 one-hot编码使用二进制向量即0和1来对分类变量进行状态表示.这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。
一句话概括:one-hot编码可以将类别变量转换成机器学习算法能够正确利用的一种形式的过程.

三: 具体是什么样子的?

 例如有5个零件part,拥有size规格和price价格两种特征:


part.png

 特征size表示零件的大小规格的种类,其数值用int类型来表示.但是离散数值数值size只代表其size的种类,而并不是其真正的大小.这样的属性直接扔进模型就会成为噪声.需要我们运用one-hot编码的思想先对其进行转化.


one-hot.png

 运用pandas.getdummies()方法完成one-hot的操作.实现了将表示类别的离散特征size映射成了二进制向量,从而更好地表示类别.

你可能感兴趣的:(pandas中使用get_dummies和one-hot编码)