Теория K-ближайших соседей и реализация с помощью Scikit-Learn
- Ссылка на данные, использованные в этом уроке: Данные колледжа
- Ссылка на Полный блокнот
В статистике k-алгоритм ближайшего соседа (k-NN) является непараметрическим Метод классификации, впервые разработанный Эвелин Фикс и Джозефом Ходжесом в 1951 году и позже расширенный Томасом Кавером. Используется для классификации и регрессии. В обоих случаях вход состоит из k ближайших обучающих примеров в наборе данных. Результат зависит от того, используется ли k-NN для классификации или регрессии:
- В классификации k-NN результатом является принадлежность к классу. Объект классифицируется по множеству голосов его соседей, при этом объект присваивается классу, наиболее распространенному среди его k ближайших соседей (k — положительное целое число, обычно небольшой). Если k = 1, то объект просто присваивается классу этого единственного ближайшего соседа.
- В регрессии k-NN результатом является значение свойства объекта. Это значение является средним значением k ближайших соседей.
Недостатки
- Неэффективен для больших данных
- Проклятие размерности.
- Очень подвержен переоснащению
Шаги:
- Выберите количество k
- Выберите показатель расстояния
- Найдите k ближайших соседей выборки
- Назначить метку класса большинством голосов
Делаем прогнозы с KNN
KNN делает прогнозы, используя набор обучающих данных напрямую. Прогнозы делаются для нового экземпляра (x) путем поиска во всей обучающей выборке K наиболее похожих экземпляров. экземпляров (соседей) и суммирования выходной переменной для этих K экземпляров.
Чтобы определить, какие из экземпляров K в обучающем наборе данных наиболее похожи на новые входные данные, используется мера расстояния.
Лучшая подготовка данных для KNN
- Изменение масштаба данных. KNN работает намного лучше, если все данные имеют одинаковый масштаб. Нормализация ваших данных в диапазоне [0, 1] — хорошая идея. Также может быть хорошей идеей стандартизировать ваши данные, если они имеют распределение Гаусса.
- Адрес отсутствующих данных. Отсутствующие данные означают, что расстояние между образцами не может быть рассчитано. Эти выборки могут быть исключены, или отсутствующие значения могут быть вменены.
- Меньшая размерность. KNN подходит для данных меньшего размера. Вы можете попробовать его на многомерных данных (сотни или тысячи входных переменных), но имейте в виду, что он может работать не так хорошо, как другие методы. KNN может извлечь выгоду из выбора признаков, который уменьшает размерность входного пространства признаков.
Получить данные
Исследовательский анализ данных (EDA)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 777 entries, 0 to 776 Data columns (total 18 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 private 777 non-null object 1 apps 777 non-null int64 2 accept 777 non-null int64 3 enroll 777 non-null int64 4 top10perc 777 non-null int64 5 top25perc 777 non-null int64 6 f_undergrad 777 non-null int64 7 p_undergrad 777 non-null int64 8 outstate 777 non-null int64 9 room_board 777 non-null int64 10 books 777 non-null int64 11 personal 777 non-null int64 12 phd 777 non-null int64 13 terminal 777 non-null int64 14 s_f_ratio 777 non-null float64 15 perc_alumni 777 non-null int64 16 expend 777 non-null int64 17 grad_rate 777 non-null int64 dtypes: float64(1), int64(16), object(1) memory usage: 109.4+ KB
private 0 apps 0 accept 0 enroll 0 top10perc 0 top25perc 0 f_undergrad 0 p_undergrad 0 outstate 0 room_board 0 books 0 personal 0 phd 0 terminal 0 s_f_ratio 0 perc_alumni 0 expend 0 grad_rate 0 dtype: int64
Обратите внимание, что есть частная школа с процентом выпускников выше 100%. Как называется эта школа?
Установите процент выпускников этой школы на 100, чтобы это имело смысл. Вы можете получить предупреждение, а не ошибку) при выполнении этой операции, поэтому используйте операции DataFrame или просто повторите визуализацию гистограммы, чтобы убедиться, что она прошла.
Сплит-тест поезда
Yes 565 No 212 Name: private, dtype: int64
Стандартизируйте переменные
Прогнозы и оценки
Давайте оценим нашу модель KNN!
TRAINIG RESULTS: =============================== CONFUSION MATRIX: [[148 0] [ 19 376]] ACCURACY SCORE: 0.9650 CLASSIFICATION REPORT: No Yes accuracy macro avg weighted avg precision 0.8862 1.0 0.965 0.9431 0.969 recall 1.0 0.9519 0.965 0.9759 0.965 f1-score 0.9397 0.9754 0.965 0.9575 0.9656 support 148.0 395.0 0.965 543.0 543.0 TESTING RESULTS: =============================== CONFUSION MATRIX: [[ 55 9] [ 21 149]] ACCURACY SCORE: 0.8718 CLASSIFICATION REPORT: No Yes accuracy macro avg weighted avg precision 0.7237 0.943 0.8718 0.8334 0.883 recall 0.8594 0.8765 0.8718 0.8679 0.8718 f1-score 0.7857 0.9085 0.8718 0.8471 0.8749 support 64.0 170.0 0.8718 234.0 234.0
Выбор значения K
Давайте продолжим и используем метод локтя, чтобы выбрать хорошее значение K!
Создайте цикл for, который обучает различные модели KNN с разными значениями k, а затем отслеживайте error_rate для каждой из этих моделей с помощью списка.
Теперь создайте следующий график, используя информацию из цикла for.
Повторное обучение с новым значением K
Переобучите свою модель с лучшим значением K (вы сами решаете, что вам нужно) и повторно сделайте отчет о классификации и матрицу путаницы.
TRAINIG RESULTS: =============================== CONFUSION MATRIX: [[127 21] [ 8 387]] ACCURACY SCORE: 0.9466 CLASSIFICATION REPORT: No Yes accuracy macro avg weighted avg precision 0.9407 0.9485 0.9466 0.9446 0.9464 recall 0.8581 0.9797 0.9466 0.9189 0.9466 f1-score 0.8975 0.9639 0.9466 0.9307 0.9458 support 148.0 395.0 0.9466 543.0 543.0 TESTING RESULTS: =============================== CONFUSION MATRIX: [[ 54 10] [ 7 163]] ACCURACY SCORE: 0.9274 CLASSIFICATION REPORT: No Yes accuracy macro avg weighted avg precision 0.8852 0.9422 0.9274 0.9137 0.9266 recall 0.8438 0.9588 0.9274 0.9013 0.9274 f1-score 0.864 0.9504 0.9274 0.9072 0.9268 support 64.0 170.0 0.9274 234.0 234.0
Краткое содержание
В этом посте вы открыли для себя алгоритм машинного обучения KNN. Вы узнали, что:
- KNN хранит весь набор обучающих данных, который он использует в качестве своего представления.
- KNN не изучает никакую модель.
- KNN делает прогнозы вовремя, вычисляя сходство между входной выборкой и каждым обучающим экземпляром.
- Существует множество мер расстояния, из которых можно выбрать, чтобы они соответствовали структуре ваших входных данных.
- Что при использовании KNN рекомендуется изменить масштаб ваших данных, например, с помощью нормализации.
- Если у вас есть какие-либо вопросы об этом посте или алгоритме KNN, задавайте их в комментариях, и я сделаю все возможное, чтобы ответить.