Изучите классификацию KNN и постройте модель на простом наборе данных, чтобы визуализировать свои результаты!
В предыдущих рассказах я давал объяснение программы для реализации различных моделей регрессии. Также я описал реализацию модели Логистическая регрессия. В этой статье мы увидим алгоритм K-Nearest Neighbours или KNN Classification вместе с простым примером.
Обзор классификации KNN
K-Nearest Neighbours или KNN Classification - это простой и легкий в реализации алгоритм машинного обучения с учителем, который используется в основном для задач классификации.
Давайте разберемся с этим алгоритмом на очень простом примере. Предположим, есть два класса, представленные прямоугольниками и треугольниками. Если мы хотим добавить новую форму (ромб) к любому из классов, мы можем реализовать модель классификации KNN.
В этой модели мы должны выбрать количество ближайших соседей (N). Здесь, поскольку мы выбрали N = 4, новая точка данных вычисляет расстояние между каждой из точек и рисует круговую область вокруг своих ближайших 4 соседей (как N = 4). В этой задаче, поскольку все четыре ближайших соседа относятся к классу 1 (прямоугольники), новая точка данных (ромб) также назначается как точка данных класса 1.
Таким образом, мы можем изменять параметр N с различными значениями и выбирать наиболее точное значение для модели методом проб и ошибок, также избегая чрезмерной подгонки и высоких потерь.
Таким образом, мы можем реализовать алгоритм классификации KNN. Давайте теперь перейдем к его реализации на реальном примере в следующем разделе.
Анализ проблемы
Чтобы применить модель классификации KNN на практике, я использую тот же набор данных, что и при построении модели логистической регрессии. В этом случае мы используем набор данных DMV Test, который состоит из трех столбцов. Первые два столбца содержат два письменных теста DMV (DMV_Test_1 и DMV_Test_2), которые являются независимыми переменными и последний столбец состоит из зависимой переменной Результаты, которая указывает, есть ли у водителя права (1) или нет (0).
В этом случае мы должны построить модель классификации KNN, используя эти данные, чтобы предсказать, получит ли водитель, прошедший два письменных теста DMV, лицензию или не будет использовать эти оценки, полученные в своих письменных тестах, и классифицировать результаты.
Шаг 1. Импорт библиотек
Как всегда, первый шаг всегда будет включать в себя импорт библиотек NumPy, Pandas и Matplotlib.
import numpy as np import matplotlib.pyplot as plt import pandas as pd
Шаг 2: Импорт набора данных
На этом этапе мы получим набор данных из моего репозитория GitHub как «DMVWrittenTests.csv». В переменной X будут храниться два «DMV-теста» и переменная Y сохранит окончательный результат как «Результаты» . dataset.head(5)
используется для визуализации первых 5 строк данных.
dataset = pd.read_csv('https://raw.githubusercontent.com/mk-gurucharan/Classification/master/DMVWrittenTests.csv') X = dataset.iloc[:, [0, 1]].values y = dataset.iloc[:, 2].values dataset.head(5) >> DMV_Test_1 DMV_Test_2 Results 34.623660 78.024693 0 30.286711 43.894998 0 35.847409 72.902198 0 60.182599 86.308552 1 79.032736 75.344376 1
Шаг 3. Разделение набора данных на обучающий набор и тестовый набор.
На этом этапе мы должны разделить набор данных на обучающий набор, на котором будет обучаться модель логистической регрессии, и тестовый набор, на котором обученная модель будет применяться для классификации результатов. Здесь test_size=0.25
означает, что 25% данных будет сохранено как Тестовый набор, а остальные 75 % будет использоваться для обучения как обучающий набор.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
Шаг 4: масштабирование функций
Это дополнительный шаг, который используется для нормализации данных в определенном диапазоне. Это также помогает ускорить вычисления. Поскольку данные сильно различаются, мы используем эту функцию, чтобы ограничить диапазон данных небольшим пределом (-2,2). Например, оценка 62,0730638 нормализована до -0,21231162, а оценка 96,51142588 нормализована до 1,55187648. Таким образом, результаты X_train и X_test нормализуются до меньшего диапазона.
from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)
Шаг 5: Обучение модели классификации KNN на обучающем наборе
На этом этапе класс KNeighborsClassifier
импортируется и назначается переменной «classifier». Функция classifier.fit()
оснащена X_train и Y_train, на которых модель будет обучаться.
from sklearn.neighbors import KNeighborsClassifier classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2) classifier.fit(X_train, y_train)
Шаг 6: Прогнозирование результатов набора тестов
На этом этапе функция classifier.predict()
используется для прогнозирования значений для тестового набора, и значения сохраняются в переменной y_pred.
.
y_pred = classifier.predict(X_test) y_pred
Шаг 7: матрица неточностей и точность
Этот шаг чаще всего используется в методах классификации. Здесь мы видим точность обученной модели и строим матрицу неточностей.
Матрица неточностей - это таблица, которая используется для отображения количества правильных и неправильных прогнозов по задаче классификации, когда известны реальные значения тестового набора. Он имеет формат
Истинные значения - это количество сделанных правильных прогнозов.
from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) from sklearn.metrics import accuracy_score print ("Accuracy : ", accuracy_score(y_test, y_pred)) cm >>Accuracy : 0.92 >>array([[11, 1], [ 1, 12]])
Из приведенной выше матрицы путаницы мы делаем вывод, что из 25 данных набора тестов 23 были правильно классифицированы, а 2 классифицированы неправильно, что немного лучше, чем модель логистической регрессии.
Шаг 8: Сравнение реальных значений с прогнозируемыми значениями
На этом этапе создается Pandas DataFrame для сравнения классифицированных значений как исходного набора тестов (y_test), так и прогнозируемых результатов (y_pred ).
df = pd.DataFrame({'Real Values':y_test, 'Predicted Values':y_pred}) df >> Real Values Predicted Values 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0
Хотя эта визуализация может быть не так полезна, как с регрессией, из этого мы видим, что модель способна классифицировать значения тестового набора с приличной точностью 92%, как рассчитано выше.
Шаг 9: Визуализация результатов
На этом последнем шаге мы визуализируем результаты модели классификации KNN на графике, который отображается вместе с двумя регионами.
from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j) plt.title('KNN Classification') plt.xlabel('DMV_Test_1') plt.ylabel('DMV_Test_2') plt.legend() plt.show()
На этом графике значение 1 (т. Е. Да) отображается в «красном» цвете, а значение 0 (т. е. нет) отображается в «зеленом» цвете. Модель классификации KNN разделяет два региона. Она не является линейной, как модель логистической регрессии. Таким образом, любые данные с двумя заданными точками данных (DMV_Test_1 и DMV_Test_2) могут быть нанесены на график, и в зависимости от того, в каком регионе они попадают, результат (получение водительских прав) может быть классифицирован как Да или Нет.
Как было вычислено выше, мы видим, что в тестовом наборе есть два значения, по одному для каждого региона, которые неправильно классифицированы.
Заключение -
Таким образом, в этой истории нам удалось построить модель классификации KNN, которая может предсказать, сможет ли человек получить водительские права на своих письменных экзаменах и визуализировать результаты.
Я также прикрепляю ссылку на свой репозиторий GitHub, где вы можете загрузить эту записную книжку Google Colab и файлы данных для справки.
Вы также можете найти объяснение программы для других моделей классификации ниже:
- "Логистическая регрессия"
- Классификация K-ближайших соседей (KNN)
- Классификация опорных векторов (SVM) (скоро)
- Наивная байесовская классификация (скоро)
- Классификация случайных лесов (скоро)
В следующих статьях мы познакомимся с более сложными моделями регрессии, классификации и кластеризации. А пока желаю счастливого машинного обучения!