Как мы можем найти оптимальное значение K в K-Nearest Neighbor? - PullRequest
0 голосов
/ 25 мая 2020

Я изучаю Ml у udemy, и ниже приведен код, который инструктор использует в своей лекции. Но я не полностью удовлетворен этим кодом, потому что он дает много значений k, eror_rate которых почти одинаковы (мне нужно вручную проверить значение k, чье частота ошибок незначительна).

Существует ли какой-либо другой метод для поиска наилучшего значения k (n_neighbor)?

error_rate = []
for i in range(1,40):
    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(X_train,y_train)
    pred_i = knn.predict(X_test)
    error_rate.append(np.mean(pred_i != y_test))

с использованием графика для отображения коэффициента ошибок в зависимости от значения K.

plt.figure(figsize=(10,6))
plt.plot(range(1,40),error_rate,color='blue', linestyle='dashed', marker='o',
markerfacecolor='red', markersize=10)
plt.title('Error Rate vs. K Value')
plt.xlabel('K')
plt.ylabel('Error Rate')

Error rate vs k_value fig

1 Ответ

2 голосов
/ 25 мая 2020

GridSearchCV и другие подобные алгоритмы доступны в sklearn, которые можно использовать для перекрестной проверки и поиска оптимального параметра.


from sklearn.model_selection import GridSearchCV

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()

X = iris.data
y = iris.target

k_range = list(range(1,100))
weight_options = ["uniform", "distance"]

param_grid = dict(n_neighbors = k_range, weights = weight_options)


knn = KNeighborsClassifier()

grid = GridSearchCV(knn, param_grid, cv = 10, scoring = 'accuracy')
grid.fit(X,y)

print (grid.best_score_)
print (grid.best_params_)
print (grid.best_estimator_)


# 0.9800000000000001
# {'n_neighbors': 13, 'weights': 'uniform'}
# KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
#                     metric_params=None, n_jobs=None, n_neighbors=13, p=2,
#                     weights='uniform')

Все алгоритмы доступны здесь. https://scikit-learn.org/stable/modules/classes.html#hyper -оптимизаторы-параметры

...