Sklearn данные обучения и тестовые данные не одного размера - PullRequest
1 голос
/ 02 марта 2020

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

Сначала я выбрал функции для моей оси X и y.

#Predict the average parking rates per month
X = df[['Number of weekly riders', 'Price per week',
       'Population of city', 'Monthly income of riders']]

y = df['Average parking rates per month']

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

 #only 20% test size because we are working with a small dataset 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)

lm = LinearRegression()

lm.fit(X_train, y_train)


после того, как я установил модель, я пытаюсь использовать некоторые функции ошибок из пакета metrics из sklearn

, но, очевидно, я не могу использовать ни одну из функций, потому что не существует одинакового количества данных испытаний и поездов

print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_train))  
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_train))  
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_train)))

ValueError: Found input variables with inconsistent numbers of samples: [6, 21]

действительно ли так, что вам нужен одинаковый размер данных поезда и испытаний для запуска функция ошибок?

Ответы [ 3 ]

2 голосов
/ 02 марта 2020

Когда вы используете разделение поезда / теста, вы хотите разделить данные обучения и теста:

enter image description here

Идея состоит в том, что вы тренируете свой алгоритм с вашими данными обучения, а затем проверить его с невидимыми данными. Таким образом, все метрики не имеют никакого смысла с y_train и y_test. Затем вы пытаетесь сравнить предсказание, и y_test работает так:

y_pred_test = lm.predict(X_test)
metrics.mean_absolute_error(y_test, y_pred_test)

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

y_pred_train = lm.predict(X_train)
metrics.mean_absolute_error(y_train, y_pred_train)
1 голос
/ 02 марта 2020

Вы хотите сравнить y_test и y_predict, что является выходом x_test через ваш регрессор.

0 голосов
/ 02 марта 2020

Следующее вызовет ошибку inconsistent numbers of samples.

metrics.mean_absolute_error(y_test, y_train)

Причина в том, что тренировочный набор и набор для тестирования имеют разное количество строк.

В редком случае поскольку в них одинаковое количество строк, приведенное выше утверждение по-прежнему не имеет смысла: сравнивать метки наборов тестов с метками обучающих наборов бесполезно.

Вместо этого вы должны получить прогнозы для функций тестирования ( X_test) путем ввода X_test в lm:

y_hat = lm.predict(X_test)  # y_hat: predictions

Тогда эти метрики будут иметь смысл:

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