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