Как кодировать данные из другого (тестового) файла по сравнению со всеми данными в одном файле?

Все примеры, с которыми я когда-либо сталкивался, всегда удобно содержат данные в одном файле, чтобы показать, как работает train_test_split (или любая модель). Но довольно часто данные обучения и данные тестирования представляют собой два отдельных файла. Итак, я сделал ультра-базовый файл поезда логистической регрессии и тестовый файл, состоящий из двух столбцов: «возраст», «страховка». И назовите df_train df, df_test.

Я понимаю, что df_test не был обучен, отсюда и ошибка, но... не в этом ли дело? Я знаю, что model.predict(X_test) не выдает ошибку, но это основано на обучающих данных, а не на тестовых данных.

Слово предупреждения, это то, что происходит, когда вы стары и пытаетесь узнать что-то новое. Не стареть.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df[['age']],df.insurance,test_size=0.1)
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
model.predict(df_test)

Спасибо,

Старый пердун


person smr    schedule 24.09.2019    source источник


Ответы (1)


Как вы заявили:

тренировочный файл и тестовый файл, состоящий из двух столбцов: «возраст», «страховка».

Таким образом, если тестовые файлы содержат столбцы возраста и страховки и используются как есть, функция прогнозирования не будет работать из-за несоответствия входных данных между обучением и прогнозированием. Также model.predict ожидает только независимую переменную (в вашем случае ее возраст) в следующем формате:

предсказать(я, X)[источник]¶

Predict class labels for samples in X.
Parameters: 

X : array_like or sparse matrix, shape (n_samples, n_features)

    Samples.

Теперь о модификации:

model.predict(df_test["age"].values)

Изменить: попробуйте следующее:

from sklearn.model_selection import train_test_split
X = df["age"].values
y = df["insurance"].values
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.1)
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
model.predict([list(df_test["age"].values)])
person abheet22    schedule 24.09.2019
comment
Попробовал ваше предложение и получил: ожидаемый массив 2D, вместо этого получил массив 1D. Итак, я попытался решить эту проблему с помощью x_train= x_train.reshape(-1, 1) y_train= y_train.reshape(-1, 1) x_test = x_test.reshape(-1, 1). Что дало еще одну ошибку. ''Объект DataFrame' не имеет атрибута 'изменить форму' - person smr; 25.09.2019
comment
Отредактировали сообщение, просто попробуйте отредактированную версию, и вы получите результат. - person abheet22; 25.09.2019
comment
К сожалению нет. Все еще получаю ошибку, Expected 2D array, got 1D array instead. И эта ошибка возникает даже ПОСЛЕ того, как я ввожу то, что должно было ее исправить, X_train= X_train.reshape(-1, 1) y_train= y_train.reshape(-1, 1) X_test = X_test.reshape(-1, 1). Я поместил этот кусок перед model.fit, и он по-прежнему говорит, что это одномерный массив. - person smr; 27.09.2019
comment
Ошибка: X имеет 20 признаков на выборку; ожидание 1. Я ценю вашу настойчивость. Я продолжаю думать, что это не должно быть так сложно. может быть, мой простой пример слишком прост? то есть может ли он использовать дополнительный столбец функций? - person smr; 29.09.2019
comment
Да, при прогнозировании можно использовать дополнительный столбец «Функции». - person abheet22; 29.09.2019