Прогноз Knn на 100% на y_test
Я пытаюсь внедрить 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
тип (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
К: 5 оценка: 1,0
К: 6 оценка: 1,0
К: 7 счет: 1,0
К: 8 оценка: 1,0
К: 9 оценка: 1,0
К: 10 оценка: 1,0
К: 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.]
у_тест: [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% правильными, должно быть что-то не так
2 ответа
Я нашел ответ с объяснением навыка muggler(пользователь):
Вы используете набор данных радужной оболочки. Это хорошо очищенный и модельный набор данных. Характеристики имеют сильную корреляцию с результатом, что приводит к тому, что модель kNN действительно хорошо соответствует данным. Чтобы проверить это, вы можете уменьшить размер тренировочного набора, и это приведет к снижению точности.
Модель прогноза оказалась верной.
Попробуйте составить путаницу. Протестируйте каждый пример ваших тестовых данных и проверьте показатели специфичности, чувствительности, точности и точности.
где:
TN = True Negative
FN = False Negative
FP = False Positive
TP = True Positive
Здесь вы можете проверить разницу между специфичностью и чувствительностью. https://dzone.com/articles/ml-metrics-sensitivity-vs-specificity-difference
Здесь у вас есть один пример того, как вы можете получить одну запутанную матрицу в python, используя sklearn.
Также попробуйте сделать кривую ROC (необязательно) https://en.wikipedia.org/wiki/Receiver_operating_characteristic