入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
目录
一、特征选择的总体介绍
1、特征
(1)相关特征
(2)无关特征
(3)冗余特征
2、特征选择的定义与原因
(1)定义
(2)进行特征选择的原因
3、如何选取一个包含所有重要信息的特征子集(如何进行特征选择)
4、常见的特征选择方法
二、子集搜索与评价
1、子集搜索
(1)前向搜索
(2)后向搜索
(3)双向搜索
(4)优缺点
2、子集评价
三、特征选择方法一 —— 过滤式选择
1、定义
2、典型方法——Relief
(1)具体做法
(2)相关统计量
(3)变式——Relief-F
四、特征选择方法二 —— 包裹式选择
1、定义
2、对比过滤式选择
3、典型方法 —— LVW
(1)算法步骤
(2)算法思路总结
五、特征选择方法三 —— 嵌入式选择
1、定义
2、L1正则化
(1)L1与L2正则化的对比与L1的特征选择作用说明
(2)L1正则化问题的求解方法——近端梯度下降(PGD)
六、稀疏表示与字典学习
1、稀疏性
(1)特征稀疏
(2)样本稀疏表达
2、数据集的稀疏表示——字典学习(稀疏编码)
(1)目的
(2)定义
(3)原理步骤
七、压缩感知
对当前学习任务有用的属性
对当前学习任务没什么用的属性
该属性所包含的信息能从其他特征中推演出来(eg:面积:能从长宽推出来),它很多时候不起作用,但也有时候可恰好对应完成学习任务所需的中间概念,是有益的,能降低学习任务的难度(比如要算体积,底面积这个冗余特征有利于估算体积)
从特征集合中选取出相关特征,是一种数据预处理过程。
A、减轻维数灾难问题(与降维的原因相同)
B、去除不相关特征往往会降低学习任务的难度
我们不能直接用排列组合进行遍历所有可能子集,这样会遭遇组合爆炸。
所以我们选择产生一个“候选特征子集”,评价它的好坏,然后根据评价结果产生下一个候选特征子集,再进行评价,持续进行直到无法找到一个更好的子集为止。
这样我们将这个问题细化成了2个小问题:
(1)如何根据评价结果生成下一个候选特征子集?(子集搜索)
(2)如何评价候选特征子集的好坏?(子集评价)
(1)过滤式(先选择特征子集,再学习)
(2)包裹式(先学习,再以这个学习器的基础上选择特征子集)
(3)嵌入式(学习与特征子集的选择的优化同时进行)
给定特征集合{a1,a2,…,ad},将每个特征看做一个候选子集,对这d个候选单特征子集进行评价,选出一个最优子集(比如{a2}),将{a2}作为第一轮的选定集;
然后不断地在上一轮的选定集中加入一个特征,构成新的候选子集,寻找最优且优于上一轮选定集的新候选特征子集(如{a2,a4}));
若在第k+1轮时无比上一轮选定集更优的特征子集,则将上一轮选定的k特征集合作为特征选择结果。
从完整的特征集合开始,每次尝试去掉一个无关特征。
前向后向结合,每一轮逐渐增加选定相关特征,同时减少无关特征。
优点:思路简单,速度快,不用全部情况都遍历一遍。
缺点:使用贪心算法,不从总体上考虑其它可能情况,每次选取局部最优解,不再进行回溯处理,结果不一定是最好的。
对每个候选特征子集,可基于训练数据集来计算其信息增益,以此作为评价准则。
关于信息增益可以看决策树详解_tt丫的博客-CSDN博客_决策树
信息增益越大,该特征子集包含的有助于分类的信息越多。
先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。
适用于二分类问题。
设计了“相关统计量”来度量特征的重要性。该统计量是一个向量,其每个分量分别对应一个初始特征(分量值越大,对应属性的分类能力越强),而特征子集的重要性则是由子集每个特征所对应的相关统计量分量之和决定的。
于是,最终可以通过指定一个阈值t,然后选择比t大的相关统计量分量对应的特征即可,也可以指定选取特征的个数k,然后选择相关统计量分量最大的k个特征。
假设训练集 D 为
对每个样本,计算与 同类别的最近邻 ,称为是 “猜中近邻”;计算与 不同类别的最近邻 ,称为是 “猜错近邻”;
则属性 j 对应的相关统计量为:
其中, 代表样本 在属性 j 上的取值, 的计算取决于属性 j 的类型:
A、对离散型属性:
B、对连续型属性:
注:已经规范化到 [0,1] 区间。
适用于多分类问题。
其余做法不变,相关统计量公式变为:
其中样本属于第k类。
直接把最终将要使用的学习器的性能作为特征子集的评价准则,即目的是为给定学习器选择最有利于其性能的量身定做的特征子集。
直接针对给定学习器进行优化,从最终学习器性能来看,比过滤式更好;但多次训练学习器使得计算开销大得多。
在拉斯维加斯方法框架下使用随机策略进行子集搜索,并以最终分类器的误差作为特征子集评价准则。
A、随机产生一个特征子集A',然后计算在A'下学习器L的误差;
B、如果(这个误差比之前得到的误差都要小)或者(误差差不多但是A‘中的特征数目更少),那么我们更新最终的特征子集为A’,并记下它的误差和特征数目;
以上过程(A,B)持续循环进行,直到达到迭代次数,最终输出的特征子集即为我们想要的结果。
嵌入式是一种将特征选择与学习器训练完全融合的特征选择方法,即将特征选择融入学习器的优化过程中。
详见逻辑回归(Logistic Regression)_tt丫的博客-CSDN博客_逻辑回归
L1 和 L2 正则化都有助于降低过拟合风险,但L1还会带来一个额外的好处:它比L2更易于获得 “稀 疏”解,即求得的w会有更少的非零分量(即抹除了一些特征属性)。
总的来说:
L1范数会趋向产生少量的特征,其他特征的权值都是0;
L2会选择更多的特征,这些特征的权值都会接近于0。
这样L1范数在特征选择上就十分有用,而L2范数则具备较强的控制过拟合能力。
补充:利普希茨连续条件(L-Lipschitz条件)
L对于在实数集的子集的函数,若存在常数L,使得:
,则称 f 符合利普希茨条件,对于 f 最小的常数L称为 f 的利普希茨常数。简单说来就是:存在一个实数L,使得对于函数 f(x)上的任意两点的连线的斜率的绝对值不大于L,最小的L称为该函数的Lipschitz常数。
直观上,Lipschitz连续函数限制了函数改变的速度。
待补,公式没推懂囧
前面所考虑的都是特征具有“稀疏性”,即矩阵中的许多列与当前学习任务无关。特征选择去除这些无关列,使学习的难度下降,可解释性提高。
样本矩阵D中存在许多0元素(每行对应于一个样本,每列对应于一个特征),但不是整行整列的出现。
样本拥有这样的稀疏表达形式时,使大多数问题变得线性可分(我的理解是:他们的分布比较松散,没有那么复杂集中,可以用一刀切的方法把他们分开,即线性可分),并且利于存储(稀疏矩阵有很多高效存储方法)。
将普通非稀疏数据转为“稀疏表示”形式(对应上面的(2))—— 恰当稀疏。
即为普通稠密表达的样本找到合适的字典,将样本转化为合适的稀疏表示形式(稀疏编码),从而简化学习任务,降低模型复杂度。
关注的是如何利用信号本身所具有的稀疏性,从部分观测样本中恢复原信号,通常压缩感知分为感知测量(关注如何对原始信号进行处理以获得稀疏样本表示)和重构恢复(关注的是如何基于稀疏性从少量观测中恢复原信号,通常压缩感知指的是这部分)两个阶段。