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