svm-rfe 在不同级别的功能上
Posted
技术标签:
【中文标题】svm-rfe 在不同级别的功能上【英文标题】:svm-rfe over different level of features 【发布时间】:2020-03-14 18:04:46 【问题描述】:假设我有包含 1000 个特征的数据。我想对这些数据应用 SVM-RFE,每次删除 10% 的特征。 如何获得消除阶段整体水平的准确性。例如,我想获得超过 1000 个功能、900 个功能、800 个功能、....、2 个功能、1 个功能的性能。
另外,我想跟踪每个级别的功能。
【问题讨论】:
请用一些代码编辑您的代码,到目前为止您尝试了什么?你是怎么开始的 【参考方案1】:当前框架不会在 RFE 的每次迭代中对模型/存储特征集进行评分。
也许您可以使用私有函数来获得评分,该函数旨在用于 RFECV 类。
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFE
>>> from sklearn.svm import SVR
>>> from sklearn.model_selection._validation import _score
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFE(estimator, 5, step=1)
>>> from sklearn.metrics import check_scoring
>>> scorer = check_scoring(estimator, 'r2')
>>> selector._fit(
... X, y, lambda estimator, features:
... _score(estimator, X[:, features], y, scorer))
RFE(estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,
gamma='scale', kernel='linear', max_iter=-1, shrinking=True,
tol=0.001, verbose=False),
n_features_to_select=5, step=1, verbose=0)
>>> selector.scores_
[0.6752027280057595, 0.6750531506827873, 0.6722333425078437, 0.6684835939207456, 0.6669024507875724, 0.6751247326304468]
>>> selector.ranking_
array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
如果您想检索每个级别/迭代的功能集,您需要编辑fit method。
另一种选择,您可以在rfe
之上进行迭代,然后存储功能集和性能。
【讨论】:
以上是关于svm-rfe 在不同级别的功能上的主要内容,如果未能解决你的问题,请参考以下文章