【问题标题】:How do I select the same features in my test data that I selected in my train data?如何在测试数据中选择与在训练数据中选择的相同特征?
【发布时间】:2023-03-14 13:16:02
【问题描述】:

我正在处理 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(测试),我希望选择相同的特征。

【问题讨论】:

    标签: python machine-learning scikit-learn feature-selection kaggle


    【解决方案1】:

    RFE 有一个transform 方法,因此您可以执行以下操作(在将选择器拟合到您的训练数据之后):

    X_test_selected = rfe.transform(X_test)
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,你的问题是你不能在测试集上做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_]  # Picking the selected features
      

      rfe.support 包含 [True False... True] 的掩码,其中 True 表示选择了该功能。

      您可以在scikit documentation阅读更多内容。

      【讨论】:

      • 是否有类似support_ 的方法使用 TruncatedSVD 进行降维,因为此步骤发生在特征选择之前,但存在类似问题?
      • 是的,只要做一个transform。看看 Arne 的代码答案。
      • 虽然正确,但这个答案有点像黑客;正如另一个答案所暗示的那样,规范的方法是只做rfe.transform()(这也适用于其他情况,例如降维)。
      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 2017-12-04
      • 2014-12-27
      • 2016-07-15
      • 2019-03-18
      • 2020-05-21
      • 2017-10-27
      • 2015-08-10
      相关资源
      最近更新 更多