Пошаговое руководство по классификатору KNeighbors от scikit-learn

Мы будем использовать набор данных радужной оболочки глаза, доступный здесь в UCI Machine Learning. Это небольшой набор данных с легко различимыми кластерами, который очень полезен для подобных демонстраций. Он содержит 150 наблюдений за растениями ириса трех видов: сетоза, разноцветный и вирджинский. Задача - определить вид каждого растения по ближайшим соседям.

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

Я использовал следующий код для загрузки данных в DataFrame pandas:

## load the iris data into a DataFrame
import pandas as pd
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data' 
## Specifying column names.
col_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
iris = pd.read_csv(url, header=None, names=col_names)

Взглянем на данные:

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

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

## map each iris species to a number with a dictionary and list comprehension.
iris_class = {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2}
iris['species_num'] = [iris_class[i] for i in iris.species]

Разделите данные на наши моделирующие и целевые переменные, наши X и y:

## Create an 'X' matrix by dropping the irrelevant columns.
X = iris.drop(['species', 'species_num'], axis=1)
y = iris.species_num

Сплит поезд-тест:

from sklearn.model_selection import train_test_split
## Split data into training and testing sets.
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

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

## Import the Classifier.
from sklearn.neighbors import KNeighborsClassifier
## Instantiate the model with 5 neighbors. 
knn = KNeighborsClassifier(n_neighbors=5)
## Fit the model on the training data.
knn.fit(X_train, y_train)
## See how the model performs on the test data.
knn.score(X_test, y_test)

Модель на самом деле имеет оценку 100% точности, поскольку это очень упрощенный набор данных с четко разделяемыми классами. Но вот оно. Вот как реализовать метод K-Nearest Neighbours с помощью scikit-learn. Загрузите свой любимый набор данных и попробуйте!