机器学习中很重要的一环是特征选择,因为选择的特征过少会造成欠拟合(高偏差), 相反会造成过拟合(高方差),所以选择合适的特征是很重要的。
特征选择包括封装性特征选择和过滤性特征选择,封装特征选择包括前向搜索和后向搜索。
特征选择:
特征子集F, 自己评价准则H。
封装性特征选择使用搜索方法,包括前向搜索和后向搜索。
前向搜索算法:
初始化F,将F设为空集
{
for i to n://n为特征的数目
进行K交叉验证
endfor
选择误差最小的特征mi加入F;
}当F包含所有特征或者等于设定的阀值K跳出循环
然后利用所有数据训练模型
后向搜索:
初始化F,将F设为包含所有特征
{
for i to n://n为特征的数目
进行K交叉验证
endfor
选择误差最大的特征mi,从F中剔除;
}当F等于设定的阀值K跳出循环
然后利用所有数据训练模型
前向和后向搜索适合特征数量较少的情况,如果特征数量太多会导致计算量增加,负担太重。实践中效果比较好。
过滤性特征选择:
算法:
初始化F,并设为空集
首先进行每个特征与标签的相关度评定,然后安照相关度大到小排列。
for i to n:
选取前i个,加入F,进行交叉验证
endfor
找到误差最小的i
训练所有数据
过滤性特征选择适合特征多的时候,但是其误差有点大。
对于每个特征与标签的相关度评定方法,我会在后面介绍。