我使用了来自Kaggle的关于心血管疾病的数据集 数据集。模型已经训练完成,我希望动态地为一个输入(一行13个值)打上标签。
数据集的形状为13个特征加上1个目标,共66,000行
#准备训练和测试数据集dfCardio = load_csv("cleanCardio.csv")y = dfCardio['cardio']x = dfCardio.drop('cardio',axis = 1, inplace=False)model = knn = KNeighborsClassifier()x_train,x_test, y_train, y_test = train_test_split(x,y,test_size=0.2,random_state=42)model.fit(x_train, y_train)# 对测试数据进行预测y_pred = model.predict(x_test)predictions = [round(value) for value in y_pred]# 评估预测结果accuracy = accuracy_score(y_test, predictions)print("Accuracy: %.2f%%" % (accuracy * 100.0))
机器学习模型已经训练完成,我希望预测这一单行数据的标签:
['69','1','151','22','37','0','65','140','90','2','1','0','0','1']
返回目标值0或1。因此我编写了以下代码:
import numpy as npimport pandas as pdsingle = np.array(['69','1','151','22','37','0','65','140','90','2','1','0','0','1'])singledf = pd.DataFrame(single)final=singledf.transpose()prediction = model.predict(final)print(prediction)
但它返回错误:查询数据维度必须与训练数据维度匹配
如何修正对单行的标记?我为何无法预测单个案例?
回答:
您的数据集中每个实例有13个特征和1个标签。
x = dfCardio.drop('cardio',axis = 1, inplace=False)
代码中的这一行移除了我认为是标签列的数据,仅保留了(13个)特征列。
您尝试预测的特征向量长度为14个元素。您只能在13个元素长的特征向量上进行预测,因为这是模型训练时使用的长度。