擅长:python、mysql、java
<p>有两种方法可以做到这一点,其中一种是您已经建议的:</p>
<p>一。</p>
<pre><code>from xgboost import XGBClassifier
from sklearn.multiclass import OneVsRestClassifier
# If you want to avoid the OneVsRestClassifier magic switch
# from sklearn.multioutput import MultiOutputClassifier
clf_multilabel = OneVsRestClassifier(XGBClassifier(**params))
</code></pre>
<p><code>clf_multilabel</code>将为每个类提供一个二进制分类器,并且它将使用您在<code>params</code>中指定的任意多个核心(仅供参考,您也可以在<code>OneVsRestClassifier</code>中指定<code>n_jobs</code>,但这会占用更多内存)。</p>
<p>2。
如果您首先通过对每个具有正确标签的数据点进行<code>k</code>拷贝来稍微按摩数据,那么您可以破解一个更简单的多类问题。在那一点上,只是</p>
<pre><code>clf = XGBClassifier(**params)
clf.fit(train_data)
pred_proba = clf.predict_proba(test_data)
</code></pre>
<p>获取每个类的分类边距/概率,并确定预测标签所需的阈值。
注意,这个解决方案并不精确:如果一个产品有标签<code>(1, 2, 3)</code>,则为每个类人为地引入两个负样本。</p>