机器学习之数据预处理——特征编码
机器学习里有一句名言:数据和特征决定了机器学习的上限,而模型和算法的应用只是让我们逼近这个上限。这个说法形象且深刻的提出前期数据处理和特征分析的重要性。这一点从我们往往用整个数据挖掘全流程60%以上的时间和精力去做建模前期的数据处理和特征分析也能看出。那么疑问来了,这超过60%时间和精力我们都用在哪了?本文基于以往的知识储备以及实际的项目经验,我做一个总结。
主要包括三部分,一是获取数据、数据抽样,二是数据探索,三是数据预处理与清洗
数据预处理——特征编码
由于机器学习算法都是在矩阵上执行线性代数计算,所以参加计算的特征必须是数值型的,对于非数值型的特征需要进行编码处理。对于离散型数据的编码,我们通常会使用两种方式来实现,分别是标签编码和独热编码
离散数据的编码
对于离散型数据的编码,我们通常会使用两种方式来实现,分别是标签编码和独热编码
标签编码
将类别型特征从字符串转换为数字
先说结论:OneHotEncoder更常用,LabelEncoder目前应用场景不多
特点:
- 解决了分类编码的问题,可以自由定义量化数字
- 数值本身没有任何含义,仅是标识或者排序的作用
- 可解释性比较差
适用范围:
- 对于定序类型的数据,使用标签编码更好,虽然定序类型也属于分类,但是其有排序逻辑
- 对数值大小不敏感的模型(如树模型),建议使用标签编码
sklearn LabelEncoder(使用fit_transform函数)
将离散型的数据转换成 0 0 0 到 n − 1 n − 1 n−1 之间的数
import pandas as pd
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1