K-Nearest Neighbor Classifier — это алгоритм машинного обучения, используемый для классификации и регрессии. Он работает, находя K ближайших точек в обучающем наборе данных и используя их класс для прогнозирования класса или значения новой точки данных.
Необходимо найти правильный параметр «k» —
Большее k= менее сложная модель = может привести к недообучению
Меньшее k = более сложная модель = может привести к переоснащению
В следующем разделе мы попытаемся подогнать модель KNN к правильному K.
- Загрузка нескольких библиотек, которые будут использоваться в анализе —
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]