Смешайте простоту линейной модели с мощью K-ближайших соседей

Регрессия

Регрессия — это очень простой алгоритм. Быстрый поиск здесь, на Medium, и вы найдете сотни постов о линейной регрессии.

Поэтому я не буду тратить много времени на его определение. Я просто скажу, что

Линейная регрессия — это инструмент статистического моделирования, который помогает нам прогнозировать значения на основе линейной зависимости между независимыми переменными и переменными отклика.

K-ближайшие соседи

Алгоритм K-ближайших соседей — или просто KNN — работает, получая заданную точку и оценивая ее «k» соседей, чтобы найти сходство. Его можно использовать для классификации или регрессии.

Идея строится на том, что сходные точки данных будут ближе в пространстве, чем точки, сильно отличающиеся друг от друга. Итак, если вы посмотрите на картинку ниже, это имеет смысл. Давайте выберем точку X и посмотрим на ее 5 ближайших соседей, тогда я смогу лучше определить, что это за точка.

Обратите внимание, что 4 из этих ближайших точек — треугольники, и только одна — квадрат. «Скопление» кругов слишком далеко, чтобы их можно было рассматривать. Итак, мы можем сделать вывод, что точка X является треугольником, согласно логике KNN.

KNN-регрессия

Логика регрессии KNN очень похожа на то, что было объяснено выше на рисунке. Разница лишь в том, что он работает с числами. Итак, что будет делать алгоритм KNeighborsRegressor() из библиотеки sklearn, так это вычислить регрессию для набора данных, а затем взять параметр n_neighbors с выбранным числом, проверить результаты этих соседей и усреднить результаты, дав вам оценочный результат.

В документации сказано, что это причудливо. Смотреть:

Цель прогнозируется путем локальной интерполяции целей, связанных с ближайшими соседями в обучающем наборе.

Пример кода

Вот код модели, использующей регрессор KNN.

В этом упражнении используется набор данных Diamonds от Seaborn с лицензией Creative Commons. Я смоделирую карат бриллианта на основе его огранки.

Во-первых, давайте создадим парный график, чтобы проверить лучшие линейные отношения.

Из этого графика видно, что хорошими переменными являются x, y и z, поскольку их диаграммы рассеяния показывают, что здесь возможна линейная регрессия.

Поэтому я их изолировал.

X = df[['x', 'y', 'z']]
y = df.carat
# Train test split 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2, random_state=12)

Затем я проверил пропущенные значения. Не было ни одного.

Я перешел к удалению выбросов.

Мы видим, что набор данных без выбросов показывает слегка экспоненциальную кривую. Поэтому я также попробовал преобразование журнала, чтобы увидеть лучшее соотношение лайнеров.

Следующим шагом было моделирование данных.

Я создал 3 разные модели. Линейная регрессия без логарифмического преобразования. Линейная регрессия с логарифмическим преобразованием и регрессией KNN.

Вот результаты.

Результат был довольно хорошим для KNN. У него была пара завышенных значений на правом конце, но приемлемых. Хорошо то, что мне даже не потребовалось преобразование переменных, чтобы дать мне такое хорошее улучшение (почти 5% по сравнению со стандартным LR). Итак, вы видите, насколько интересным может быть среднее значение KNN для линейной регрессии? Звучит как простая версия «модели мешков для регрессии».

Для логарифмически преобразованного LR произошло обратное, когда он показал самые большие ошибки на левом конце.

Перед тем, как ты уйдешь

Я рекомендую вам взглянуть на регрессию KNN и посмотреть, где она подходит для ваших проектов.

Это еще один вид регрессии, который вы можете добавить в свой набор инструментов, чтобы иметь возможность создавать более мощные и точные модели, не обязательно делая их более сложными, чем они должны быть.

Наука о данных — это не о сложных вещах, а о возможности решить проблему.

Полный код:

Если вы хотите подписаться на Medium, вот реферальный код.

Кроме того, вот мой блог для большего количества контента.



Код Git Hub: полный код можно найти здесь.

Рекомендации