2

Я пытаюсь найти оценку данного набора данных в отношении некоторых данных обучения. Я написал следующий код:Метод оценки RandomForest ValueError

from sklearn.ensemble import RandomForestClassifier 
import numpy as np 

randomForest = RandomForestClassifier(n_estimators = 200) 

li_train1 = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]] 

li_train2 = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]] 

li_text1 = [[10,20,30,40,50,60,70,80,90], [10,20,30,40,50,60,70,80,90]] 

li_text2 = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]] 

randomForest.fit(li_train1, li_train2) 

output = randomForest.score(li_train1, li_text1) 

На компиляции и пытается запустить программу я получаю ошибку:

Traceback (most recent call last): 
    File "trial.py", line 16, in <module> 
    output = randomForest.score(li_train1, li_text1) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/base.py", line 349, in score 
    return accuracy_score(y, self.predict(X), sample_weight=sample_weight) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py", line 172, in accuracy_score 
    y_type, y_true, y_pred = _check_targets(y_true, y_pred) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py", line 89, in _check_targets 
    raise ValueError("{0} is not supported".format(y_type)) 
ValueError: multiclass-multioutput is not supported 

При проверке документации, связанной с методом бальной он говорит:

score(X, y, sample_weight=None) 
X : array-like, shape = (n_samples, n_features) 
    Test samples. 

y : array-like, shape = (n_samples) or (n_samples, n_outputs) 
    True labels for X. 

И X и y в моем случае являются массивами, 2d массивами.

Я также рассмотрел вопрос this, но я не мог понять, где я иду не так.

EDIT

Так, согласно ответу, и замечания, которые следуют, я редактировал программу следующим образом:

from sklearn.ensemble import RandomForestClassifier 
from sklearn.preprocessing import MultiLabelBinarizer 
import numpy as np 

randomForest = RandomForestClassifier(n_estimators = 200) 

mlb = MultiLabelBinarizer() 

li_train1 = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]] 

li_train2 = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]] 

li_text1 = [100,200] 

li_text2 = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]] 

randomForest.fit(li_train1, li_train2) 

output = randomForest.score(li_train1, li_text1) 

После редактирования я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "trial.py", line 19, in <module> 
    output = randomForest.score(li_train1, li_text1) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/base.py", line 349, in score 
    return accuracy_score(y, self.predict(X), sample_weight=sample_weight) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py", line 172, in accuracy_score 
    y_type, y_true, y_pred = _check_targets(y_true, y_pred) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py", line 82, in _check_targets 
    "".format(type_true, type_pred)) 
ValueError: Can't handle mix of binary and multiclass-multioutput 

ответ

0

В соответствии с documentation:

Warning: At present, no metric in sklearn.metrics supports the multioutput-multiclass classification task.

Метод оценки вызывает метрику точности sklearn, но это не поддерживается для многоуровневой задачи классификации с несколькими выходами, которую вы определили.

Непонятно из вашего вопроса, если вы действительно намереваетесь решить проблему с несколькими классами с несколькими выходами. Если это не ваше намерение, вы должны реструктурировать свои входные массивы.

Если, с другой стороны, вы действительно хотите решить эту проблему, вам просто нужно определить свою собственную функцию подсчета очков.

UPDATE

Поскольку вы не решения нескольких классов, проблема с несколькими этикетки, вы должны перестроить свои данные таким образом, что это выглядит примерно так:

from sklearn.ensemble import RandomForestClassifier 

# training data 
X = [ 
    [1,2,3,4,5,6,7,8,9], 
    [1,2,3,4,5,6,7,8,9] 
] 

y = [0,1] 

# fit the model 
randomForest.fit(X,y) 

# test data 
Xtest = [ 
    [1,2,0,4,5,6,0,8,9], 
    [1,1,3,1,5,0,7,8,9] 
] 

ytest = [0,1] 

output = randomForest.score(Xtest,ytest) 
print(output) # 0.5 
+0

'реструктурировать свой входной arrays' : Как вы имеете в виду, должен ли я создавать одномерные массивы? –

+0

Вы пытаетесь решить многоклассовую многоквартирную проблему? –

+0

Нет, я еще не знаю, я просто пробовал, но теперь давайте предположим, что мне не нужно решать проблему с несколькими ярлыками нескольких классов. –

Смежные вопросы