Пошаговое руководство по K-Nearest Neighbours (KNN) и его реализации на Python
Алгоритм K-ближайших соседей
K-Nearest Neighbours (KNN) - это модель, которая классифицирует точки данных на основе точек, наиболее похожих на них. Он использует тестовые данные, чтобы сделать «обоснованное предположение» о том, как неклассифицированную точку следует отнести к категории ».
Реализация KNN Python
Мы будем строить нашу модель KNN, используя самый популярный пакет машинного обучения python scikit-learn. Scikit-learn предоставляет специалистам по данным различные инструменты для выполнения задач машинного обучения. Для нашей модели KNN мы собираемся использовать алгоритм ‘KNeighborsClassifier’, который легко доступен в пакете scikit-learn. Наконец, мы оценим наши прогнозы модели KNN с помощью функции «оценка точности» в scikit-learn. Давай сделаем это!
Шаг 1. Импорт необходимых пакетов
Все простые или сложные задачи программирования начинаются с импорта необходимых пакетов. Чтобы построить нашу модель KNN, наши основные пакеты включают scikit-learn для построения модели, pandas для исследовательского анализа данных (EDA) и seaborn для визуализаций.
Реализация Python:
Теперь, когда мы импортировали все необходимые пакеты для обучения и построения нашей модели KNN. Следующим шагом является импорт данных и выполнение исследовательского анализа данных.
Шаг 2: Импорт набора данных и EDA
В этой статье мы собираемся использовать набор данных iris, предоставленный пакетом seaborn. Давайте импортируем данные и посмотрим на них на Python.
Реализация Python:
Выход:
sepal_length sepal_width petal_length petal_width species 0 5.1 3.5 1.4 0.2 setosa 1 4.9 3.0 1.4 0.2 setosa 2 4.7 3.2 1.3 0.2 setosa 3 4.6 3.1 1.5 0.2 setosa 4 5.0 3.6 1.4 0.2 setosa .. ... ... ... ... ... 145 6.7 3.0 5.2 2.3 virginica 146 6.3 2.5 5.0 1.9 virginica 147 6.5 3.0 5.2 2.0 virginica 148 6.2 3.4 5.4 2.3 virginica 149 5.9 3.0 5.1 1.8 virginica [150 rows x 5 columns]
Теперь давайте посмотрим на статистическое представление данных с помощью функции ‘describe’, а также некоторую информацию о данных с помощью функции ‘info’ в Python.
Реализация Python:
Описание данных:
sepal_length sepal_width petal_length petal_width count 150.000000 150.000000 150.000000 150.000000 mean 5.843333 3.057333 3.758000 1.199333 std 0.828066 0.435866 1.765298 0.762238 min 4.300000 2.000000 1.000000 0.100000 25% 5.100000 2.800000 1.600000 0.300000 50% 5.800000 3.000000 4.350000 1.300000 75% 6.400000 3.300000 5.100000 1.800000 max 7.900000 4.400000 6.900000 2.500000
Информация о данных:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 150 entries, 0 to 149 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 sepal_length 150 non-null float64 1 sepal_width 150 non-null float64 2 petal_length 150 non-null float64 3 petal_width 150 non-null float64 4 species 150 non-null object dtypes: float64(4), object(1) memory usage: 6.0+ KB
Получив четкое представление о наших данных, мы можем перейти к их визуализации. Мы собираемся создать четыре разных визуализации, используя наши данные с помощью seaborn и matplotlib в python.
(i) Диаграмма рассеяния
Мы собираемся создать два разных графика рассеяния: один - длина чашелистика относительно его ширины, а другой - длина лепестка относительно ширины лепестка. Давайте сделаем это на питоне!
Реализация Sepal Scatter Python:
Выход:
Реализация Python с лепестковым разбросом:
Выход:
(ii) Тепловая карта
Тепловые карты очень полезны для поиска корреляций и отношений между переменными в данных. Тепловые карты можно эффективно создавать с помощью seaborn в python.
Реализация Python:
Выход:
(iii) Матрица рассеяния
Матрица разброса - это еще один способ эффективного поиска взаимосвязей или корреляций между переменными в наборе данных. Этот сюжет также можно сделать с помощью библиотеки seaborn на Python.
Реализация Python:
Выход:
(iv) График распределения
График распределения используется для визуализации частоты указанных значений в наборе данных. Это можно сделать на питоне, используя пакет seaborn. Учитывая наш набор данных по радужке, мы собираемся построить график длины и ширины чашелистиков и лепестков, чтобы наблюдать за их распределением. Давайте сделаем это на Python!
Реализация Python:
Выход:
С помощью этой визуализации мы переходим к следующей части кодирования, которая заключается в создании и обучении нашей модели K-Nearest Neighbor с использованием scikit-learn на python.
Шаг 3: Построение и обучение модели
Во-первых, нам нужно определить переменную «X» и переменную «Y», чтобы построить нашу модель KNN. Учитывая наш набор данных, нам нужно классифицировать переменную «виды», поэтому ее можно использовать как переменную «Y» или как зависимую переменную. Все остальные переменные в нашем наборе данных можно рассматривать как независимые переменные или переменные «X». Теперь давайте определим наши переменные X и Y в Python!
Реализация Python:
Выход:
X variable : [[5.1 3.5 1.4 0.2] [4.9 3. 1.4 0.2] [4.7 3.2 1.3 0.2] [4.6 3.1 1.5 0.2] [5. 3.6 1.4 0.2]] Y variable : ['setosa' 'setosa' 'setosa' 'setosa' 'setosa']
Теперь нам нужно нормализовать наши значения переменной «X», которые могут быть полезны при обучении нашей модели KNN. До этого нормализация - это процесс структурирования и удаления аномалий для заданного набора значений. Это также снижает количество данных и улучшает целостность данных. Чтобы нормализовать значения, мы можем использовать функцию ‘StandardScaler’ в scikit-learn. Давайте сделаем это на Python!
Реализация Python:
Выход:
[[-0.90068117 1.01900435 -1.34022653 -1.3154443 ] [-1.14301691 -0.13197948 -1.34022653 -1.3154443 ] [-1.38535265 0.32841405 -1.39706395 -1.3154443 ] [-1.50652052 0.09821729 -1.2833891 -1.3154443 ] [-1.02184904 1.24920112 -1.34022653 -1.3154443 ]]
Теперь, когда у нас есть идеальные зависимые и независимые переменные. Теперь мы можем продолжить обучение нашей модели KNN. Чтобы обучить нашу модель, мы должны сначала разделить наши данные на обучающий набор и набор для тестирования, где обучающий набор имеет наибольшее количество точек данных. Чтобы разделить наши данные, мы можем использовать функцию ‘train_test_split’, предоставляемую scikit-learn на python.
Реализация Python:
Выход:
Train set shape : (105, 4) (105,) Test set shape : (45, 4) (45,)
В приведенном выше коде мы использовали train_test_split, чтобы разделить наши данные на обучающий набор и набор для тестирования. Внутри функции мы указали, что наш тестовый набор должен состоять из 30% данных, а остальное - это обучающий набор. Наконец, мы упомянули, что не должно быть случайного перетасовки наших данных при разделении.
Теперь мы готовы создать наш алгоритм KNN. Давайте сделаем это на Python!
Реализация Python:
Выход:
KNeighborsClassifier(algorithm='auto',leaf_size=30,metric=minkowski, metric_params=None,n_jobs=None,n_neighbors=3,p=2, weights='uniform')
Во-первых, мы указали для нашего значения «K» значение 3. Затем мы определили наш алгоритм и, наконец, подогнали наши значения набора параметров к алгоритму. После распечатки алгоритма мы видим, что «metric = minkowski» - это не что иное, как указание на то, что метод, используемый для вычисления расстояния до соседей, - это метод Минковского. Существуют также другие методы, такие как метод евклидова расстояния и метод индекса Жаккара, но его нужно определять вручную.
После завершения обучения нашего алгоритма KNN, давайте предскажем тестовые значения с помощью нашего обученного алгоритма и оценим наши результаты, используя оценочные показатели scikit-learn.
Реализация Python:
Выход:
Prediction Accuracy Score (%) : 97.78
Используя наш обученный алгоритм KNN, мы предсказали значения тестового набора. Наконец, мы использовали метрику оценки «precision_score», чтобы проверить точность наших прогнозируемых результатов. В выходных данных мы видим, что результаты имеют точность 97,78%, что означает, что наша модель KNN очень хорошо работает и для данного набора данных радужной оболочки глаза, она способна решать реальные проблемы классификации. Таким образом, мы успешно построили, обучили и оценили нашу модель KNN на Python. На этом мы подошли к концу статьи.
Я надеюсь, что эта статья окажется для вас полезной, и не беспокойтесь, если вы не выполнили какую-либо часть кода, поскольку я предоставил полный исходный код для этой статьи.
Удачного машинного обучения!
Полный код: