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))
有两种方法可以做到这一点,其中一种是您已经建议的:
一。
clf_multilabel
将为每个类提供一个二进制分类器,并且它将使用您在params
中指定的任意多个核心(仅供参考,您也可以在OneVsRestClassifier
中指定n_jobs
,但这会占用更多内存)。2。 如果您首先通过对每个具有正确标签的数据点进行
k
拷贝来稍微按摩数据,那么您可以破解一个更简单的多类问题。在那一点上,只是获取每个类的分类边距/概率,并确定预测标签所需的阈值。 注意,这个解决方案并不精确:如果一个产品有标签
(1, 2, 3)
,则为每个类人为地引入两个负样本。您可以为要预测的每个类添加一个标签。 例如,如果这是您的数据:
您只需根据输出向输入添加一个标签,就可以重塑数据的形状,xgboost应该学习如何相应地处理它,如下所示:
这样你会得到一个一维的Y,但是你仍然可以预测许多标签。
相关问题 更多 >
编程相关推荐