2019-06-27-4.5 超參數(shù)

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容