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



我是SKLearn的新手,有一个关于功能选择的问题。

我正在尝试建立一个SVM模型,我的数据大约有30个特征,全部都是大约10k个数据点,我目前正在努力消除尽可能多的无用特征。我首先删除了与其他功能高度相关的功能,现在想使用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. 当您删除"kernel='linear'"时,它运行得很快的原因是它失败得很快
  2. 只有SVR(kernel='linear'(返回可由RFECV使用的coeff_。如果您使用任何其他内核,则不会返回coeff_,因此RFECV无法使用它
  3. 通过设置"step=1",您将强制RFECV(SVR(内核="线性"(,step=1,评分="准确度"(拟合所有n个特征,排除系数最低的特征,再次拟合n-1个特征,再次排除系数最小的特征,等等。这很耗时

尝试此操作以加快进程:

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

这应该要快得多。根据您的具体需要调整"step"one_answers"min_features_to_select"。

SVR模型在使用缩放/归一化数据时效果更好。试试这个:

from sklearn.preprocessing import MinMaxScaler
X = df.drop(['label'], axis=1)
X_norm = MinMaxScaler().fit_transform(X)
y = df['label']
rfe = RFECV(SVR(kernel='linear'), step=1, scoring='accuracy')
rfe.fit(X_norm, y)
print(rfe.ranking_)

从我个人的经验来看,这应该会加快速度。

或者,我相信您也可以使用标准缩放器来缩放您的功能:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

最新更新