Прогноз Knn на 100% на y_test - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь внедрить 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% правильными, должно быть что-то не так

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Я нашел ответ с объяснением навыков мугглера (пользователь):

Вы используете набор данных радужной оболочки. Это хорошо моется и модель набор данных. Особенности имеют сильную корреляцию с результатом, который В результате модель КНН очень хорошо соответствует данным. Чтобы проверить это Вы можете уменьшить размер тренировочного набора, и это приведет к падение точности.

Модель прогноза верна.

0 голосов
/ 30 мая 2019

Попробуйте составить путаницу. Протестируйте каждый пример ваших тестовых данных и проверьте показатели специфичности, чувствительности, точности и точности. confusion matrix

где:

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

...