场景一
场景二
编码实现
权重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 = k
best_score = score
best_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 />
```python
best_score = 0.0
best_k = -1
best_p = -1
for 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 = k
best_p = p
best_score = score
print("best_k =", best_k) # best_k = 3
print("best_p =", best_p) # best_p = 2
print("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