scikit multilearn: precision_score ValueError: multilass-multioutput не поддерживается - PullRequest
0 голосов
/ 21 февраля 2020

Я хочу предсказать выборки, которые могут быть в более чем 1 метке за раз (классификация мульти меток) Поэтому я использую библиотеку scikit-multilearn , успешно установил классификатор и даже могу прогнозировать тестовые данные. Это просто не в состоянии вывести точность классификатора.

Мои данные (до 1100 строк):

enter image description here

Зависимые переменные (предсказания, которые я предсказываю) - это последние 4: N / xN, пол, зрелость и CType . Остальные - независимые переменные.

Точность, о которой я говорю, заключается в том, насколько близок классификатор к предсказанию всех меток.

Вот код:

import numpy as np
import pandas as pd
from scipy import sparse
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from skmultilearn.problem_transform import BinaryRelevance

# Prepare data
df = pd.read_csv("Data_Numeric.csv")
# remove crab_id for now
del df['Crab_id']

# independent vars: the rest
# dependent vars: N/xN, Gender, Maturity, CType
# n_samples = 1100
# n_features = 6
# n_labels = 4
X = df.iloc[:, :6].values
y = df.iloc[:, 6:df.shape[1]].astype(np.int64).values

X = sparse.csr_matrix(X)
y = sparse.csr_matrix(y, dtype=np.int64)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# generate model
classifier = BinaryRelevance(SVC())

# train
classifier.fit(X_train, y_train)

# predict
y_pred = classifier.predict(X_test)
y_pred_array = y_pred.toarray()

# my_data = X_test[0:4, :]
# my_data[0] = [64.7, 46, 12, 13, 0, 0]
# my_data_prediction = classifier.predict(my_data).toarray()
# my_data_true = y_test[0:4, :].toarray()

# error here
score = accuracy_score(y_test.toarray(), y_pred.toarray())

Ошибка:

Traceback (most recent call last):
  File "<input>", line 42, in <module>
  File "/home/f4ww4z/anaconda3/envs/ayah/lib/python3.7/site-packages/sklearn/metrics/_classification.py", line 185, in accuracy_score
    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
  File "/home/f4ww4z/anaconda3/envs/ayah/lib/python3.7/site-packages/sklearn/metrics/_classification.py", line 97, in _check_targets
    raise ValueError("{0} is not supported".format(y_type))
ValueError: multiclass-multioutput is not supported

y_test

>>> y_test
<330x4 sparse matrix of type '<class 'numpy.longlong'>'
    with 578 stored elements in Compressed Sparse Row format>

y_test.toarray(), форма 330x4:

y_test

y_pred

>>> y_pred
<330x4 sparse matrix of type '<class 'numpy.longlong'>'
    with 408 stored elements in Compressed Sparse Column format>

y_pred.toarray():

y_pred

Как правильно увидеть точность классификатора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...