RFECV机器学习功能选择花了太长时间的Python

时间:2019-11-11 07:20:28

标签: python scikit-learn feature-selection rfe

我对SKLearn还是比较陌生,对功能选择有疑问。

我正在尝试建立一个SVM模型,我的数据具有大约30个特征(全部约1万个数据点),并且我目前正在尝试消除尽可能多的无用特征。我首先删除了与其他功能高度相关的功能,现在想使用RFECV优化其余功能。

首先,我在sklearn网站上找到了这段代码,但遇到了一些问题,想知道是否有人可以提供帮助。

X = df.drop(['label'], axis=1)
y = df['label']

rfe = RFECV(SVR(kernel='linear'), step=1, scoring='accuracy')
rfe.fit(X, y)
print(rfe.ranking_)

首先,如果我一直运行它,那将永远需要它,我已经将它保留了很长一段时间,实际上我还没有设法完成它。但是,如果我删除kernel='linear',它会运行得相当快,但是会产生一条错误消息,该消息似乎来自rfe.fit(X, y)

RuntimeError: The classifier does not expose "coef_" or "feature_importances_" attributes

我已经将功能缩减到大约10个,只是为了查看我是否可以加快测试速度,还尝试了step变量和kernel='linear'变量那里似乎没有什么可以帮助加快它的速度,它只运行了几个小时就什么都不做。我只想要列出使用RFECV方法使用的功能。有人对我做错了什么或我可以做些什么来加快速度吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

  1. 当您删除“ kernel ='linear'”时,它运行很快的原因是,它很快就会失败。
  2. 仅SVR(kernel ='linear')返回coef_,RFECV可以使用它。如果您使用任何其他内核,则不会返回coef_,因此RFECV无法使用它。
  3. 通过设置“ step = 1”,您将强制RFECV(SVR(kernel ='linear'),step = 1,scoring ='accuracy')适应所有n个特征,排除系数最低的那个,再次适合n-1个特征,再次排除系数最低的特征,依此类推。 这很耗时。

尝试以下方法以加快流程:

RFECV(SVR(kernel='linear'), step=5, scoring='accuracy', min_features_to_select = 10)

这应该明显更快。根据您的特定需求调整“步骤”和“ min_features_to_select”。