scikit-learn 特征排名 returns 相同的值
scikit-learn feature ranking returns identical values
我正在使用 scikit-learn 的 RFECV class 来执行特征选择。我有兴趣确定一堆变量的相对重要性。但是,scikit-learn returns 多个变量的相同排名 (1)。这也可以在他们的示例代码中看到:
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFECV
>>> from sklearn.svm import SVR
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFECV(estimator, step=1, cv=5)
>>> selector = selector.fit(X, y)
>>> selector.support_
array([ True, True, True, True, True, False, False, False, False,
False])
>>> selector.ranking_
array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
有没有一种方法可以让 scikit-learn 也识别出最重要的特征之间的相对重要性?
如果需要,我很乐意增加树木或类似物的数量。与此相关,请问有什么办法可以看出这个排名的置信度吗?
RFECV
的目标是 select 最佳特征数量,因此它 cross-validation 超过 select 的特征数量。
在您的情况下,selected 保留 5 个特征。
然后在整个数据集上重新拟合模型,直到只剩下 5 个特征。
这些没有被删除,所以在RFE中没有排名。
您只需 运行 RFE
即可获得所有功能的排名
from sklearn.datasets import make_friedman1
from sklearn.feature_selection import RFE
from sklearn.svm import SVR
X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
estimator = SVR(kernel="linear")
selector = RFE(estimator, step=1, n_features_to_select=1)
selector = selector.fit(X, y)
selector.ranking_
array([ 4, 3, 5, 1, 2, 10, 8, 7, 6, 9])
您可能会问自己为什么不保留 cross-validation 的排名,它计算了所有功能的排名。但是,对于 cross-validation 中的每个拆分,特征的排名可能不同。
因此,或者 RFECV 可以 return 5 个不同的排名,您可以比较它们。不过,这不是界面(但也很容易通过 RFE 和自己完成简历来完成)。
换句话说,这可能不是计算特征影响和直接查看系数的最佳方法,或者排列重要性可能提供更多信息。
我正在使用 scikit-learn 的 RFECV class 来执行特征选择。我有兴趣确定一堆变量的相对重要性。但是,scikit-learn returns 多个变量的相同排名 (1)。这也可以在他们的示例代码中看到:
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFECV
>>> from sklearn.svm import SVR
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFECV(estimator, step=1, cv=5)
>>> selector = selector.fit(X, y)
>>> selector.support_
array([ True, True, True, True, True, False, False, False, False,
False])
>>> selector.ranking_
array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
有没有一种方法可以让 scikit-learn 也识别出最重要的特征之间的相对重要性?
如果需要,我很乐意增加树木或类似物的数量。与此相关,请问有什么办法可以看出这个排名的置信度吗?
RFECV
的目标是 select 最佳特征数量,因此它 cross-validation 超过 select 的特征数量。
在您的情况下,selected 保留 5 个特征。
然后在整个数据集上重新拟合模型,直到只剩下 5 个特征。
这些没有被删除,所以在RFE中没有排名。
您只需 运行 RFE
即可获得所有功能的排名from sklearn.datasets import make_friedman1
from sklearn.feature_selection import RFE
from sklearn.svm import SVR
X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
estimator = SVR(kernel="linear")
selector = RFE(estimator, step=1, n_features_to_select=1)
selector = selector.fit(X, y)
selector.ranking_
array([ 4, 3, 5, 1, 2, 10, 8, 7, 6, 9])
您可能会问自己为什么不保留 cross-validation 的排名,它计算了所有功能的排名。但是,对于 cross-validation 中的每个拆分,特征的排名可能不同。 因此,或者 RFECV 可以 return 5 个不同的排名,您可以比较它们。不过,这不是界面(但也很容易通过 RFE 和自己完成简历来完成)。
换句话说,这可能不是计算特征影响和直接查看系数的最佳方法,或者排列重要性可能提供更多信息。