如果一个数据集中有很多的特征,但是不是所有的特征都是对模型有作用,或者作用非常小时,我们就需要剔除,那么我们用上面技术去选择特征呢?
第一种,穷举法
把所有的特征组合都计算对应的score,最后选择score最大的特征集合。
但是所耗时间非常大,当特征非常多的时候,时间复杂度太高了。
第二,贪心算法
- Forward Stepwise(前向逐步选择法)
- Backward Stepwise(后向逐步选择法)
Forward Stepwise
Forward Stepwise是通过类似最优选择维特比算法的组合方式,第一次选出最好的,然后再跟其他的进行组合,以此类推下去,时间复杂度节约了很多。
Backward Stepwise
Backward Stepwise是通过每次减掉去筛选最优的
Forward Stepwise和Backward Stepwise的终止条件是,只要下次的组合中比上一次的都没有大,那就终止,这两个方法求解都是局部最优解,达不到全局最优
第三种方法是通过正则lasso去筛选特征
看下图所示,L1正则是菱形等高线,而在坐标轴和目标函数的相交才是最优值,其他等高线都是0而L2正则是一个椭圆形,很少有最优解出现在坐标轴,所以参数可能会趋向很小,但是不会为0.
那么加了L1正则的目标函数,该如何求解参数呢?
请看后面的lasso回归模型