我想使用scikit的SVC分类器的不同参数进行交叉验证,所以我尝试了以下方法:
然后,让我们使用SVC算法:
from sklearn import svmprint('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配置?提前感谢大家!
回答:
你需要使用Python的partial
。一般来说,你的函数需要传递一个可以用clf_class(**kwargs)
调用的东西,所以如果你传递一个特定的object
(通过clf = SVC(kernel='linear')
获得),它将不会工作,因为你尝试这样做
SVC(kernel='linear')(**kwargs) # 错误!
你想要调用的是
SVC(kernel='linear', **kwargs)
所以你可以在Python中声明部分函数
from functools import partiallinear_svm = partial(svm.SVC, kernel='linear')
现在你可以调用
linear_svm(**kwargs)