sklearn RFECV with missing value



i从sklearn

稍微修改教程

使X具有缺失的值。这与原始SVC不起作用,因此我尝试将clf作为管道创建 - 螺丝夹,然后是SVC。但是,我仍然会遇到一个缺失的值错误。在管道中使用分类器(例如RFECV)将功能选择方法链接时,如何算上?

print(__doc__)
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
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import Imputer
# Build a classification task using 3 informative features
X, y = make_classification(n_samples=20, n_features=25, n_informative=3,
                           n_redundant=2, n_repeated=0, n_classes=8,
                           n_clusters_per_class=1, random_state=0)
X[1][8]=np.NAN#plant missing value
# Create the RFE object and compute a cross-validated score.
svc = SVC(kernel="linear")
clf=make_pipeline(Imputer(),svc)
# The "accuracy" scoring is proportional to the number of correct
# classifications
rfecv = RFECV(estimator=clf, step=1, cv=StratifiedKFold(2),
              scoring='accuracy')
rfecv.fit(X, y)
print("Optimal number of features : %d" % rfecv.n_features_)
# Plot number of features VS. cross-validation scores
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_)
plt.show()

您在这里尝试做的事情有两个问题:

  1. rfecv在开始时在x上执行检查,如果其拟合函数,调用check_X_y(X, y, "csr")。这会导致ValueError您正在看到,因为X甚至没有到达螺丝码。

  2. 即使不是这种情况,也似乎无法使用管道在RFECV中,由于此分类器不暴露" COEF_"或" feature_importances_"属性,这是使用的先决条件rfecv。

我建议的是在整个X的全部使用螺旋桨,即使这可能会导致火车和测试数据之间的间接泄漏。然后,您可以直接在SVC分类器上运行RFECV。

X = Imputer().fit_transform(X)
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),
              scoring='accuracy')
rfecv.fit(X, y)

相关内容

  • 没有找到相关文章

最新更新