我想使用scikit的SVC classifier和cross-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配置?在此先感谢大家!
最佳答案
您需要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)
关于python - 对象在scikit-learn中没有属性,如何访问它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33407076/