Feature Engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.
—— Jason Brownlee
Feature Engineering is manually designing what the input x’s should be.
回复 ( 5 )
我取对数的时候最常见的两种情形:
1、数据是或者近似是log正态分布的,这时候取对数可以使数据变成正态的,满足许多模型的假设;
2、数据中有许多分布在0-1之间的,例如fold change,取对数可以放大0-1之间的数的绝对值,压缩大于1的数,使某些可能的模式显现出来。
有些算法如线性回归( )对特征的分布有要求,有偏度的分布往往会影响残差,破坏方差齐性( ),因此需要做一些变换,去除分布的偏度。可以取对数,平方根,倒数。。。
通用的办法是做Box-Cox变换,你说的取对数就是取 的情形
是通过最大似然估计求到的,其实你也可以自己手动试一下,看看那个偏度小就选那个 。
这东西很常用的,python里有scipy.stats.boxcox, R的caret包里有BoxCoxTrans函数,都会自动帮你用最大似然估计出来的去变换
特征工程是一个非常重要的课题,是机器学习中不可缺少的一部分,但是它几乎很少出现于机器学习书本里面的某一章。在机器学习方面的成功很大程度上在于如果使用特征工程。
(I)特征工程可以解决什么样的问题?
在机器学习中,经常是用一个预测模型(线性回归,逻辑回归,SVD等)和一堆原始数据来得到一些预测的结果,人们需要做的是从这堆原始数据中去提炼较优的结果,然后做到最优的预测。这个就包括两个方面,第一就是如何选择和使用各种模型,第二就是怎么样去使用这些原始的数据才能达到最优的效果。那么怎么样才能够获得最优的结果呢?贴上一句经典的话就是:
Actually the sucess of all Machine Learning algorithms depends on how you present the data.
—— Mohammad Pezeshki
直接翻译过来便是:事实上所有机器学习算法上面的成功都在于你怎么样去展示这些数据。由此可见特征工程在实际的机器学习中的重要性,从数据里面提取出来的特征好坏与否就会直接影响模型的效果。从某些层面上来说,所使用的特征越好,得到的效果就会越好。所需要的特征就是可以借此来描述已知数据的内在关系。总结一下就是:
Better feature means flexibility. Better feature means simpler models. Better feature means better results.
有的时候,可以使用一些不是最优的模型来训练数据,如果特征选择得好的话,依然可以得到一个不错的结果。很多机器学习的模型都能够从数据中选择出不错的结构,从而进行良好的预测。一个优秀的特征具有极强的灵活性,可以使用不那么复杂的,运算速度快,容易理解和维护的模型来得到不错的结果。
(II)什么才是特征工程?
Feature Engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.
—— Jason Brownlee
Feature Engineering is manually designing what the input x’s should be.
—— Tomasz Malisiewicz
从这个概念可以看出,特征工程其实是一个如何展示和表现数据的问题,在实际工作中需要把数据以一种“良好”的方式展示出来,使得能够使用各种各样的机器学习模型来得到更好的效果。如何从原始数据中去除不佳的数据,展示合适的数据就成为了特征工程的关键问题。
(III)特征有用性的预估
每次构造了一个特征,都需要从各个方面去证明该特征的有效性。一个特征是否重要主要在于该特征与要预测的东西是否是高度相关的,如果是高度相关,那么该特征就是十分重要的。比如常用的工具就是统计学里面的相关系数。
(IV)特征的构造过程
在实际工作中首先肯定要确定具体的问题,然后就是数据的选择和准备过程,再就是模型的准备和计算工作,最后才是展示数据的预测结果。构造特征的一般步骤:
[1]任务的确定:根据具体的业务确定需要解决的问题;
[2]数据的选择:整合数据,收集数据;
[3]预处理数据:设计数据展现的格式,清洗数据,选择合适的样本使得机器学习模型能够使用它。比方说一些年龄特征是空值或者负数或者大于200等,或者说某个页面的播放数据大于曝光数据,这些就是数据的不合理,需要在使用之前把这一批数据排除掉。
[4]特征的构造:转化数据,使之成为有效的特征。常用的方法是标准化,归一化,特征的离散化等。
(4.1)标准化(Standardization):比方说有一些数字的单位是千克,有一些数字的单位是克,这个时候需要统一单位。如果没有标准化,两个变量混在一起搞,那么肯定就会不合适。
(4.2)归一化(Normalization):归一化是因为在特征会在不同的尺度下有不同的表现形式,归一化会使得各个特征能够同时以恰当的方式表现。比方说某个专辑的点击播放率一般不会超过0.2,但是专辑的播放次数可能会达到几千次,所以说为了能够在模型里面得到更合适结果,需要先把一些特征在尺度上进行归一化,然后进行模型训练。
(4.3)特征的离散化(Discretization):离散化是指把特征进行必要的离散处理,比方说年龄特征是一个连续的特征,但是把年龄层分成5-18岁(中小学生),19-23岁(大学生),24-29岁(工作前几年),30-40岁(成家立业),40-60岁(中年人)从某些层面来说比连续的年龄数据(比如说某人年龄是20岁1月3日之类的)更容易理解不同年龄层人的特性。典型的离散化步骤:对特征做排序-> 选择合适的分割点-> 作出区间的分割 -> 作出区间分割-> 查看是否能够达到停止条件。
[5]模型的使用:创造模型,选择合适的模型,用合适的模型来进行预测,用各种统计指标来判断该特征是否合适;
[6]上线的效果:通过在线测试来看效果。
数据的转换(Transforming Data)就是把数据从原始的数据状态转换成适合模型计算的状态,从某些层面上来说,“数据转换“和”特征构造“的过程几乎是一致的。
(V)特征工程的迭代过程
特征工程的迭代步骤:
[1]选择特征:需要进行头脑风暴(brainstorm)。通过具体的问题分析,查看大量的数据,从数据中查看出可以提取出数据的关键;
[2]设计特征:这个需要具体问题具体分析,可以自动进行特征提取工作,也可以进行手工进行特征的构造工作,甚至混合两种方法;
[3]选择特征:使用不同的特征构造方法,来从多个层面来判断这个特征的选择是否合适;
[4]计算模型:通过模型计算得到模型在该特征上所提升的准确率。
[5]上线测试:通过在线测试的效果来判断特征是否有效。
一个对数处理就变线性了,岂不美哉?
去看l1,l2的正则推导思想就明白了。本身是在做训练集的拟合和测试集的预测,当然不希望有过拟合的情况,同时又可以筛选出比较明显的特征出来。对数处理是一种方式。