本文是译文,可以转载,但需注明出处,点击这里可以获取原文,有删减。
机器学习中,特征工程是创建新特征,能有效提高模型性能的方法之一。
特征工程比较困难,耗时且需要领域专业知识。
应用机器学习的基础是特征工程。 ———吴恩达
通过特征工程,可以区分出哪些是主要信息,突出特征模式,引进领域专业知识。毫无疑问,特征工程的无限制性使得特征工程构建者很容易陷入僵局。
接下来,我们将讨论几个常见的特征工程构建方法。
什么是特征工程?
特征工程是一个非正式的主题,业界也有许多有关它的定义。而我们对特征工程的定义——为了提高模型性能,从已存在的特征中构建新特征的过程。
以下是典型数据科学过程:
确定项目范围/数据收集
探索分析
数据清洗
特征工程
模型训练(包括交叉验证和模型调参)
项目交付/获得洞察
什么不是特征工程?
以下数据处理技术不纳入特征工程讨论范围:
收集原始数据
创建目标变量
去除重复值,处理缺失值及修复错误值
数据标准化
特征选择和PCA(主成分分析)
接下来开启我们的特征工程之旅。
指示变量
第一种特性工程使用指示变量来获取关键信息。也许你会问:“模型不是能自己识别哪些是关键信息么?”
有时候的确能,但并不是所有时候都可以——这取决于数据的样本量。在建模之前可以构建如下指示变量:
阈值型指示变量:假设正在研究美国市民的酒精偏好,而数据集中有“age”变量。此时,我们可以建立“age >= 21”变量来区分那些合法饮酒年龄之上的公民;
多特征型指示变量:如果你正在研究不动产价格,且你有“n_bedrooms”和“n_bathrooms”变量。如果在租赁房屋时,2个床位和2个浴室意味着非常有优势,则可以构建相应的指示变量来标识它们;
特殊事件指示变量:在预测电商网站周销量时,可以构建两个指示变量——黑色星期五和圣诞节;
组内指示变量:网站转化分析中,若数据集中含有“traffic_source”类别型变量。我们可以构建“paid_traffic”指示变量来标识"Facebook Ads"或"Google Adwords"的流量来源。
交叉变量
第二种特性工程使用变量间的交叉信息来获取数据关键信息。
也许你听过这句名言——整体大于局部。的确如此,组合变量带来的信息通常比单个变量本身的信息要多。
特别地,可以留心观察变量之间的和,差,积和商。
说明:不推荐构建所有变量之间的交叉变量,这样做会导致“特征暴增”。
变量之和:如果想通过基础销售数据来预测税收,若数据集中含有“sales_blue_pens ”变量和“sales_black_pens”变量。这时可以构建“sales_pens”变量来表示两者之和;
变量之差:可以通过“house_built_date”变量和“house_purchase_date”变量来构建“house_age_at_purchase”变量;
变量之积:在价格数据集中,可以通过“price”变量和“conversion”变量来构建“earnings”变量;
变量之商:若营销活动数据中含有“n_clicks”变量和“n_impressions”,可以构建“click_through_rate”变量表示两者之商,据此可以对比不同营销活动的营销效果。
特征代表
第三种特性工程在数据预处理中也比较有效——特征代表。
原始数据中的数据集通常不是以理想格式存入的,这时同一数据的不同格式通常含有不同的信息。
日期及时间特征:对于“purchase_datetime”变量,可以构建“purchase_day_of_week”变量和“purchase_hour_of_day”变量,也可以构建聚合变量——“purchases_over_last_30_days”变量;
数值变量离散化:我们可以通过“years_in_school”变量构建“grade”,以便区分“Elementary School”,“Middle School”和“High School”;
稀疏类别聚合化:离散型变量中,一些类别可能含有较少的样本数,可能把较少样本的类别合并成“Other”类;
哑变量:根据模型的需要,可能把离散型变量转换成哑变量。
注意:“稀疏类别聚合化”操作永远在“哑变量”操作之前。
外部数据
接下来介绍另一种可以引起模型性能突破的特征工程——外部数据。
许多机器学习可以从外部数据中获益,如:
时间序列数据:时间序列数据最大的好处是只需构建一个“date”变量即可把别的数据集分层;
外部API:许多API都可以帮助你构建特征工程。如:Microsoft Computer Vision API可以返回图片中脸的张数;
地理编码:可以对“street_address”,“city”和“state”进行地理编码,从而获得“latitude”和“longitude”,并通过其它数据获得当地人口统计资料,如:“median_income_within_2_miles”变量;
其它资源:Facebook跟踪像素,Google Analytics以及其余第三方软件。
误差分析(建模后)
最后一类特征工程发生在建模后——误差分析。
误差分析泛指一类技术——分析模型中错误分类或高错误率的样本,并决定下一步的改进方向的一类技术。
下一步改进方向可能有收集更多的数据,问题分裂化,构建新的特征工程等。在进行误差分析之前,必须弄清楚模型为什么会失效。我们可以做以下工作:
从拥有更大误差的样本入手:误差分析是典型的手动处理处理过程,一般没有时间对每一个样本进行仔细分析。推荐从拥有更大误差的样本入手,从而找出相应的特征,并据此构建出新的特征工程;
用类别对样本进行分割:另一种技术是分割样本,并计算每组样本的平均误差。可以根据这些分组的最高误差来建立指示变量;
非监督聚类:如果不能定位错误分类样本的特征,可以对这些样本施加非监督聚类算法,不推荐盲目地把这些聚类划分成新的特征,但这样做可以更快地定位到错误分类样本的特征。记住,我们的目标是找到模型误分的原因;
寻求同事或领域专家的帮助:作为其他三种技术的补充,寻求同事或领域专家的帮助通常也可以使我们获益。
良性特征
良性特征通常具有如下特点:
可以从将来的观测中计算获得;
具有可解释性;
可通过领域知识或探索性分析获知;
具有潜在的可预测性;
不包含目标变量信息。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。