对象在scikit-learn中没有属性,我该如何访问它?

时间:2015-10-29 06:10:11

标签: python python-2.7 object python-3.x machine-learning

我想使用scikit的SVC classifiercross-vlidation的不同参数,所以我尝试了以下内容:

然后,让我们使用SVC算法:

from sklearn import svm
print('Support vector machine(SVM):   {:.2f}'.format(metrics.accuracy_score(
            y, stratified_cv(X, y, svm.SVC(kernel='linear')))))

但似乎我无法访问该对象:

AttributeError                            Traceback (most recent call last)
<ipython-input-16-dacd8d429376> in <module>()
      5 
      6 print('Support vector machine(SVM):   {:.2f}'.format(metrics.accuracy_score(
----> 7             y, stratified_cv(X, y, svm.SVC(kernel='linear')))))
      8 

AttributeError: 'SVC' object has no attribute 'SVC'

有趣的是,当我尝试这个时:

print('Support vector machine(SVM):   {:.2f}'.format(metrics.accuracy_score(
            y, stratified_cv(X, y, svm.SVC))))

我明白了:

Support vector machine(SVM):   0.46

可能会发生什么?...给出上述交叉验证策略的任何想法,如何设置我自己的SVM配置?先谢谢你们!

1 个答案:

答案 0 :(得分:2)

你需要来自python的partial。一般情况下,您的功能要求您传递可以使用clf_class(**kwargs)调用的内容,因此如果您传递特定的object(通过clf = SVC(kernel='linear')获得),则无法使用做

SVC(kernel='linear')(**kwargs) # error!

你想打电话

SVC(kernel='linear', **kwargs)

所以你可以在python中声明部分函数

from functools import partial
linear_svm = partial(svm.SVC, kernel='linear')

现在你可以打电话了

linear_svm(**kwargs)