擅长:python、mysql、java
<p>受到@Olologin的答案的启发,我意识到0.85是通过<code>L</code>预测得到的f1分数(在本例中)的最佳加权平均值。在下面的代码中,我使用f1分数的宏平均值通过内部测试评估模型:</p>
<pre><code># Case A, inspect F1 score using the meta-classifier
F_A = f1_score(y, model_tunning.best_estimator_.predict(X), average='macro')
# Case B, inspect F1 scores of each label (binary task) and collect them by macro average
F_B = []
for label, clc in zip(y.T, model_tunning.best_estimator_.estimators_):
F_B.append(f1_score(label, clf.predict(X)))
F_B = mean(F_B)
F_A==F_B # True
</code></pre>
<p>因此,这意味着<code>GridSearchCV</code>应用4*2*4组参数中的一组来构建元分类器,而元分类器又使用<code>L</code>分类器对每个标签进行预测。结果将是<code>L</code>标签的<code>L</code>f1分数,每个分数都是一个二进制任务的执行。最后,通过取<code>L</code>f1分数的平均值(宏或加权平均值,由f1分数中的参数指定)得到单个分数。在</p>
<p>{*4}在这个例子中,选择哪个参数的平均值是。在</p>
<p>虽然使用包装器解决多标签问题很方便,但它只能在构建<code>L</code>分类器的相同参数下最大化f1平均分数。如果要单独优化每个标签的性能,似乎必须构建<code>L</code>分类器,而不使用包装器。在</p>