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

Необходимо найти правильный параметр «k» —

Большее k= менее сложная модель = может привести к недообучению

Меньшее k = более сложная модель = может привести к переоснащению

В следующем разделе мы попытаемся подогнать модель KNN к правильному K.

  1. Загрузка нескольких библиотек, которые будут использоваться в анализе —
import numpy as np 
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

2. Импорт набора данных и проверка нулевых значений —

df = pd.read_csv("/kaggle/input/pima-indians-diabetes-database/diabetes.csv")
print(df.head())
print(df.shape)

print(df.isna().sum())

3. Разделение набора данных —

X = df.drop("Outcome", axis=1).values
y = df["Outcome"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42, stratify=y)
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)

4. Гиперпараметр Настройка параметра K —

train_score = {}
test_score = {}
n_neighbors = np.arange(2, 30, 1)
for neighbor in n_neighbors:
    knn = KNeighborsClassifier(n_neighbors=neighbor)
    knn.fit(X_train, y_train)
    train_score[neighbor]=knn.score(X_train, y_train)
    test_score[neighbor]=knn.score(X_test, y_test)

5. Построение графика поезда и теста —

plt.plot(n_neighbors, train_score.values(), label="Train Accuracy")
plt.plot(n_neighbors, test_score.values(), label="Test Accuracy")
plt.xlabel("Number Of Neighbors")
plt.ylabel("Accuracy")
plt.title("KNN: Varying number of Neighbors")
plt.legend()
plt.xlim(0, 33)
plt.ylim(0.60, 0.90)
plt.grid()
plt.show()

6. Поиск лучшего параметра «k» —

for key, value in test_score.items():
    if value==max(test_score.values()):
        print(key)

Как мы видим, n_neighbors показывает лучший показатель точности для 4 соседей и 19 соседей. Но классификатор K-NearestNeighbor будет работать по-разному в зависимости от того, как разделены данные. Для этого требуется настройка гиперпараметров с использованием GridSearchCV. Мы также можем использовать RandomizedSearchCV.

7. Использование GridSearchCV для определения best_params_ для n_neighbors —

kf=KFold(n_splits=5,shuffle=True,random_state=42)
parameter={'n_neighbors': np.arange(2, 30, 1)}
knn=KNeighborsClassifier()
knn_cv=GridSearchCV(knn, param_grid=parameter, cv=kf, verbose=1)
knn_cv.fit(X_train, y_train)
print(knn_cv.best_params_)

8. Использование лучшего параметра из шага 7 для обучения модели и прогнозирования —

knn=KNeighborsClassifier(n_neighbors=23)
knn.fit(X_train, y_train)
y_pred=knn.predict(X_test)
accuracy_score=accuracy_score(y_test, y_pred)*100
print("Accuracy for testing dataset after tuning : {:.2f}%".format(accuracy_score))

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

Я ценю вас и время, которое вы потратили на чтение этого дня!

Linkedin: https://www.linkedin.com/in/saurav-agrawal-137500214/

StackOverFlow: https://stackoverflow.com/users/11842006/saurav-agrawal

Электронная почта: [email protected]