Feature-Selection

使用 scikit learn 識別特徵選擇後的過濾特徵

  • June 22, 2015

這是我在 Python中的特徵選擇方法的代碼:

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
X.shape
(150, 4)
X_new = LinearSVC(C=0.01, penalty="l1", dual=False).fit_transform(X, y)
X_new.shape
(150, 3)

但是在獲得新的 X(因變量 - X_new) 之後,我怎麼知道哪些變量被刪除以及在這個新的更新變量中考慮了哪些變量?(刪除哪一個或哪三個存在於數據中。)

獲得此標識的原因是對新的測試數據應用相同的過濾。

您可以做兩件事:

  • 檢查coef_參數並檢測忽略了哪一列
  • 使用相同的模型進行輸入數據轉換使用方法transform

您的示例的小修改

>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.cross_validation import train_test_split
>>>
>>> iris = load_iris()
>>> x_train, x_test, y_train, y_test = train_test_split(
...     iris.data, iris.target, train_size=0.7
... )
>>>
>>> svc = LinearSVC(C=0.01, penalty="l1", dual=False)
>>>
>>> X_train_new = svc.fit_transform(x_train, y_train)
>>> print(X_train_new.shape)
(105, 3)
>>>
>>> X_test_new = svc.transform(x_test)
>>> print(X_test_new.shape)
(45, 3)
>>>
>>> print(svc.coef_)
[[ 0.          0.10895557 -0.20603044  0.        ]
[-0.00514987 -0.05676593  0.          0.        ]
[ 0.         -0.09839843  0.02111212  0.        ]]

如您所見,方法transform為您完成所有工作。而且從coef_矩陣你可以看到最後一列只是一個零向量,所以你模型忽略數據中的最後一列

引用自:https://stats.stackexchange.com/questions/158136

comments powered by Disqus