04 特征工程
特征工程是所有机器学习的最重要的一步。如果要对特征工程梳理最基本的操作,考虑以下四步:
1.编码
2.分箱
3.自动化特征选择(单变量选项,模型选择,迭代选择)
4.经验特征选择
先说数据集:美国成年人收入的数据集,该数据集是从 1994 年的普查数据库中导出的。adult 数据集的任务是预测一名工人的收入是高于 50 000 美元还是低于 50 000 美元。这个数据集的特征包括工人的年龄、雇用方式(独立经营、私营企业员工、政府职员等)、教育水平、性别、每周工作时长、职业,等等。
表1:dataset
4.1 编码(独热)
使用编码的主要原因:工作时间,工作年龄是连续的值,但是性别,职业等是离散值。连续值方便看出数据规律,但是离散值很难参与计算,所以需要进行编码。编码的方式有很多,著名的是one-hot独热编码,独热编码的意思是如果一个人的 workclass 特征(表1)取某个值(取值包括 "Government Employee"、"Private Employee"、"Self Employed" 和 "Self Employed Incorporated"),那么对应“有”的特征取值为 1,其他特征“无”均取值为 0。因此,对每个数据点来说,4 个新特征中只有一个的取值为 1。这就是它叫作 one-hot 编码的原因。
关于独热编码有几点需要注意:
- 独热编码可以提高准度(下图中最后逻辑模型显示准度)。
-
将数据转换为分类变量的 one-hot 编码有两种方法:一种是使用 pandas(简单一些,下图dummies),一种是使用 scikit-learn。
逻辑模型判断
4.2 分箱
分箱起到的作用是让原本的线性回归(一条直线),分为不同的箱子(下图中x轴)变为分段操作,在配合不同的斜率,拟合数据变化的规律,提升原有线性回归的准度。
分箱
不过通过试验证明,分箱的操作比默认SVM性能还是略低。
所以,分箱、多项式交互对线性模型的提升较高,其他算法还好。
4.3 自动化处理
处理一般的高维数据集时,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征。这样会得到泛化能力更好、更简单的模型。
如何判断每个特征的作用有多大呢?有三种基本的策略:单变量统计(univariate statistics)、基于模型的选择(model-based selection)和迭代选择(iterative selection)。
所有这些方法都是监督方法,即它们需要目标值来拟合模型。这也就是说,我们需要将数据划分为训练集和测试集,并只在训练集上拟合特征选择。
4.3.1 单变量统计
在单变量统计中,核心计算每个特征和目标值之间的关系是否存在统计显著性,然后选择具有最高置信度的特征。对于分类问题,这也被称为方差分析。这些测试的一个关键性质就是它们是单变量的(univariate),即它们只单独考虑每个特征。
因此,如果一个特征只有在与另一个特征合并时才具有信息量,那么这个特征将被舍弃(缺陷)。
单变量测试的计算速度通常很快,并且不需要构建模型。另一方面,它们完全独立于想要在特征选择之后应用的模型。
对分类问题通常是 f_classif(默认值),对回归问题通常是 f_regression(下图红色框)。计算阈值的方法各有不同,最简单的是 SelectKBest 和 SelectPercentile,前者选择固定数量的 k 个特征,后者选择固定百分比的特征。我们将分类的特征选择应用于 cancer 数据集。为了使任务更难一点,我们将向数据中添加一些没有信息量的噪声特征(下图第一个框,加了50个噪声)。我们期望特征选择能能够识别没有信息量的特征并删除它们:
单变量特征选择,删除的噪点后的feature大概准度有9.3 成。
4.3.2 基于模型的特征选择
基于模型的特征选择使用一个监督机器学习模型来判断每个特征的重要性,并且仅保留最重要的特征。用于特征选择的监督模型不需要与用于最终监督建模的模型相同。特征选择模型需要为每个特征提供某种重要性度量,以便用这个度量对特征进行排序。决策树和基于决策树的模型提供了 feature_importances_ 属性,可以直接编码每个特征的重要性。线性模型系数的绝对值也可以用于表示特征重要性。
单变量特征选择,删除的噪点后的feature大概准度有9.5 成。
4.3.3 迭代特征选择
在单变量测试中,没有使用模型,而在基于模型的选择中,使用了单个模型来选择特征。(有可能单个不起作用,但是组合会起作用,导致误删)
在迭代特征选择中,将会构建一系列模型,每个模型都使用不同数量的特征。有两种基本方法:开始时没有特征,然后逐个添加特征,直到满足某个终止条件;或者从所有特征开始,然后逐个删除特征,直到满足某个终止条件。由于构建了一系列模型,所以这些方法的计算成本要比前面讨论过的方法更高。其中一种特殊方法是递归特征消除(recursive feature elimination,RFE),它从所有特征开始构建模型,并根据模型舍弃最不重要的特征,然后使用除被舍弃特征之外的所有特征来构建一个新模型,如此继续,直到仅剩下预设数量的特征(迭代次数如图所示)。
迭代特征选择,删除的噪点后的feature大概准度有9.5 成。最后两种准度差不多。
estimator
如果你不确定何时选择使用哪些特征作为机器学习算法的输入,那么自动化特征选择可能特别有用。它还有助于减少所需要的特征数量,加快预测速度,或允许可解释性更强的模型。在大多数现实情况下,使用特征选择不太可能大幅提升性能,但它仍是特征工程工具箱中一个非常有价值的工具。
4.专家模式
专家模式其实核心是就借助经验处理来提高准度。人工智能有句话“有多少人工就有多少智能”。机器学习的目的是避免创建一组专家设计的规则,但这并不意味着应该舍弃该应用或该领域的先验知识。通常来说,领域专家可以帮助找出有用的特征,其信息量比数据原始表示要大得多。
我们以自行车出租数据为例(https://www.citibikenyc.com/system-data),想要解决的任务是,对于给定的日期和时间,预测有多少人将会在 Andreas 的家门口租一辆自行车——这样他就知道是否还有自行车留给他。
可以看到在默认随机森林学习的情况下,训练数据集不错,但是在测试数据集几乎是一个直线(什么也没有学习到),原因是:测试集中数据点的时间戳要晚于训练集中的所有数据点。树以及随机森林无法外推(extrapolate)到训练集之外的特征范围。结果就是模型只能预测训练集中最近数据点的目标值,即最后一次观测到数据的时间。
默认随机森林
我们作为人,觉得:租借自行车应该和星期和时间点有关(这就是专家,机器是不告诉,是学习不了),加入2个因素,效果就好了很多。基本测试集就拟合了。
星期几+时间
下一章节重点介绍评估机器学习模型的性能与选择正确的参数设置。