Как делать прогнозы машинного обучения для пустых строк? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть набор данных, который показывает, есть ли у человека диабет на основе индикаторов, это выглядит так (исходный набор данных):

Original dataset

Я создал простую модель в чтобы предсказать последний столбец (Результат).

#Libraries imported
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

#Dataset imported
data = pd.read_csv('diabetes.csv')
#Assign X and y
X = data.iloc[:,:-1].values
y = data.iloc[:,-1].values

#Data preprocessed
sc = StandardScaler()
X = sc.fit_transform(X)

#Dataset split between train and test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

# Predicting the results for the whole dataset
y_pred2 = model.predict(data)

#Add prediction column to original dataset
data['prediction'] = y_pred2

Однако я получаю следующую ошибку: ValueError: X has 9 features per sample; expecting 8.

Мои вопросы:

  1. Почему не могу ли я создать новый столбец с прогнозами для всего моего набора данных?
  2. Как я могу делать прогнозы для пустых результатов (которые необходимо предсказать), то есть следует ли мне снова загрузить файл? Допустим, я хочу спрогнозировать следующее:

Строки для предсказания:
Rows to predict

Пожалуйста, дайте мне знать, если мои вопросы ясны!

1 Ответ

0 голосов
/ 18 июня 2020

Вы вводите data (со всеми 9 начальными функциями) в модель, которая была обучена с помощью X (8 функций, поскольку Outcome был удален для создания y), следовательно, возникает ошибка.

Что вам нужно сделать:

  1. Получить прогнозы, используя X вместо data
  2. Добавить прогнозы к исходному data установить

то есть:

y_pred2 = model.predict(X)
data['prediction'] = y_pred2

Имейте в виду, что это означает, что ваша переменная prediction будет получена из обоих данных, которые уже использовались для подгонки модели (т.е. часть X_train) а также из данных, которые модель не видит во время обучения (часть X_test). Не совсем уверен, какова ваша конечная цель (и вопрос не в этом), но это довольно необычная ситуация с точки зрения машинного обучения.

Если у вас есть новый набор данных data_new для предсказать результат, вы делаете это аналогично; всегда предполагая, что X_new имеет те же функции, что и X (т.е. снова удаляет столбец Outcome, как вы сделали с X):

y_new = model.predict(X_new)
data_new['prediction'] = y_new
...