我有一个数据集,它根据指标显示一个人是否患有糖尿病,看起来像这样(原始数据集):
我创建了一个简单的模型以预测最后一列(结果)。
#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.
我的问题是:
预测行:
请让我知道我的问题是否清楚!
答案 0 :(得分:0)
您正在将data
(具有全部9个初始功能)馈送到使用X
进行训练的模型(8个功能,因为Outcome
已被删除以创建y
),因此出现错误。
您需要做的是:
X
而不是data
来获取预测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