2016-08-11 137 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