K鄰近演算法

2021-09-29 16:41:59 字數 2589 閱讀 2568

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...