场景一
场景二

编码实现
权重weights参数:
-
uniform:不考虑距离 -
distance:考虑距离 ```python默认使用的是欧拉距离
best_score = 0.0 best_k = -1 best_method = “” for method in [“uniform”, “distance”]:
for k in range(1, 11):knn_clf = KNeighborsClassifier(n_neighbors=k, weights=method)knn_clf.fit(X_train, y_train)score = knn_clf.score(X_test, y_test)if score > best_score:best_k = kbest_score = scorebest_method = method
print(“best_method =”, best_method) # best_method = uniform print(“best_k =”, best_k) # best_k = 4 print(“best_score =”, best_score) # best_score = 0.9916666666666667
<a name="wcAqt"></a># 距离的定义<a name="zL4QS"></a>## 欧拉距离<a name="JNMXa"></a>## 曼哈顿距离<a name="d7vYC"></a>## 明可夫斯基距离`Minkowski`前两种距离的更一般形式<br />作用:为KNN算法提供了一个超参数<br />```pythonbest_score = 0.0best_k = -1best_p = -1for k in range(1, 11):for p in range(1, 6):knn_clf = KNeighborsClassifier(n_neighbors=k, weights="distance", p=p)knn_clf.fit(X_train, y_train)score = knn_clf.score(X_test, y_test)if score > best_score:best_k = kbest_p = pbest_score = scoreprint("best_k =", best_k) # best_k = 3print("best_p =", best_p) # best_p = 2print("best_score =", best_score) # best_score = 0.9888888888888889
sk_knn_clf = KNeighborsClassifier(n_neighbors=4, weights="distance", p=1)sk_knn_clf.fit(X_train, y_train)sk_knn_clf.score(X_test, y_test) # 0.9833333333333333

