sklearn-KNearestNeighbors with Multilabels



我有一个包含特征及其标签的数据集。

它看起来像这样:

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?

根据sklearn文档,支持多输出多类分类任务的分类器是:

决策树,随机森林,最近邻

既然你有一个二元矩阵的标签,你可以使用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

对于寻找多标签KNN (MLKNN)选项的任何人,我建议使用skmultilearn,它构建在sklearn之上,如果您熟悉后一个包,那么它很容易使用。

文档。这个例子来自文档:

from skmultilearn.adapt import MLkNN
classifier = MLkNN(k=3)
# train
classifier.fit(X_train, y_train)
# predict
predictions = classifier.predict(X_test)

相关内容

  • 没有找到相关文章

最新更新