我有一个包含功能及其标签的数据集。
它看起来像这样:
X1, X2, X3, X4, X5 .. Xn L1, L2, L3
Y1, Y2, Y3, Y4, Y5 .. Yn L5, L2
..
我想在此数据集上训练KNeighborsClassifier。似乎sklearn没有采用多标签。我一直在尝试这个:
mlb = MultiLabelBinarizer()
Y = mlb.fit_transform(Y)
# parameters: n_neighbors=[5,15], weights = 'uniform', 'distance'
bagging = BaggingClassifier(KNeighborsClassifier(n_neighbors =5,weights ='uniform'), max_samples = 0.6, max_features= 0.7, verbose =1, oob_score =True)
scores = cross_val_score(bagging, X, Y, verbose =1, cv=3, n_jobs=3, scoring='f1_macro')
它给了我ValueError: bad input shape
有没有办法在sklearn中运行multilabel分类器?
答案 0 :(得分:2)
由于您的标签有二进制矩阵,因此您可以使用OneVsRestClassifier
来进行BaggingClassifier
处理多标签预测。代码现在应该如下所示:
bagging = BaggingClassifier(KNeighborsClassifier(n_neighbors=5, weights='uniform'), max_samples=0.6, max_features=0.7, verbose=1, oob_score=True)
clf = OneVsRestClassifier(bagging)
scores = cross_val_score(clf, X, Y, verbose=1, cv=3, n_jobs=3, scoring='f1_macro')
您可以将OneVsRestClassifier
与任何sklearn模型一起使用来进行多标记分类。
以下是解释:
http://scikit-learn.org/stable/modules/multiclass.html#one-vs-the-rest
以下是文档:
http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html
答案 1 :(得分:1)
根据sklearn documentation,支持多输出多类分类任务的分类器是:
决策树,随机森林,最近邻居