4.5 超參數(shù)
- 超參數(shù)就是指在運行機器學(xué)習(xí)算法之前,需要指定的參數(shù)。
- 模型參數(shù):算法過程中學(xué)習(xí)的參數(shù)。
- KNN算法沒有模型參數(shù),k是典型的超參數(shù)。
- 調(diào)參一般說的就是超參數(shù)</br>
如何尋找到一個好的超參數(shù)呢?
- 領(lǐng)域知識
- 經(jīng)驗數(shù)值
- 實驗搜索
import numpy as np
from sklearn import datasets
# 加載手寫數(shù)字?jǐn)?shù)據(jù)集
digits = datasets.load_digits()
X = digits.data
y = digits.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train, y_train)
knn_clf.score(X_test, y_test)
尋找最好的k
# 初始設(shè)置為0
best_score = 0.0
best_k = -1
for k in range(1, 11)
knn_clf = KNeighborsClassifier(n_neighbors=k)
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
print("best_k = ", best_k)
print("best_score = ", best_score)
如果我們運行的結(jié)果k值接近我們設(shè)定的邊界值,例如結(jié)果k=10,這時候我們需要將設(shè)定的范圍擴大,將range變?yōu)?8,20)在重新尋找一下最好的k值。因為一般最好的k取到邊界值時,有可能最好的在邊界外。</br>
除了k之外,k近鄰算法還有一個超參數(shù)。</br>
看下面的示例圖,按照普通的k近鄰算法,新的樣本點(綠色點)計算與它周圍最近的三個點,發(fā)現(xiàn)藍色個數(shù)一共有2個,所以藍色獲勝。但是其實樣本點是距離紅色是最近的,所以在這種情況下是不是紅色點的權(quán)重應(yīng)該要比藍色點的要重一些呢?這就是k近鄰的另外一個用法,考慮了距離的權(quán)重。

image.png
通常而言,我們考慮的
距離權(quán)重是將距離的倒數(shù)作為權(quán)重。距離越近權(quán)重越大。</br>紅色是1,藍色是1/3+1/4=7/12 紅色勝
考慮距離權(quán)重還有一個優(yōu)點。比如之前的普通方法有可能選取的最近的三個點是三類點,出現(xiàn)平票的情況,這時候會隨機選擇一個點作為預(yù)測點,顯然這樣也是不合理的。所以加入了距離的權(quán)重之后,可以根據(jù)三點之間的距離權(quán)重選擇更為精確的預(yù)測點。
考慮距離?不考慮距離?
best_method = ""
best_score = 0.0
best_k = -1
# weights有兩個值,默認(rèn)不使用是uniform
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)
print("best_k = ", best_k)
print("best_score = ", best_score)
運行結(jié)果如下:

image.png
更多關(guān)于距離的定義
曼哈頓距離

image.png
曼哈頓距離就是點在每個維度的距離之和。在這個圖中,紅黃紫色的都是曼哈頓距離,而綠色就是歐拉距離。