РУКОВОДСТВО K-БЛИЖАЙШИХ СОСЕДЕЙ

Как улучшить K-ближайших соседей?

Раздел 3: Настройка модели в Python

Ссылка Как реализовать K-ближайших соседей? Раздел 2: Построение модели на Python , прежде чем продолжить…

[10] Определение параметров поиска по сетке

param_grid_knn = {
    'n_neighbors': [2, 5, 10, 15],                                   
    'algorithm': ['ball_tree', 'kd_tree', 'brute', 'auto'],          
    'metric': ['minkowski', 'euclidean', 'manhattan', 'chebyshev']
}
  • n_neighbors - значение k-ближайшего соседа.
  • algorithm - алгоритм вычисления ближайших соседей.
  • metric - это алгоритм нахождения расстояния.

Зачем нужен этот шаг: Для установки выбранных параметров используется поиск оптимальной комбинации. Обратившись к документации sklearn.neighbors.KNeighborsClassifier, вы можете найти полный список параметров с описаниями, которые можно использовать в функциях поиска по сетке.

[11] Настройка гиперпараметров с использованием данных обучения

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
kNNModel_grid = GridSearchCV(estimator=KNeighborsClassifier(), param_grid=param_grid_knn, verbose=1, cv=10, n_jobs=-1)
kNNModel_grid.fit(X_train, y_train)
print(kNNModel_grid.best_estimator_)
...
Fitting 10 folds for each of 64 candidates, totalling 640 fits
KNeighborsClassifier(algorithm='brute', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=5, p=2, weights='uniform')

Примечание. Общее количество подгонок составляет 640, поскольку cv определен как 10 и есть 64 кандидата (n_neighbors имеет 4 определенных параметра, algorithm имеет 4 определенных параметра, а metric имеет 4 определенных параметра). Следовательно, вычисление для общего количества посадок → 10 x [4 x 4 x 4] = 640.

  • estimator - интересующая модель машинного обучения при условии, что у модели есть функция оценки; в этом случае назначенная модель - KNeighborsClassifier ().
  • param_grid - словарь с именами параметров (строкой) в качестве ключей и списками настроек параметров, которые можно попробовать в качестве значений; это позволяет осуществлять поиск по любой последовательности настроек параметров.
  • verbose - многословность: чем выше, тем больше сообщений; в этом случае он установлен на 1.
  • cv - это генератор перекрестной проверки или итерация, в этом случае существует 10-кратная перекрестная проверка.
  • n_jobs - максимальное количество одновременно работающих воркеров; в этом случае он установлен в -1, что означает, что используются все процессоры.

Зачем этот шаг: найти оптимальную комбинацию гиперпараметров, которая минимизирует предопределенную функцию потерь для получения лучших результатов.

[12] Прогноз по данным тестирования

y_pred = kNNModel_grid.predict(X_test)
print(y_pred)
...
[1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 0 0]

Почему этот шаг: получение прогноза модели на основе данных тестирования для оценки точности и эффективности модели.

[13] Числовой анализ

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, y_pred), ": is the confusion matrix")
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred), ": is the accuracy score")
from sklearn.metrics import precision_score
print(precision_score(y_test, y_pred), ": is the precision score")
from sklearn.metrics import recall_score
print(recall_score(y_test, y_pred), ": is the recall score")
from sklearn.metrics import f1_score
print(f1_score(y_test, y_pred), ": is the f1 score")
...
[[83 32]
[20 73]] : is the confusion matrix 

0.75 : is the accuracy score
0.6952380952380952 : is the precision score
0.7849462365591398 : is the recall score
0.7373737373737373 : is the f1 score

Примечание. Используя матрицу путаницы, можно извлечь истинно положительные, ложноположительные, ложноотрицательные и истинно отрицательные значения, которые помогут в вычислении показателя точности, показателя точности, показателя отзыва и показателя f1:

  • Истинно положительный = 83
  • Ложноположительный = 32
  • Ложноотрицательный = 20
  • True Negative = 73.

Зачем нужен этот шаг: чтобы оценить производительность настроенной модели классификации. Как видите, показатели точности, точности, отзыва и F1 улучшились за счет настройки модели на основе базовой модели K-Nearest Neighbor, созданной в Разделе 2.



Далее - Зачем использовать K-Nearest Neighbours? Раздел 4: Оценка компромиссов модели