实现特征选择

Implementing feature selection

我在尝试使用特征选择的数据集进行预测时遇到的一个问题是,一旦您选择了某些特征,如果您要对测试数据集进行预测,测试数据集的特征将不会对齐,因为由于特征选择,训练数据集将具有较少的特征。您如何正确实施特征选择,使测试数据集具有与训练数据集相同的特征?

示例:

 from sklearn.datasets import load_iris
 from sklearn.feature_selection import SelectKBest
 from sklearn.feature_selection import chi2
 iris = load_iris()
 X, y = iris.data, iris.target
 X.shape
(150, 4)
 X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
 X_new.shape
(150, 2)

我相信您想通过先拟合 SelectKBest 然后 transform 测试数据来创建 feature_selector 对象。像这样:

feature_selector = SelectKBest(chi2, k=2).fit(X_train, y)
X_train_pruned = feature_selector.transform(X_train)
X_test_pruned = feature_selector.transform(X_test)

您也必须 transform 您的测试集...并且 不要 使用 fit_transform,而只使用 transform。这需要您保存您的 SelectKBest 对象,因此效果如下:

selector = SelectKBest(chi2, k=2)
X_train_clean = selector.fit_transform(X_train, y_train)
X_test_clean = selector.transform(X_test)