Прогноз 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

Другие вопросы по тегам