29、带交叉验证的递归特征消除
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了29、带交叉验证的递归特征消除相关的知识,希望对你有一定的参考价值。
参考技术A 29、带交叉验证的递归特征消除import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
from sklearn.datasets import make_classification
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 使用3个信息特性构建分类任务
X, y = make_classification(n_samples=1000, n_features=25, n_informative=3,
n_redundant=2, n_repeated=0, n_classes=8,
n_clusters_per_class=1, random_state=0)
#创建RFE对象并计算交叉验证得分
svc = SVC(kernel="linear")
#“准确度”得分与正确的次数成正比
#分类
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),
scoring='accuracy')
rfecv.fit(X, y)
print("Optimal number of features : %d" % rfecv.n_features_)
# 特征数vs。交叉验证得分
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Cross validation score (nb of correct classifications)")
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_ ,color='m')
plt.title("带交叉验证的递归特征消除")
plt.show()
scikit learn(sklearn) 中 RFECV 中的特征如何排名?
【中文标题】scikit learn(sklearn) 中 RFECV 中的特征如何排名?【英文标题】:How are features ranked in RFECV in scikit learn(sklearn)? 【发布时间】:2017-07-18 09:38:11 【问题描述】:我使用递归特征消除和交叉验证 (rfecv) 来找到我拥有的几个特征的最佳准确度得分 (m =154)。
rfecv = RFECV(estimator=logreg, step=1, cv=StratifiedKFold(2),
scoring='accuracy')
rfecv.fit(X, y)
排名 (rfecv.ranking_
) 和相关分数 (rfecv.grid_scores_
) 让我感到困惑。从前 13 个特征(排名前 10)中可以看出,它们的排名不是基于分数。我了解排名与交叉验证过程中排除该功能的方式和时间有关。但那么分数与排名有什么关系呢?我希望排名最高的功能得分最高。
Features/Ranking/Scores
b 1 0.692642743
a 1 0.606166207
f 1 0.568833672
i 1 0.54935204
l 2 0.607564808
j 3 0.613495238
e 4 0.626374391
l 5 0.581064621
d 6 0.611407556
c 7 0.570921354
h 8 0.570921354
k 9 0.576863707
g 10 0.576863707
【问题讨论】:
您误解了grid_scores_
和ranking_
。它们没有任何相关性。 grid_scores_
不是很多功能。
他们的分数是多少?你能详细说明吗?那么排名是多少呢?感谢您抽出宝贵时间。
来自文档:“交叉验证分数使得 grid_scores_[i] 对应于第 i 个特征子集的 CV 分数。”它们不代表特征分数。 They represent score of estimator when certain features are selected.
你很困惑,因为grid_scores_
的大小与ranking_
相同。把step
改成1以上,看看效果。
【参考方案1】:
_grid_scores
不是第 i 个特征的分数,它是使用第 i 个特征子集训练时估计器产生的分数。
要理解这意味着什么,请记住递归特征消除 (RFE) 的工作原理是训练模型、评估它,然后删除 step
最不重要的特征,然后重复。
所以,_grid_score[-1]
将是在所有特征上训练的估计器的分数。 _grid_score[-2]
将是删除 step
特征的估计器的分数。 _grid_score[-3]
将是删除了 2*step
特征的估计器的分数。
因此,网格得分不反映单个特征的得分。实际上,如果 step 大于 1,则网格分数会比特征分数少。
【讨论】:
非常感谢!我如何知道每个子集中有哪些特征? 特征按排名倒序淘汰。不幸的是,您不知道在 rank-1 特征(即选定特征)中消除特征的顺序。以上是关于29、带交叉验证的递归特征消除的主要内容,如果未能解决你的问题,请参考以下文章