转换类别属性量的一般方法
数据分析中经常会遇到类别属性,比如日期,性别,街区编号,IP地址等. 绝大部分数据分析算法是无法直接处理这类变量,需要先把他们处理成数值型量.
取消字符
参考 sklearn.preprocessing.LabelEncoder. 加入一个属性有 个不同的值,通过这个函数将把它转换到 上的整数. 转换后的属性具有了次序和可比较性,这个两个属性源属性值未必具备,是利是弊视具体应用而定.编码
离散型数值对某些算法是可以进行训练的,比如决策树, 但是对于SVM/神经网络而言依然不合适,我们需要对其进行编码.- one-hot-encoding
参考 sklearn.preprocessing.OneHotEncoder
离散型属性有 个不同的值,则可以用长度为 二进制序列 表示, 有且只有一个为 ,其他为 . 假设离散属性只有三个不同的值
属性值 二进制序列 A 001 B 010 C 100 one-hot-encoding后会增加 列
- 均值编码
如上所述, one-hot-encoding后会增加 个属性列,如果 很大, one-hot-encoding是无法接受的. 这是可以考虑尝试均值编码,节省内存.
- one-hot-encoding
均值编码
均值编码是一种参考目标值的编码方式, 2001年在文献中提出,在数据分析中得到广泛应用.
分类问题
对于
分类问题,均值编码后只需要增加
个属性列,如果
远远小于
,则相对one-hot-encoding可以节省很多内存. 其出发点是用概率
代替属性值
, 其中
表示属性值,
表示类别值. 但实际问题中,经常会遇到
对应的样本数目比较少,导致对
的计算不准确. 引入先验概率
,公式转换成
其中 , 是训练集中 的样本个数, 负责计算两个概率值的可靠性,针对应用有不同的定义方法,如下是一个例子
其中 是一个可调参数,当 在训练集中出现次数 时, ,两个概率的可靠性相等,随者 的增大,先验概率 的可靠性逐渐降低.
回归问题
回归问题同样可以使用均值编码,只需要把概率换成均值
其中 表示 对应的 均值, 是整个训练集上 的均值