演算法修煉 KNN(微高階)

2021-08-28 12:13:16 字數 3389 閱讀 4084

好了,又回來了。在進入本章之前,我們先來學一點東西:

那麼我們應該怎樣去尋找好的超引數呢?

一般來說有三個方法:領域知識、經驗數值、實驗搜尋。

我們的knn也有兩個很重要的超引數:1、k值的選取 。  2、距離的權重。

接下來讓我們尋找最好的k值:

首先我本次使用的是digits數字集:

digits = datasets.load_digits()

x = digits.data

y = digits.target

# 然後呼叫sklearn的分割函式,分割資料集(將資料集分為訓練集和測試集)。

# 思路,遍歷1-11 ,分別拿每乙個k去呼叫knn演算法,取出分值最高的那個k

best_k = -1

best_score = 0.0

for i in range(1,11):

clf_knn1 = kneighborsclassifier(n_neighbors=i)

clf_knn1.fit(x_train,y_train)

score = clf_knn1.score(x_test,y_test)

if score > best_score:

best_k = i

best_score = score

# 如果best_k為10,則需要測試10以後的數。

很明顯,我們找到了最好的k值為4,這個時候我們的knn演算法的準確度達到了99.1%。

如果按照我們原來的那種演算法,最後的結果就是目標點是藍色,但是考慮權重以後目標點應該是紅的。(般情況下使用距離的導數作為權證),而且,考慮權重可以幫助我們解決平票的問題。

接下來,讓我們用**驗證一下考慮距離與不考慮距離的區別:

# 思路,遍歷1-11 ,分別拿每乙個k去呼叫knn演算法,取出分值最高的那個k

best_method = ""

best_k = -1

best_score = 0.0

for m in ["uniform","distance"]:

for i in range(1,11):

clf_knn1 = kneighborsclassifier(n_neighbors=i,weights=m)

clf_knn1.fit(x_train,y_train)

score = clf_knn1.score(x_test,y_test)

if score > best_score:

best_k = i

best_score = score

best_method = m

# 如果best_k為10,則需要測試10以後的數。

由結果我們發現,對於我們的數字集還是不考慮距離權重的結果更好,但這只是個例,接下來我們還是引入距離的概念:

那麼我們既然要考慮距離,那麼我們需要考慮的是什麼距離?

1、尤拉距離

2、曼哈頓距離:

什麼是曼哈頓距離,就是x1,x2兩個樣本在每個維度上的差值的和。

我們可以發現尤拉距離和曼哈頓距離在數學形式上具有一定的一致性:

接下來,讓我用**搜尋明可夫斯基距離相應的p:

# 思路,遍歷1-11 ,分別拿每乙個k去呼叫knn演算法,取出分值最高的那個k

best_p = -1

best_k = -1

best_score = 0.0

for i in range(1,11):

for p in range(1,6):

clf_knn1 = kneighborsclassifier(n_neighbors=i,weights="distance",p=p)

clf_knn1.fit(x_train,y_train)

score = clf_knn1.score(x_test,y_test)

if score > best_score:

best_k = i

best_score = score

best_p = p

# 如果best_k為10,則需要測試10以後的數。

關於網格搜尋,歸一化問題,下一章再做介紹。

剛剛開始學習,有不對的地方,還望多多指正。

kNN高階例項

這裡我們用knn來分類乙個大點的資料庫,包括資料維度比較大和樣本數比較多的資料庫。這裡我們用到乙個手寫數字的資料庫,這個資料庫包括數字0 9的手寫體。每個數字大約有200個樣本。每個樣本保持在乙個txt檔案中。手寫體影象本身的大小是32x32的二值圖,轉換到txt檔案儲存後,內容也是32x32個數字...

個人總結 職場高階修煉

心靈停留在舒適區是最不可原諒的 就是懶,圖安逸 期望舒適,不願被打擾,不願被push 不願被職責,不願主動關心他人,不願意思考如何提高團隊效率 是否主動性還是懶 消極聽取領導的命令,消極待命 不主動接觸其他同事,聚會不主動發言,沒做好社交的準備 好像,有人會,大概,晚些時候,說不定,應該.總是把這些...

KNN演算法 鄰近演算法

knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單 計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下 電影名稱 打鬥次數 接吻次數 電影型別 california ...