type
status
date
slug
summary
tags
category
icon
password
Property
- 最简单的方法是方差筛选。方差越大的特征,可以认为它是比较有用的。如果方差较小,比如小于1,那么这个特征可能对算法作用没有那么大。最极端的,如果某个特征方差为0,即所有的样本该特征的取值都是一样的,那么它对模型训练没有任何作用,可以直接舍弃。
- 相关系数,这个主要用于输出连续值的监督学习算法中。分别计算所有训练集中各个特征与输出值之间的相关系数,设定一个阈值,选择相关系数较大的部分特征。
- 假设检验,比如卡方检验。卡方检验可以检验某个特征分布和输出值分布之间的相关性。比粗暴的方差法好用。在sklearn中,可以使用
chi2
这个类来做卡方检验得到所有特征的卡方值与显著性水平P临界值,可以给定卡方值阈值, 选择卡方值较大的部分特征。除了卡方检验,还可以使用F检验和t检验,它们都是使用假设检验的方法,只是使用的统计分布不是卡方分布,而是F分布和t分布而已。在sklearn中,有F检验的函数f_classif
和f_regression
,分别在分类和回归特征选择时使用。
- 互信息,即从信息熵的角度分析各个特征和输出值之间的关系评分。互信息值越大,该特征和输出值之间的相关性越大,越需要保留。在sklearn中可以使用
mutual_info_classif
(分类)和mutual_info_regression
(回归)来计算各个输入特征和输出值之间的互信息。
在没有什么思路的时候,可以优先使用卡方检验和互信息来做特征选择
方差选择法
使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的
VarianceThreshold
类来选择特征:type
status
date
slug
summary
tags
category
icon
password
Property
包装法的解决思路没有过滤法这么直接,它会选择一个目标函数来一步步的筛选特征。
最常用的包装法是递归消除特征法(recursive feature elimination,RFE),递归消除特征法使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征集进行下一轮训练。
以经典的SVM-RFE算法来讨论这个特征选择的思路:这个算法以支持向量机来做RFE的机器学习模型选择特征。它在第一轮训练的时候,会选择所有的特征来训练,得到了分类的超平面 后,如果有 个特征,那么RFE-SVM会选择出 中分量的平方值最小的那个序号对应的特征,将其排除,在第二类的时候,特征数就剩下 个了,继续用这个特征和输出值来训练SVM,同样的,去掉最小的那个序号对应的特征。以此类推,直到剩下的特征数满足需求为止。
稳定选择(Stability selection)
稳定性选择是一种基于二次抽样和选择算法相结合较新的方法, 选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复, 最终汇总特征选择结果。比如可以统计某个特征被认为是重要特征的频率 (被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下, 重要特征的得分会接近 ,稍微弱一点的特征得分会是非0的数, 而最无用的特征得分将会接近于0 。
递归特征消除法 (RFE)
递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最差的(或者最好的)的特征(可以根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
步骤:
type
status
date
slug
summary
tags
category
icon
password
Property
嵌入法也是用机器学习的方法来选择特征,但是它和RFE的区别是它不是通过不停的筛掉特征来进行训练,而是使用的都是特征全集。在sklearn中,使用
SelectFromModel
函数来选择特征。最常用的是使用L1正则化和L2正则化来选择特征。正则化惩罚项越大,那么模型的系数就会越小。当正则化惩罚项大到一定的程度的时候,部分特征系数会变成0,当正则化惩罚项继续增大到一定程度时,所有的特征系数都会趋于0。 一部分特征系数会更容易先变成0,这部分系数就是可以筛掉的,也就是说选择特征系数较大的特征。常用的L1正则化和L2正则化来选择特征的基学习器是逻辑回归。
此外也可以使用决策树或者GBDT。是不是所有的机器学习方法都可以作为嵌入法的基学习器呢?也不是,一般来说,可以得到特征系数coef或者可以得到特征重要度(feature importances)的算法才可以做为嵌入法的基学习器。
基于惩罚项的特征选择法
查看线性回归的特征重要性
可以在回归数据集上拟合一个线性回归模型,并检索包含为每个输入变量找到的系数的coeff_属性,这些系数可以为粗略的特征重要性评分提供基础。
type
status
date
slug
summary
tags
category
icon
password
Property
原理
主成分分析和因子分析区别
主成分分析试图在力保数据信息丢失最少的原则下,对多个变量进行最佳综合简化,即对高维变量空间进行降维处理。
假设原来有个变量(或称指标),通常的做法是将原来p个变量(指标)作线性组合,以此新的综合变量(指标)代替原来个指标进行统计分析。如果将选取的第一个线性组合,即第一个综合变量(指标),记为,则自然希望尽可能多地反映原有变量(指标)的信息。
如何衡量信息的含量,经典的做法就是采用“方差”来表示。的方差越大,所包含的信息就越多。这样, 的选取方法是,在所有的原来 个变量(指标)的线性组合中,选取方差最大的线性组合作为 ,称为第一主成分。如第一主成分不足于代表原来 个变量(指标)的信息,则考虑选取第二主成分 。为有效反映原信息, 已有的信息不需要再现在中,即要求与的协方差为零,即。依此下去,可以构造出第三、第四、…、第个主成分。在主成分之间,不仅不相关,而且方差依次递减。在实际经济工作中,往往选取前面几个较大的主成分。虽然损失一部分信息,但抓住了原来个变量的大部分信息(一般要求超过85%),分析的结果应该是可靠的、可信的。
主成分是原来变量的线性组合,在这个线性组合中,各变量的系数有大有小,有正有负,有的大小相当,因而不能简单地认为这个主成分是某个原变量的属性的作用
数学原理
代码
type
status
date
slug
summary
tags
category
icon
password
Property
如果有两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么能不能说这两组数据是相关的呢?CCA可以帮助分析这个问题。
CCA
假设有两组一维的数据集和,相关系数的定义为:
是和的协方差,而分别是 和 的方差。相关系数 的取值为 , 的绝对值越接近于1,则X和Y的线性相关性越高。越接近于0,则X和Y的线性相关性越低。
虽然相关系数可以很好的分析一维数据的相关性,但是对于高维数据就不能直接使用了。如果 是包括人身高和体重两个维度的数据,而 是包括跑步能力和跳远能力两个维度的数据,就不能直接使用相关系数的方法。
能不能变通一下呢?
CCA使用的方法是将多维的 和 都用线性变换为1维的和,然后再使用相关系数来看 和 的相关性。将数据从多维变到1维,也可以理解为CCA是在进行降维,将高维数据降到1维,然后再用相关系数进行相关性的分析。
CCA的算法思想
CCA是将高维的两组数据分别降维到1维,然后用相关系数分析相关性。但是有一个问题是,降维的标准是如何选择的呢?PCA降维的原则是投影方差最大;LDA降维的原则是同类的投影方差小,异类间的投影方差大。对于CCA,它选择的投影标准是降维到1维后,两组数据的相关系数最大。
type
status
date
slug
summary
tags
category
icon
password
Property
它所采用的核心算法和MDS是一致的,区别在于原始空间中的距离矩阵的计算上。很多数据是非线性结构,不适合直接采用PCA算法和MDS算法。在非线性数据结构中,流形上距离很远(测地线距离)的两个数据点,在高维空间中的距离(欧式距离)可能非常近,如下图所示:
蓝色虚线为两个点的欧式距离,蓝色实线为两个点的测地线距离。但是测地线距离也不好测量,因此采用另一种路径近似代表测地线距离。
构建一个连通图,其中每个点只和距离这个点最近的 个点直接连接,和其他的点不直接连接。这样可以构建邻接矩阵,进而求出图中任意两个点的最短路径,代替测地线距离。蓝色点代表两个点之间的测地线距离,红色线代表图中两点的最短路径,两者距离相近,因此我们使用后者替代前者。进而引出isomap算法。
Isomap算法总共分为三步:
- 为每个数据点确定邻居,有两种方式,一种是把最近的个作为邻居,一种是把半 内的所有点作为邻居。可以得到加权图,边上的权重表示两点之间的输入空间距离
- 对任意两个点对,计算最短路径距离为测地线距离的估计,可以采用Dijkstra算法计算最短路径
- 把根据最短路径确定的距离矩阵作为MDS算法的输入,得到低维空间中最好地保留流形的本质结构的数据表示。
在计算近邻时,如果邻域范围指定得较大,那么距离较远的点可能被认为是近邻,造成“短路”问题;如果邻域范围指定的小,那么图中某些区域可能和其他区域不连通,出现“断路”问题。短路或者断路都会给后面计算最短路径造成误导。