关于特征工程入门中的一些基本知识
写在最前,因为工作的原因需要了解特征工程的具体的做法,然后找资料找了jasonfreak的这篇文章http://www.cnblogs.com/jasonfreak/p/5448385.html
下面是我整理的针对这篇文章里自己还不是很熟悉的概念或者原理性的东西:
1、哑编码
是一种状态编码。因为有些特征是用文字分类表达的,或者说将这些类转化为数字,但是数字与数字之间是没有大小关系的,纯粹的分类标记,这时候就需要用哑编码对其进行编码。比如0用0001,1用0010,2用0100以此类推。有点类似文本矩阵,最终会构成一个稀疏矩阵。
2、交叉验证
普通的训练方法是将样本集分成训练集和测试集。但交叉验证是将样本分成N份,每一份都可以作为测试集,而剩余的N-1份作为训练集,以此减少突发性和偶然性。
3、数据转换
是对字段处理的一种方式。常见的有三种,多项式转换,指数转换,对数转换。多项式转换:比如说有四个特征,度设为2,其实就是在原四个字段的基础上两两组合出新的字段,以期待他们和因变量之间会擦出新的火花。指数和对数不会产生新字段,我的理解是通过观察自变量和因变量之间的图形变换,然后推测字段在指数对数处理后会更加线性相关。
4、相关性分析
第一点,需要明确的是求相关系数之前是不需要对数据进行标准化或者归一化处理的。相关系数的公式为:
公式中已经包含了标准化的计算公式在里面,或者说标准化其实就是他的一部分。
第二点,相关系数的求解分三种情况:
两个变量的相关性分析,先用p值检验两变量是否有显著的相关性,有的话用上述公式求解相关系数r,r大于0.8认为有强相关性。
‚两变量曲线相关,就要求非线性相关系数。(待定,应该和复相关系数的求法类似)我的理解是画图观察两个变量的大致变化规律,然后用数据转换变成线性相关。
ƒ多个变量和因变量之间的关系。需要求复相关系数。
R是复相关系数,R2是线性回归方程的决定系数,又叫拟合优度。
5、卡方检验
用来分析定性变量之间的先关性。参考网站:http://wiki.mbalib.com/wiki/卡方检验
构造某个字段的所有属性和另一个字段的所有属性的频率矩阵,然后取计算矩阵中每一个格子的期望,公式的文字意思就是:
卡方 = 求和((实际频数i -
期望i)平方/期望i)
然后取计算实际条件下的临界值,需要自由度和置信水平,自由度为(列-1)(行-1),置信水平一般取0.05。若临界值大于卡方,则相关性显著,并且卡方越小,相关性越显著。
6、互信息法
也是用来描述定性因变量和定性自变量之间的相关性。
①信息熵:香浓提出,用来描述一个事物的不确定程度,反映一个事物所包含的信息量(混乱程度),计算公式为:
P(x)表示事件x在总体中出现的概率,求和就表示事物总体的信息量。Log2的单位为比特,我的理解是这个概念的提出是因为编码的2进制位的研究。
②联合信息熵:现在假设有两个事物X,Y,那么他们的联合信息熵的计算公式为:
表示两个事物联合后所包含的信息量。其中的p(x,y)需要去做一个X,Y的分布表格比较容易得出。这边类似前面的卡方检验中的列表。
③条件熵:用来表示当接受方知道变量X时,信源方还需要提供平均多少信息量才能传达变量Y,它的计算公式为:
④根据链式规则:
及图:
我们可以得到互信息的计算公式
⑤互信息:它表示一个随机变量中包含另一个随机变量多少的信息量。或者说已知一个变量时能对减少另一个变量的不确定性起到多大的贡献。计算公式为:
这个量其实很好的描述了两个变量之间的相关性。
⑥最大信息系数的计算公式:这个还没有很好的理解,待定
|X|,|Y|表示类的个数,B表示数据总量的0.55次方。
7、逐步回归
本来也没有想到这个方法对特征选择有什么用,但是在研究递归特征消除法(RFE)时想到好像是用到了逐步回归的思想。
逐步回归主要是应用在多元线性回归中,对去多重共线性有非常良好的表现。主要思想就是不断的将自变量加入回归模型,如果加入的自变量对已存在模型的贡献度小则去掉,贡献度大则加入,不断迭代。
四个概念需要了解:
①偏回归平方和:偏就是多元中某一元的意思,当取出一元后,回归方程回归平方和减小的部分称为该元X对Y的偏回归平方和,即X对Y的贡献度。
②F检验:多元线性回归中有用,检验的是回归整体和因变量之间的显著性。
③T检验:检验的是单元自变量和因变量之间的显著性。其实F检验在一元上的应用就是T检验。
④R2拟合优度:用来描述拟合的好坏。其中R是复相关系数。我目前的理解:R好像是只能用在多元线性相关性中的,但R2可以用来描述任何回归模型的拟合优度。
8、递归特征消除法(RFE)
不断构建和更新最优子集的一个过程,他不是具体的某种算法,而是构建在一些算法之上的算法。在国内还没有找到相关的文档,国外的文献比较多,还好python为我们提供了这个算法的API。我查资料主要是两种思路:
①使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
②不单独的检验某个变量的价值,而是将其聚集在一起检验。它的基本思想是,对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征。这个算法相当的暴力啊。(直接复制网上,因为我觉得这段很好理解,其中的validation error是指校验错误)
但这个方法实际上已经对最后所想要的机器学习算法做出了选择,所以和最后的模型建立有密不可分的关系。
9、基于规则项的特征选择法[L1,L2范数]
几个概念:
①范数:用某个规则计算出来的数叫做范数。
②NP问题:在多项式时间内解决,但是项需要多少不确定的非确定多项式问题。
③泛化能力:适用性能力,也就是说能不能准确预测的能力。
假设拟合后的回归方程为f(xi),那么我们把目标函数设为:
系数向量 = (w0,w1,w2...,wn)
目标函数的前半部分叫做经验风险,其实就是把拟合的误差控制在最小,后半部分r(d)叫做正则化项,用来控制维度,整个最小化公式叫做结构风险。所以我们任务就是找到使结构化风险最小的分类规则f(x)。如果只有经验风险的话会把所有维度都考虑进去,训练的样本会很好,但是会出现过拟合,但是测试误差很大,这样我们就说它的泛化能力很差,正则化项的目的就是用来防止这种过拟合,提高模型的泛化能力。
L1正则化:L1范数是指向量中各个元素绝对值之和。能够起到特征选择的功能,系数向量很多都会变0,最终留下的向量就是对模型最重要的特征。
L2正则化:L2范数是指向量各元素的平方和然后求平方根。L1正则化会t除一些重复的相关度高的但是又对因变量很重要的特征,L2正则化不会让wi变0,而是保留所有重要的相似的特征,然后赋予他们一定的权重以平衡两个特征对因变量的影响。它和L1最大的区别就是会使wi趋向于0,而不是直接变为0。
参考网站:http://blog.csdn.net/zouxy09/article/details/24971995/
https://www.zhihu.com/question/20924039
10、基于树模型的特征选择法
GBDT作为基模型的特征选择。看完GBDT以后并没有发现有特意去选择特征的思想,只是在实现算法的过程中,正好降低了维度,取到了cost function较小的一些维度。
几个概念:
①决策树:分为分类树和回归树,分类树的算法有ID3和C4.5,回归树有GBDT,回归树可以叠加,分类树不能,这就为GBDT算法提供了条件。其中,分类树分类的方法是利用信息熵,而回归树是利用最小均方差(其实好多东西都是去计算最小均方差,比如拟合函数)
②GB:翻译过来就是梯度迭代,即把所有的回归树的回归结果进行叠加,得到最终的预测结果。每一步的分枝都是去穷举每一个feature的每个阈值,找到最好的分割点,找的方法就是用最小均方差。
③cost function:决策树构建时的一个目标函数,使这个函数值最小,即可理解为预测花费的成本最小。表达式可以为L(y,f(x)),即真实值与预测值之间的差距,对这个差距求导就是这个函数的梯度方向。举例:可以直接用残差来表示他们的导数,即yi-f(xi),在构建第一颗树时,每个叶子节点的残差越大,说明误差越大,残差越小,误差越小,那么当这些残差被放到第二颗树中,误差大的必定会被归到一类,误差小的被归到一类,实际上它是一个加大误差权重的一个过程(至少我是这么理解的)。
④第三步不断跌的过程中会有特征项减少的过程存在,因为该算法本身将单树的操作放到了多树中,防止了过拟合的情况出现,过拟合就是因为特征项太多而出现的情况,所以从这层概念上理解它在建模的过程中做出了特征选择。
参考网站:http://blog.csdn.net/w28971023/article/details/8240756
http://blog.csdn.net/dark_scope/article/details/24863289