2015-08-17 3 views
0

У меня есть набор данных с функциями и их ярлыками.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

Есть ли способ, что я могу запустить MultiLabel классификатор sklearn?

+1

'KNeighborsClassifier' делает принимать мульти-этикетки, а не' BaggingClassifier' не делает. https://github.com/scikit-learn/scikit-learn/issues/4758 – yangjie

ответ

1

Согласно sklearn documentation классификаторы, которые поддерживают multioutput-MultiClass задачи классификации являются:

Decision Trees, Случайные леса, близкие соседи

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 сделать MultiLabel классификации.

Вот объяснение:

http://scikit-learn.org/stable/modules/multiclass.html#one-vs-the-rest

А вот документы:

http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html