2016-02-06 3 views
2

Вот мой код:ValueError: Найденные массивы с противоречивым числом образцов

import pandas as pa 
from sklearn.linear_model import Perceptron 
from sklearn.metrics import accuracy_score 

def get_accuracy(X_train, y_train, y_test): 
    perceptron = Perceptron(random_state=241) 
    perceptron.fit(X_train, y_train) 
    result = accuracy_score(y_train, y_test) 
    return result 

test_data = pa.read_csv("C:/Users/Roman/Downloads/perceptron-test.csv") 
test_data.columns = ["class", "f1", "f2"] 
train_data = pa.read_csv("C:/Users/Roman/Downloads/perceptron-train.csv") 
train_data.columns = ["class", "f1", "f2"] 

accuracy = get_accuracy(train_data[train_data.columns[1:]], train_data[train_data.columns[0]], test_data[test_data.columns[0]]) 
print(accuracy) 

Я не понимаю, почему я получаю эту ошибку:

Traceback (most recent call last): 
    File "C:/Users/Roman/PycharmProjects/data_project-1/lecture_2_perceptron.py", line 35, in <module> 
    accuracy = get_accuracy(train_data[train_data.columns[1:]], 
train_data[train_data.columns[0]], test_data[test_data.columns[0]]) 
    File "C:/Users/Roman/PycharmProjects/data_project-1/lecture_2_perceptron.py", line 22, in get_accuracy 
    result = accuracy_score(y_train, y_test) 
    File "C:\Users\Roman\AppData\Roaming\Python\Python35\site-packages\sklearn\metrics\classification.py", line 172, in accuracy_score 
    y_type, y_true, y_pred = _check_targets(y_true, y_pred) 
    File "C:\Users\Roman\AppData\Roaming\Python\Python35\site-packages\sklearn\metrics\classification.py", line 72, in _check_targets 
    check_consistent_length(y_true, y_pred) 
    File "C:\Users\Roman\AppData\Roaming\Python\Python35\site-packages\sklearn\utils\validation.py", line 176, in check_consistent_length 
    "%s" % str(uniques)) 
ValueError: Found arrays with inconsistent numbers of samples: [199 299] 

Я хочу, чтобы получить точность по методе accuracy_score получить этот тип ошибки. Я не могу найти ничего, что могло бы мне помочь. Кто может объяснить мне, что происходит?

ответ

1

sklearn.metrics.accuracy_score() принимает y_true и y_pred аргументы. То есть, для того же набора данных (предположительно, набора тестов), он хочет знать основную истину и значения, предсказанные вашей моделью. Это позволит оценить эффективность вашей модели по сравнению с гипотетической идеальной моделью.

В коде вы передаете истинные переменные результата для двух разных наборов данных. Эти результаты являются истиной и никоим образом не отражают способность вашей модели правильно классифицировать наблюдения!

Обновление get_accuracy() функции также принимать X_test в качестве параметра, я думаю, что это больше в соответствии с тем, что вы намеревались сделать:

def get_accuracy(X_train, y_train, X_test, y_test): 
    perceptron = Perceptron(random_state=241) 
    perceptron.fit(X_train, y_train) 
    pred_test = perceptron.predict(X_test) 
    result = accuracy_score(y_test, pred_test) 
    return result 
+0

Спасибо большое! Это помогает мне решить проблему. –

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

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