機器學習 k近鄰演算法 kNN

2021-08-16 17:50:51 字數 2392 閱讀 5984

knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。

首先來看看機器學習演算法的基本流程:

由此可見knn演算法的特點:

1. k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。

2. 為了和其他演算法統一,可以認為訓練資料集就是模型本身。

這也是scikit-learn在封裝的時候的思路,來和其他演算法統一。由此,每乙個演算法,都會有fit這個過程。

由於knn演算法可以認為資料集就是模型本身,所以fit的過程實際上就是把資料集作為模型的過程,因此這個演算法的核心在於predict。

計算距離:

選k個neighbors並投票:

簡潔過程:

1. 載入scikit-learn中機器學習對應的演算法

2. 建立這個演算法對應的例項,並傳入所需引數

3. fit過程,擬合資料集

4. predict進行**

如果需要自己寫乙個機器學習演算法,只要遵循scikit-learn的流程和介面返回要求,就可以無縫地送給scikit-learn其他方法。

機器學習引數主要分為:超引數和模型引數。

超引數:在演算法執行前需要決定的引數

模型引數:演算法過程中學習的引數

在knn演算法中:

1. 沒有模型引數

2. 其中的k是典型的超引數

這裡用scikit-learn內建的手寫體數字的資料。

匯入資料,分為train set和test set, 用knn演算法進行分類並得出正確率

尋找最好的k

這裡需要注意的是,如果找到的最好的超引數是邊界上的值,就意味著有可能有更好的k值在這個範圍的外面,比如best_k是10的話,那麼有可能要在8到20這個範圍再搜尋一下,看有沒有更好的超引數。

上面我們只考慮了k這乙個超引數,且只是找到最近的k個點,並沒有把它們的距離納入考慮。如下圖所示,如果是普通的knn演算法,那麼投票藍色 : 紅色=2 : 1, 藍色勝出,但如果考慮了距離,則紅色勝出。

考慮距離的乙個優點就是,當分為多類如三類的情況,如下,可能會出現平票的現象,那麼此時,考慮距離,就能把樣本歸為離它最近的那一類了。

更多關於距離的定義

尤拉距離:

示意圖:

換個寫法,可以發現乙個規律:

其中第三個式子,就是明可夫斯基距離。其中的p就是一種超引數。p=1時,就是曼哈頓距離;p=2時,明可夫斯基距離就是尤拉距離。

面對很多其他的超引數,我們都可以通過這種搜尋的策略,來找到最好的超引數值。這種搜尋策略就叫做「網格搜尋」。

實際上很多超引數都有著相互依賴的關係,有時候實現會有點複雜。如我們不考慮距離的時候,也不會牽扯到p這個超引數。那我們怎麼才能一次性的得到最好的超引數的組合呢?事實上scikit-learn為我們的網格搜尋方式封裝了乙個專門的函式,只要學習使用這個網格搜尋的方法就能更好更方便地找到最好的超引數。

機器學習 k 近鄰 kNN 演算法

一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...

機器學習 k 近鄰演算法(KNN)

簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用範圍 數值型和標稱型。對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的...

機器學習 KNN演算法 K 近鄰

如何計算測試樣本與y已分類樣本之間的距離 如何選擇k值 k值過大或過小的影響 k值過小 例如k 1,結果對近鄰的例項點非常敏感,容易受到雜訊影響,發生過擬合 k值過大 可以一定程度上避免上述情況,但是現有訓練集的訓練誤差會增大,輸入不相似的訓練例項會導致 錯誤 適合分類問題,有較高的精確度,對異常值...