K 近鄰演算法

2021-07-09 23:27:15 字數 1294 閱讀 3027

k-近鄰演算法採用測量不同特徵值之間的距離方法進行分類。

優點:精度高、對異常值不敏感、無資料輸入假定

缺點:計算複雜度高、空間複雜度高

適用資料範圍:數值型和標稱型

工作原理:存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤, 即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。

對未知類別屬性的資料集中的每個點依次執行以下操作:

(1)計算已知類別資料集中的點與當前點之間的距離;

(2)按照距離遞增次序排序;

(3)選取與當前點距離最小的k個點;

(4)確定前k個點所在類別的出現頻率;

(5)返回前k個點出現頻率最高的類別作為當前點的**分析。

程式清單如下:

def

classify0

(inx, dataset, labels, k):

datasetsize=dataset.shape[0]

diffmat=tile(inx, (datasetsize,1))-dataset

sqdiffmat=diffmat**2

sqdiffmat=diffmat**2

sqdistances=sqdiffmat.sum(axis=1)

distances=sqdistances**0.5

sorteddistindicies=distances.argsort()

classcount={}

for i in range(k):

voteilabel=label[sorteddistindicies[i]]

classcount[voteilabel]=classcount.get(voteilabel,0)

+1sortedclasscount=sorted(classcount.iteritems(),

key=operator.itemgetter(1),reverse=true)

return sortedclasscount[0][0]

classify0()函式有4個輸入引數:用於分類的輸入向量是inx,輸入的訓練樣本集為dataset,標籤向量為labels,最後的引數k表示用於選擇最近鄰居的數目,其中標籤向量的元素數目和矩陣dataset的行數相同。

k 近鄰演算法

此文章參考機器學習實戰一書,具體的理論知識可以參考該書。本文的初衷只是為了做乙個複習,將學過的知識加以整理,其中不免有一定的錯誤。2.k 近鄰演算法的原理介紹 k 近鄰演算法通過測量不同的特徵值之間的距離進行分類。它的工作原理如下 存在乙個樣本的資料集合,也成為訓練樣本集合。並且樣本集中的每個資料都...

K 近鄰演算法

首先,我們將 k 近鄰演算法的基本理論 其次我們將使用python從文字檔案中匯入並解析資料 再次,討論當存在許多資料 的時,如何避免計算距離時可能碰到的一些常見錯誤 最後,利用實際的例子講解如何使用k 近鄰演算法改進約會 1.1 knn演算法 工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且...

K 近鄰演算法

k 近鄰演算法 有點 精度高,對異常值不敏感,無資料輸入假定。缺點 計算複雜度高,空間複雜度高。使用範圍 數值型和標稱型。python from numpy import def createdataset group array 1.0,1.1 1.0,1.0 0.0,0.0 0.0,0.1 la...