【发布时间】:2016-02-20 09:13:35
【问题描述】:
我正在使用OneVsRestClassifier 和SVC 处理多标签分类,
from sklearn.datasets import make_multilabel_classification
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV
L=3
X, y = make_multilabel_classification(n_classes=L, n_labels=2,
allow_unlabeled=True,
random_state=1, return_indicator=True)
model_to_set = OneVsRestClassifier(SVC())
parameters = {
"estimator__C": [1,2,4,8],
"estimator__kernel": ["poly","rbf"],
"estimator__degree":[1, 2, 3, 4],
}
model_tunning = GridSearchCV(model_to_set, param_grid=parameters,
scoring='f1')
model_tunning.fit(X, y)
print model_tunning.best_score_
print model_tunning.best_params_
#0.855175822314
#{'estimator__kernel': 'poly', 'estimator__C': 1, 'estimator__degree': 3}
第一个问题
0.85 代表什么数字?它是L 分类器中的最高分还是平均分?同样,这组参数是否代表L 分类器中得分最高的?
第二个问题
基于这样一个事实,如果我是对的,OneVsRestClassifier 确实为每个标签构建了L 分类器,人们可以期望访问或观察每个标签的性能。但是,在上面的例子中,如何从GridSearchCV 对象中获取L 分数呢?
编辑
为了简化问题并帮助自己更多地了解OneVsRestClassifier,在调整模型之前,
model_to_set.fit(X,y)
gp = model_to_set.predict(X) # the "global" prediction
fp = model_to_set.estimators_[0].predict(X) # the first-class prediction
sp = model_to_set.estimators_[1].predict(X) # the second-class prediction
tp = model_to_set.estimators_[2].predict(X) # the third-class prediction
可以证明gp.T[0]==fp、gp.T[1]==sp和gp.T[2]==tp。因此,“全局”预测只是“连续”L 个人预测,第二个问题已解决。
但我仍然感到困惑的是,如果一个元分类器 OneVsRestClassifier 包含 L 分类器,GridSearchCV 怎么可能只返回一个最好的分数,对应于 4*2*4 组参数之一,对于具有L 分类器的元分类器OneVsRestClassifier?
很高兴看到任何评论。
【问题讨论】:
标签: python scikit-learn multilabel-classification grid-search