Пошаговое руководство по классификатору 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. Загрузите свой любимый набор данных и попробуйте!