2017-04-18 61 views
1

當試圖使用功能選擇數據集進行預測時遇到的一個問題是,一旦選擇了某些功能,如果要預測測試數據集,測試數據集功能將不會對齊因爲訓練數據集由於特徵選擇而具有較少的特徵。如何正確地實現特徵選擇,使測試數據集與訓練數據集具有相同的特徵?實現功能選擇

例子:

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) 
+0

你必須'transform'您的測試設置過......而*不*使用'fit_transform',只是'transform'。 –

+0

@ juanpa.arrivillaga我唯一擔心的是在測試數據集上實現特徵選擇時,是否有可能從訓練數據集中獲得不同的特徵集? – user

+1

你*不*功能選擇測試數據的原因。 –

回答

2

你必須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) 
0

我相信你想用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)