2016-08-11 132 views
2

我試圖用scikit學習下面的代碼遞歸功能選擇。功能選擇

from sklearn import datasets, svm 
from sklearn.feature_selection import SelectKBest, f_classif 
from sklearn.feature_selection import RFE 
import numpy as np 

input_file_iris = "/home/anuradha/Project/NSL_KDD_master/Modified/iris.csv" 
dataset = np.loadtxt(input_file_iris, delimiter=",") 
X = dataset[:,0:4] 
y = dataset[:,4] 

estimator= svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1) 

selector = RFE(estimator,3, step=1) 
selector = selector.fit(X,y) 

但它提供了以下錯誤

Traceback (most recent call last): 
File "/home/anuradha/PycharmProjects/LearnPython/Scikit-learn/univariate.py", line 30, in <module> 
File "/usr/local/lib/python2.7/dist-packages/sklearn/feature_selection/rfe.py", line 131, in fit 
return self._fit(X, y) 


File "/usr/local/lib/python2.7/dist-packages/sklearn/feature_selection/rfe.py", line 182, in _fit 



raise RuntimeError('The classifier does not expose ' 
RuntimeError: The classifier does not expose "coef_" or 
"feature_importances_" attributes 

請一些人可以幫助我解決這個或引導我到另一種解決方案

回答

2

內核更改爲線性和你的代碼會工作。

此外,svm.OneClassSVM用於無監督異常值檢測。你確定你想用它作爲估算器嗎?或者也許你想使用svm.SVC()。請查看以下鏈接以獲取文檔。

http://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html

最後,虹膜數據集是sklearn已經可用。您已導入sklearn.datasets。所以你可以簡單地加載虹膜爲:

iris = datasets.load_iris() 
X = iris.data 
y = iris.target 
+0

是啊謝謝,我明白了。但我需要知道一件事,爲什麼我們不能使用svm.OneClassSVM作爲估算器? – Anuradha

+0

REF用於消除無關緊要的特徵,因此您需要使用**監督學習**估計器。它從所有特徵開始,將估計量與數據擬合,然後根據重要性爲特徵分配權重。然後消除最不重要的功能,直到數據集中剩餘功能的數量等於n_features。相反,OneClassSVM是一種**無監督**技術,用於識別觀測值中的異常值。換句話說,它用於消除**觀測值中的異常值**,而不是消除無用的**特徵**。 – MhFarahani

+0

謝謝,我明白了。 – Anuradha