k近鄰法(k-nearest neighbor, k-nn)是2023年由cover t和hart p提出的一種基本分類與回歸方法。它的工作原理是:存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料**現次數最多的分類,作為新資料的分類。
距離度量
在2維實數向量空間,可以使用我們高中學過的兩點距離公式計算距離
常用向量距離度量準則
k-近鄰演算法的一般流程
(1) 收集資料:可以使用任何方法。
(2) 準備資料:距離計算所需要的數值,最好是結構化的資料格式。
(3) 分析資料:可以使用任何方法。
(4) 訓練演算法:此步驟不適用於k-近鄰演算法。
(5) 測試演算法:計算錯誤率。
(6) 使用演算法:首先需要輸入樣本資料和結構化的輸出結果,然後執行k-近鄰演算法判定輸 入資料分別屬於哪個分類,最後應用對計算出的分類執行後續的處理
演算法步驟:
(1) 計算已知類別資料集中的點與當前點之間的距離;
(2) 按照距離遞增次序排序;
(3) 選取與當前點距離最小的k個點;
(4) 確定前k個點所在類別的出現頻率;
(5) 返回前k個點出現頻率最高的類別作為當前點的**分類
import numpy as np
import operator
defcreatedataset()
:#四組二維特徵
group = np.array([[
1,101],[
5,89]
,[108,5]
,[115,8]
])#四組特徵的標籤
labels =
[『愛情片』,『愛情片』,『動作片』,『動作片』]
return group, labels
defclassify0
(inx, dataset, labels, k)
:#numpy函式shape[0]返回dataset的行數
datasetsize = dataset.shape[0]
#在列向量方向上重複inx共1次(橫向),行向量方向上重複inx共datasetsize次(縱向)
diffmat = np.tile(inx,
(datasetsize,1)
)- dataset
#二維特徵相減後平方
sqdiffmat = diffmat2
#sum()所有元素相加,sum(0)列相加,sum(1)行相加
sqdistances = sqdiffmat.
sum(axis=1)
#開方,計算出距離
distances = sqdistances0.
5#返回distances中元素從小到大排序後的索引值
sorteddistindices = distances.argsort(
)#定乙個記錄類別次數的字典
classcount =
for i in
range
(k):
#取出前k個元素的類別
voteilabel = labels[sorteddistindices[i]
]#dict.get(key,default=none),字典的get()方法,返回指定鍵的值,如果值不在字典中返回預設值。
#計算類別次數
classcount[voteilabel]
= classcount.get(voteilabel,0)
+1#python3中用items()替換python2中的iteritems()
#key=operator.itemgetter(1)根據字典的值進行排序
#key=operator.itemgetter(0)根據字典的鍵進行排序
#reverse降序排序字典
sortedclasscount =
sorted
(classcount.items(
),key=operator.itemgetter(1)
,reverse=
true
)#返回次數最多的類別,即所要分類的類別
return sortedclasscount[0]
[0]if __name__ ==
'__main__'
group, labels = createdataset(
)#測試集
test =
[101,20
]#knn分類
test_class = classify0(test, group, labels,3)
#列印分類結果
print
(test_class)
k-近鄰演算法優缺點 K 鄰近演算法
k 鄰近演算法 1.演算法描述 k 鄰近演算法 k nearest neighbor,knn 分類演算法,是最簡單的機器學習演算法。工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類對應的關係。輸入沒有標籤的新資料後,將新資料的每...
k鄰近演算法
今天學習了一點機器學習的知識,主要是機器學習最基本的演算法 k鄰近演算法。正好今天寫這篇blog可以複習鞏固,其中涉及到的code和一些內容來自 機器學習實戰 在此基礎上加了一點自己的注釋和理解。這本教程還是挺適合入門的,理論 相結合。k 近鄰演算法 knn 採用測量不同特徵值之間的距離方法進行分類...
K鄰近演算法 KNN
k nearest neighbor knn演算法 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。所選擇的鄰居都是已經正確分類的物件。如果k 3,則綠色圓形的類別與紅色三角形相同 如果k 5,則綠色圓形的類別與藍色正方形相同 the...