十分钟掌握python机器学习特征选择

在机器学习中,特征选择是实践中的一步, 帮你在所有特征中选择对结果贡献最多的特征。 显然, 使用不相关数据会减少模型的精确性,尤其是线性算法:线性回归,逻辑回归等。因为线性算法一般使用梯度下降来寻找最优值, 那么如果特征无关, 方向就有可能误导

有效的特征筛选有以下优势:

1,减少过拟合。 这个话题其实比较大。 要理解什么是过拟合, 就是模型过于贴近训练集, 导致了泛化能力很差。

2,提高精确性。更少的无效数据意味着模型精确性的提升。

3,减少训练时间。 数据少了自然运算时间短了。

sklearn.feature_selection模块中的类可用于样本集中的特征选择/维数降低,以提高估计器的准确度

1,SelectKBest类

scikit-learn提供了SelectKBest类可以用来根据一些统计的测试来选择出一些数量的最有效的特征,选择K个与输入值相关性最大的特征,移除其他的特征

SelectKBest(score_func, k=10)

score_func:回调函数,默认是 'f_classif ',基于方差检验的方法估计两个随机变量之间的线性依赖程度

对于回归: f_regression , mutual_info_regression

对于分类: chi2 , f_classif , mutual_info_classif

类方法:fit_transform(X[, y]) 适合于数据,然后转换它,得到转换后的数据

2,VarianceThreshold(threshold=0.0)

它会移除所有那些方差不满足一些阈值的特征。默认情况下,它将会移除所有的零方差特征,即那些在所有的样本上的取值均不变的特征

移除那些在整个数据集中特征值为0或者为1的比例超过80%的特征

3,递归特征消除法 RFE

RFE(estimator, n_features_to_select=None, step=1, verbose=0)

递归特征消除呢就是说每次把对结果最没有用的这个特征去掉。 然后如此继续。 最终得到自己想留下的特征数量。

递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一遍,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。

RFE的稳定性很大程度上取决于在迭代的时候底层用哪种模型。例如,假如RFE采用的普通的回归,没有经过正则化的回归是不稳定的,那么RFE就是不稳定的;假如采用的是Ridge,而用Ridge正则化的回归是稳定的,那么RFE就是稳定的

4,SelectFromModel进行特征选择

SelectFromModel是一个元转换器,它可以用来处理任何带有 coef_ 或者 feature_importances_属性的训练之后的评估器。如果相关的``coef_`` 或者 featureimportances 属性值低于预先设置的阈值,这些特征将会被认为不重要并且移除掉

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();