Значение K против точности в KNN

Я пытаюсь изучить KNN, работая над набором данных по раку молочной железы, предоставленным репозиторием UCI. Общий размер набора данных составляет 699 с 9 непрерывными переменными и 1 переменной класса.

Я проверил свою точность на наборе перекрестной проверки. Для К = 21 и К = 19. Точность составляет 95,7%.

from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=21)
neigh.fit(X_train, y_train) 
y_pred_val = neigh.predict(X_val)
print accuracy_score(y_val, y_pred_val)

Но для K = 1 я получаю Точность = 97,85% K = 3, Точность = 97,14

Я читаю

Выбор k очень важен. Небольшое значение k означает, что шум будет иметь большее влияние на результат. Большое значение делает его дорогостоящим в вычислительном отношении и в некотором роде противоречит основной философии KNN (то, что точки, которые находятся рядом, могут иметь аналогичные плотности или классы). Простой подход к выбору k заключается в том, что k = n ^ (1/2). здесь

Какое значение K следует учитывать для моей модели. Можете ли вы, ребята, объяснить логику, стоящую за этим?

Заранее спасибо!


person Rahul Saxena    schedule 22.12.2016    source источник
comment
Точность сама по себе не является достаточным критерием. Вы также должны учитывать отзыв.   -  person Yves Daoust    schedule 22.12.2016
comment
Привет @YvesDaoust, спасибо за предложение. Рассчитаю Precision- напомню и обновлю пост.   -  person Rahul Saxena    schedule 22.12.2016
comment
Голосование за закрытие. Этот вопрос не относится к теме Stack Overflow (он не касается программирования) и должен быть перемещен в раздел Cross Validated. . Или, что более вероятно, его уже задавали в резюме, и вам следует выполнить поиск, прежде чем публиковать новый вопрос.   -  person juanpa.arrivillaga    schedule 22.12.2016
comment
Но если быть кратким: правильного ответа нет, то есть во всех случаях, кроме самых простых, вы не будете знать заранее, какие значения K дадут вам лучшую производительность (конечно, более высокое K всегда ухудшит вычислительную производительность). .   -  person juanpa.arrivillaga    schedule 22.12.2016
comment
Привет @juanpa.arrivillaga, я изучал эту тему, но все еще не ясно. Я думаю, что stackoverflow предназначен для помощи программистам.   -  person Rahul Saxena    schedule 22.12.2016
comment
@RahulSaxena Да, это не простая тема с аккуратными ответами. И да, Stack Overflow предназначен для вопросов по программированию. Ваш вопрос не имеет ничего общего с программированием и связан исключительно со статистикой/машинным обучением. Он лучше подходит для ссылок Stack Exchange, специфичных для этих тем.   -  person juanpa.arrivillaga    schedule 22.12.2016