如何对空行进行机器学习预测?

时间:2020-06-18 02:05:40

标签: python machine-learning scikit-learn prediction

我有一个数据集,它根据指标显示一个人是否患有糖尿病,看起来像这样(原始数据集):

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 :(得分:0)

您正在将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_newX具有相同的功能(即再次像您对Outcome所做的那样删除X列):

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