Получение ошибки типа: неоднозначна разреженная длина матрицы; используйте getnnz() или shape[0] при выполнении многоклассовой классификации

#pandas #machine-learning #scikit-learn #typeerror #multiclass-classification

#pandas #машинное обучение #scikit-learn #ошибка типа #мультикласс-классификация

Вопрос:

 from sklearn.naive_bayes import CategoricalNB
from sklearn.datasets import make_multilabel_classification
X, y = make_multilabel_classification(sparse = True, n_labels = 15,
return_indicator = 'sparse', allow_unlabeled = False)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)
  

Я пытался использовать X.todense (), но ошибка по-прежнему возникает.

 X_train = X_train.todense()
X_test = X_test.todense()
  

Обучение набору данных

 from skmultilearn.adapt import MLkNN
from sklearn.metrics import accuracy_score
classifier = MLkNN(k=20)
classifier.fit(X_train, y_train)
  

прогнозирование выходных данных обученного набора данных.

 y_pred = classifier.predict(X_test)
accuracy_score(y_test,y_pred)
np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1)
  

Ответ №1:

Вы пытаетесь получить длину из матрицы, которая неоднозначна:

 len(y_pred)
  

Ваша матрица y_pred имеет размерность (25,5), как показано на y_pred.shape .

Таким образом, вместо len(y_pred) вы могли бы использовать y_pred.shape[0] , который вернул бы 25.

Но тогда вы столкнетесь с проблемой при использовании y_pred.reshape(y_pred.shape[0],1)

Ошибка значения: не удается преобразовать массив размером 125 в форму (25, 1)

(ранее: y_pred.reshape(len(y_pred),1) )

Эта ошибка имеет смысл, потому что вы пытаетесь преобразовать матрицу со 125 значениями в матрицу всего с 25 значениями. Здесь вам нужно переосмыслить свой код.