演算法1 k 近鄰

2021-07-04 11:39:19 字數 2504 閱讀 6615

簡單地說,k-近鄰演算法採用測量不同特徵值之間的距離方法進行分類,屬於監督學習。

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

演算法的一半流程:

核心**:

def

classify0

(inx, dataset, labels, k):

datasetsize = dataset.shape[0]

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

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5

sorteddistindicies = distances.argsort()

classcount={}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

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

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)

return sortedclasscount[0][0]

解析

4個輸入引數:用於分類的輸入向量inx,訓練樣本集dataset,標籤向量labels,用於選擇最近鄰的數目k

datasetsize = dataset.shape[0]這一句使用到了numpyshape函式,返回矩陣/陣列的不同維數的長度,第乙個元素(shape[0])表示第一維的長度,亦即行數,可參考numpy.shape;

diffmat = tile(inx, (datasetsize,1)) - dataset這裡用到了numpy中的tile(a,reps)函式,用於擴充a,具體用法可以參考numpy.tile;

sqdiffmat = diffmat**2求平方;

sqdistances = sqdiffmat.sum(axis=1)求和可參考numpy.sum;

distances = sqdistances**0.5求開方,上面的幾步是用來計算距離的;

sorteddistindicies = distances.argsort()使用了argsort()函式,可以參考:numpy.argsort;

classcount={}這是乙個dict,用於儲存不同標籤出現的次數;

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

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

這裡是選擇距離最小的k個點,sorteddistindicies已經排好序,只需迭代的取前k個樣本點的labels(即標籤),並計算該標籤出現的次數,這裡還用到了dict.get(key, default=none)函式,key就是dict中的鍵voteilabel,如果不存在則返回乙個0並存入dict,如果存在則讀取當前值並+1;

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)這裡使用了sorted()函式sorted(iterable, cmp=none, key=none, reverse=false),iteritems()dict分解為元組列表,operator.itemgetter(1)表示按照第二個元素的次序對元組進行排序,注意sort()的區別,可參考numpy.sort;

機器學習實戰1 K近鄰演算法(KNN)

knn k nearest neighbors 演算法,也叫k最近鄰演算法。主要思想是,如果乙個樣本在特徵空間中的k個最相似 或最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。例如,村里投票建水井,有三個選址a,b和c,所有的人家都投了票,除了李四家。村書記決定找出距李四家最近的6戶...

機器學習實戰 1 K近鄰

1.np.tile array,行重複次數,列重複次數 a np.array 1,2,3 b np.tile a,2,3 b 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 2.array.sum axis 0 1 0 每列求和 1 沒行求和 3.array.argsort ...

機器學習實戰筆記1 K近鄰演算法詳解

最近在看 機器學習實戰 這本書,書中的 都是對某種演算法在對應應用場景的實現,感覺比大學時代的資料結構或者演算法題還要晦澀難懂,只能慢慢學習了,演算法這種東西類似做數學題,要多做多練。k 近鄰演算法乙個典型的應用場景就是在區別電影類別中,比如說根據在電影片段中出現親吻,打 鬥場景來判斷電影是否是愛情...