KNN - Прогноз одного случая в python - PullRequest
1 голос
/ 18 февраля 2020

Я использую набор данных из Kaggle - Сердечно-сосудистые заболевания Набор данных . Модель была обучена, и я хочу пометить один вход (строку из 13 значений), вставленный динамически c.

Форма набора данных - 13 объектов + 1 цель, 66 тыс. Строк

#prepare dataset for train and test
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)
# make predictions for test data
y_pred = model.predict(x_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

ML обучен, и я хочу предсказать метку этой единственной строки:

['69','1','151','22','37','0','65','140','90','2','1','0','0','1']

, чтобы вернуть 0 или 1 для цели. Поэтому я написал следующий код:

import numpy as np
import pandas as pd
single =  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)

, но он выдает ошибку: измерение данных запроса должно соответствовать измерению данных обучения

как я могу исправить маркировку для одной строки? почему я не могу предсказать ни одного случая?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Каждый экземпляр в вашем наборе данных имеет 13 объектов и 1 метку.

x = dfCardio.drop('cardio',axis = 1, inplace=False)

Эта строка в коде удаляет, как мне кажется, столбец меток из данных, оставляя только (13) столбцы объектов.

Вектор объектов, который вы пытаетесь предсказать, имеет длину 14 элементов. Вы можете прогнозировать только векторы признаков, длина которых составляет 13 элементов, потому что именно на этой модели обучалась модель.

0 голосов
/ 22 февраля 2020

если вы ищете реальное и быстрое решение, вы можете использовать это

import numpy as np
import pandas as pd
single =  np.array([['69','1','151','22','37','0','65','140','90','2','1','0','0']])
prediction = model.predict(single)
print(prediction)

...