K-ближайшие соседи (KNN) с Python
Руководство по машинному обучению по K-ближайшим соседям с Python.
В scikit-learn много алгоритмов классификации, которые мы можем использовать для обучения модели машинного обучения. В этой статье я расскажу вам о машинном обучении по алгоритму K-ближайших соседей (KNN) с языком программирования Python.
Введение в K-ближайших соседей (KNN)
Создание модели машинного обучения – это о хранении обучающего набора. Чтобы предсказать новую точку данных, алгоритм K-ближайших соседей (KNN) находит точку в обучающем наборе, которая находится ближе всего к новой точке. Затем он присваивает метку этой точки обучения новой точке данных.
K в k ближайших соседей означает, что вместо использования только соседа, ближайшего к новой точке данных, мы можем рассматривать любое фиксированное количество k соседей в обучении (например, трех или пяти ближайших соседей). Затем мы можем сделать прогноз, используя класс большинства среди этих соседей.
Все модели машинного обучения scikit-learn реализованы в своих классах, называемых классами оценки. Алгоритм классификации k-ближайших соседей (KNN) реализован в классе KNeighborsClassifier модуля Neighbours.
Руководство по машинному обучению по K-ближайшим соседям (KNN) с Python
Данные, которые я буду использовать для реализации алгоритма KNN – это набор данных Iris, классический набор данных в машинном обучении и статистике. Набор данных Iris включен в модуль наборов данных Scikit-learn. Мы можем легко импортировать его, вызвав функцию load_iris:
from sklearn.datasets import load_iris iris_dataset = load_iris()
Следующий шаг – разделить данные на обучающий и тестовый наборы. Scikit-learn содержит функцию, которая перетасовывает набор данных и разделяет его на два. Эта функция известна как функция train_test_split:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( iris_dataset['data'], iris_dataset['target'], random_state=0)
Эта функция извлечет 75% строк данных в качестве обучающего набора вместе с соответствующими метками для этих данных. Остальные 25% данных известны как тестовый набор. Какое количество данных вы хотите поместить в обучающий и тестовый набор, соответственно, не является фиксированным, но использование тестового набора, содержащего 25% данных, должно быть очень хорошим подходом.
Визуализация данных
Перед построением модели машинного обучения часто бывает полезно проверить данные, чтобы увидеть, легко ли решается задача без машинного обучения или желаемой информации может и не быть в данных. Один из лучших способов изучить данные – визуализировать их.
Один из способов сделать это – использовать диаграмму рассеяния. На диаграмме рассеяния один объект размещается по оси x, а другой – по оси Y, и для каждой точки данных будет отрисована точка:
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names) # create a scatter matrix from the dataframe, color by y_train pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
На диаграмме рассеяния выше мы можем видеть, что три класса кажутся относительно хорошо разделенными, используя измерения чашелистиков и лепестков. Модель машинного обучения, вероятно, сможет научиться их разделять.
K-ближайшие соседи с Python
Теперь мы можем приступить к построению реальной модели машинного обучения, а именно K-ближайших соседей. Именно тогда мы определим параметры модели. Самый важный параметр классификатора K соседей – это количество соседей, которое мы установим равным 1:
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1)
Чтобы построить модель на обучающем наборе, нам нужно вызвать метод fit объекта KNN:
knn.fit(X_train, y_train) KNeighborsClassifier(n_neighbors=1)
Метод fit возвращает сам объект KNN, поэтому мы получаем строковое представление нашего классификатора. Представление показывает нам, какие параметры использовались для создания модели. Почти все они являются значениями по умолчанию, но вы также можете найти n_neighbors = 1, который является параметром, который мы передали.
Как сделать прогноз
Теперь мы можем делать прогнозы, используя эту модель, для новых данных, для которых мы можем не знать правильные метки. Чтобы делать прогнозы, нам нужно вызвать метод прогнозирования объекта KNN:
prediction = knn.predict(X_new) print("Prediction:", prediction) print("Predicted target name:", iris_dataset['target_names'][prediction])
Результат:
Prediction: [0]
Predicted target name: ['setosa']
Наша модель K-ближайших соседей предсказывает, что этот новый ирис принадлежит к классу 0, и это означает, что его вид – setosa. Надеюсь, вам понравилась эта статья о машинном обучении K-ближайших соседей (KNN) с реализацией на языке программирования Python.