2016-02-07 3 views
0

Здесь представлены файлы данных here и here. Вы можете скачать его, нажав ссылку на ссылку. Я использую Pandas, Numpy и Python3.ValueError: найденные массивы с непоследовательным числом выборок [1,299]

Вот мой код:

import pandas as pa 
import numpy as nu 
from sklearn.linear_model import Perceptron 
from sklearn.metrics import accuracy_score 
from sklearn.preprocessing import StandardScaler 

def get_accuracy(X_train, y_train, X_test, y_test): 
    perceptron = Perceptron() 
    perceptron.fit(X_train, y_train) 
    perceptron.transform(X_train) 
    prediction = perceptron.predict(X_test) 
    result = accuracy_score(y_test, prediction) 
    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"] 

scaler = StandardScaler() 
scaler.fit_transform(train_data[train_data.columns[1:]]).reshape(-1,1) 
X_train = scaler.transform(train_data[train_data.columns[1:]]) 

scaler.fit_transform(train_data[train_data.columns[0]]) 
y_train = scaler.transform(train_data[train_data.columns[0]]) 

scaler.fit_transform(test_data[test_data.columns[1:]]) 
X_test = scaler.transform(test_data[test_data.columns[1:]]) 

scaler.fit_transform(test_data[test_data.columns[0]]) 
y_test = scaler.transform(test_data[test_data.columns[0]]) 




scaled_accuracy = get_accuracy(nu.ravel(X_train), nu.ravel(y_train), nu.ravel(X_test), nu.ravel(y_test)) 
print(scaled_accuracy) 

А вот ошибка, я получаю:

Traceback (most recent call last): 
    File "C:/Users/Roman/PycharmProjects/data_project-1/lecture_2_perceptron.py", line 33, in <module> 
    scaled_accuracy = get_accuracy(nu.ravel(X_train), nu.ravel(y_train), nu.ravel(X_test), nu.ravel(y_test)) 
    File "C:/Users/Roman/PycharmProjects/data_project-1/lecture_2_perceptron.py", line 9, in get_accuracy 
    perceptron.fit(X_train, y_train) 
    File "C:\Users\Roman\AppData\Roaming\Python\Python35\site-packages\sklearn\linear_model\stochastic_gradient.py", line 545, in fit 
    sample_weight=sample_weight) 
    File "C:\Users\Roman\AppData\Roaming\Python\Python35\site-packages\sklearn\linear_model\stochastic_gradient.py", line 389, in _fit 
    X, y = check_X_y(X, y, 'csr', dtype=np.float64, order="C") 
    File "C:\Users\Roman\AppData\Roaming\Python\Python35\site-packages\sklearn\utils\validation.py", line 520, in check_X_y 
    check_consistent_length(X, y) 
    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: [ 1 299]** 

Без масштабирования данных все работает нормально. Но после масштабирования нет.

+0

Не могли бы вы поделиться содержимым своих файлов CSV? Я имею в виду, если нет данных, нет никакого способа, чтобы результат мог быть реплицирован, вы видите! – Pouria

+0

Вызов 'fit_transform' возвращает масштабированные данные; попробуйте установить ваши 'fit_transforms' равными вашим объектам обучения и тестирования X и y. – Ryan

+0

Возможный дубликат [ValueError: найденные массивы с непоследовательным числом выборок] (https://stackoverflow.com/questions/35247687/valueerror-found-arrays- с-противоречивыми числами, из-образцов) –

ответ

0

Вы не должны звонить fit_transform каждый раз, когда вы используете скалер. Вы должны указать fit один раз, на данные обучения, а затем только transform, иначе вы получите другое представление для обучения и тестирования (приводя к предоставленной ошибке). Также нет смысла масштабировать метки.

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

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