機器學習 k NN演算法(也叫k近鄰演算法)

2022-03-22 01:37:05 字數 2431 閱讀 8211

# knn:k-nearest neighboors

# 多用於解決分類問題

1)特點:

是機器學習中唯一乙個不需要訓練過程的演算法,可以別認為是沒有模型的演算法,也可以認為訓練資料集就是模型本身;

思想極度簡單;

應用數學知識少(近乎為零);

效果少;

可以解釋機械學習演算法使用過程中的很多細節問題

更完整的刻畫機械學習應用的流程;

2)思想:

求新樣本點在樣本空間內與所有訓練樣本的尤拉距離;

對尤拉距離排序,找出最近的k個點;

對k個點分類統計,看哪種型別的點數量最多,此型別即為對新樣本的**型別;

3)**實現過程:

# assert:表示宣告;此處對4個引數進行限定;

math模組下的sprt()方法:對數開平方;

from math import

sqrt

print(sprt(9))

#3

collections模組下的counter()方法:對列表中的資料進行分類統計,生產乙個counter物件;

from collections import

counter

my_list = [0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3]

print

(counter(my_list))

#乙個counter物件:counter()

counter物件的most_common()方法:counter.most_common(n),返回counter物件中數量最多的n種資料,返回乙個list,list的每個元素為乙個tuple;

from collections import

counter

my_list = [0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3]

votes =counter(my_list)

print(votes.most_common(2))

#[(3, 5), (2, 4)]

1)k近鄰演算法的作用

1、解決分類問題,而且天然可以解決多分類問題;

2、也可以解決回歸問題,其中scikit-learn庫中封裝的kneighborsregressor,就是解決回歸問題;

2)缺點

原因:如果訓練集有m個樣本,n個特徵,**每乙個新樣本,需要計算與m個樣本的距離,每計算乙個距離,要使用n個時間複雜度,則計算m個樣本的距離,使用m * n個時間複雜度;

演算法的時間複雜度:反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很好反映出演算法的優劣與否。

演算法的時間複雜度與空間複雜度,參考:演算法的時間複雜度和空間複雜度

可以通過樹結構對k近鄰演算法優化:kd-tree、ball-tree,但即便進行優化,效率依然不高;

機器學習演算法,就是通過餵給資料進行**,理論上所有機器學習演算法都是高度資料相關;

k近鄰演算法對outlier更加敏感:比如三近鄰演算法,在特徵空間中,如果在需要**的樣本周邊,一旦有兩個樣本出現錯誤值,就足以使**結果錯誤,哪怕在更高的範圍裡,在特徵空間中有大量正確的樣本;

按k近鄰演算法的邏輯:找到和**樣本比較近的樣本,就得出**樣本和其最近的這個樣本型別相同;

問題:為什麼**的樣本型別就是離它最近的樣本的型別?

很多情況下,只是拿到**結果是不夠的,還需要對此結果有解釋性,進而通過解釋推廣使用,或者製作更多工具,或者以此為基礎發現新的理論/規則,來改進生產活動中的其它方面——這些是knn演算法做不到的;

維數災難:隨著維度的增加,「看似相近」的兩個點之間的距離越來越大;

例:[0, 0, 0, ...0]和[1, 1, 1,...1],按尤拉定理計算,元素個數越多,兩點距離越大;

方案:降維(pca);

獲取原始資料:一般可從scikit-learn庫中呼叫——# 呼叫資料集的操作流程機器學習:scikit-learn中演算法的呼叫、封裝並使用自己所寫的演算法

資料分割:一般按2 :8進行分割——# 分割資料的**實現過程、通過scikit-learn庫分割資料的操作流程機器學習:訓練資料集、測試資料集

資料歸一化:參見機器學習:資料歸一化(scaler)

訓練模型、模型**:機器學習:scikit-learn中演算法的呼叫、封裝並使用自己所寫的演算法

機器學習 k 近鄰 kNN 演算法

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

機器學習 k近鄰演算法 kNN

knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...

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

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