Я пытаюсь внедрить K-ближайших соседей в наборе данных Iris, но после выполнения прогнозов yhat работает на 100% без ошибок, должно быть что-то не так, и я понятия не имею, что это такое ...
Я создал столбец с именем class_id, где я изменил:
- сетоса = 1,0
- версиколор = 2,0
- virginica = 3,0
этот столбец имеет тип float.
Получение X и Y
x = df[['sepal length', 'sepal width', 'petal length', 'petal width']].values
тип (x) показывает nparray
y = df['class_id'].values
type (y) показывает nparray
Нормализующие данные
x = preprocessing.StandardScaler().fit(x).transform(x.astype(float))
Создание поезда и испытания
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = 0.2, random_state = 42)
Проверка наилучшего значения K:
Ks = 12
for i in range(1,Ks):
k = i
neigh = KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train)
yhat = neigh.predict(x_test)
score = metrics.accuracy_score(y_test,yhat)
print('K: ', k, ' score: ', score, '\n')
Результат:
К: 1 оценка: 0,9666666666666667
К: 2, оценка: 1,0
К: 3, оценка: 1,0
К: 4 балла: 1,0
K: 5 баллов: 1,0
К: 6 баллов: 1,0
К: 7 баллов: 1,0
K: 8 баллов: 1,0
К: 9 баллов: 1,0
K: 10 баллов: 1,0
K: 11 баллов: 1,0
Печать y_test и yhat С K = 5
print(yhat)
print(y_test)
Результат:
yhat: [2. 1. 3. 2. 2. 1. 2. 3. 2. 2. 3. 1. 1. 1. 1. 2. 3. 2. 2. 3. 1. 3. 1. 3.
3. 3. 3. 3. 1. 1.]
y_test: [2. 1. 3. 2. 2. 1. 2. 3. 2. 2. 3. 1. 1. 1. 1. 2. 3. 2. 2. 3. 1. 3. 1. 3.
3. 3. 3. 3. 1. 1.]
все они не должны быть на 100% правильными, должно быть что-то не так