我在参加Kaggle的房价竞赛。我有一个数据准备函数,使用递归特征消除(RFE)进行特征选择,代码如下:
rfe = RFE(estimator=ElasticNet(), n_features_to_select=10)X_selected = rfe.fit_transform(X, y)X = pd.DataFrame(X_selected)
其中 X, y = dataset.iloc[:,:-1], dataset.iloc[:,-1:]
。当我使用训练数据集时,这段代码运行良好,但在使用测试数据集时,由于没有 y
变量,代码无法运行。
我的问题是,如何在使用训练数据集时选择相同的特征?
我在使用 TruncatedSVD
进行降维时也遇到了同样的问题:
svd = TruncatedSVD(n_components=30)X_trans = svd.fit_transform(X)X = pd.DataFrame(X_trans)
我有训练集 X 和测试集 datasetTest,我想选择相同的特征。
回答:
如果我理解正确的话,你的问题是你无法在测试集上使用 fit_transform
,因为你没有 y 变量。
你可以访问 rfe.support_
,它会返回哪些特征被选中。
rfe = RFE(estimator=ElasticNet(), n_features_to_select=10)X_selected = rfe.fit_transform(X, y)X = pd.DataFrame(X_selected)X_test_selected = X_test[:, rfe.support_] # 选择被选中的特征
rfe.support
包含一个掩码 [True False... True]
,其中 True
表示该特征被选中。
你可以在 scikit 文档 中了解更多信息。