概述
原理
存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。
步驟
計算已知類別資料集中的點與當前點之間的距離;
按照距離遞增次序排序;
選取與當前點距離最小的k個點;
確定前k個點所在類別的出現頻率;
返回前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]
注意事項資料要做歸一化,要不其中一項的影響會特別大
比如距離的範圍0到5000,年齡範圍0到100,在算距離的時候,距離這個特徵產生的影響遠遠比年齡大,導致年齡這個特徵不起作用,正確做法是把所有特徵變為【0,1】之間,python**如下
def autonorm(dataset):
minvals = dataset.min(0)
maxvals = dataset.max(0)
ranges = maxvals - minvals
normdataset = zeros(shape(dataset))
m = dataset.shape[0]
normdataset = dataset - tile(minvals, (m,1))
normdataset = normdataset/tile(ranges, (m,1)) #element wise divide
return normdataset, ranges, minvals
簡單例子
判斷乙個電影是愛情片還是武打片,取兩個特徵打鬥鏡頭和接吻鏡頭,由於這兩個特徵是否歸一化影響不大,所以這裡忽略歸一化,有了這四個訓練集,現在測試資料有一部電影打鬥鏡頭101次,接吻鏡頭20次,是什麼型別的電影
通過計算,我們可以得到如下結果:
(101,20)->動作片(108,5)的距離約為16.55
(101,20)->動作片(115,8)的距離約為18.44
(101,20)->愛情片(5,89)的距離約為118.22
(101,20)->愛情片(1,101)的距離約為128.69
通過計算可知,電影到動作片 (108,5)的距離最近,為16.55。如果演算法直接根據這個結果,判斷該紅色圓點標記的電影為動作片,這個演算法就是最近鄰演算法,而非k-近鄰演算法。k-近鄰演算法,我們假設k=3,也就是取距離最近前三個的最大值作為其結果,最近的前三個為
動作片(108,5)的距離約為16.55
動作片(115,8)的距離約為18.44
愛情片(5,89)的距離約為118.22
機器學習 3(k 進鄰演算法簡介)
先簡單介紹一下k 進鄰演算法 採用測量不同特徵值之間的距離方法進行分類,ok,它是屬於監督學習了 優點 精度高,對異常值不敏感,無資料輸入假定 缺點 計算複雜度高,空間複雜度高 適用資料範圍 數值型和標稱型 在介紹這個演算法之前,先介紹一點基礎的數學概念,這個是會在後面用到的,我這裡就盡量用白話給大...
機器學習演算法一 k 近鄰演算法(1)
採用測量不同特徵值之間的距離方法進行分類。knn工作原理 訓練樣本集中每個資料有乙個一一對應的所屬分類的標籤。需要分類的新資料沒有標籤,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後將樣本集中與其特徵最相似 最近鄰 的資料標籤作為新資料的標籤。一般來說,我們選擇樣本集中前k個最相似的資料 ...
機器學習實戰 k 臨近演算法(一)
工作原理 存在乙個樣本資料集合,也稱為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最鄰近 的分類標籤。一般來說,我們只選擇樣本資料集中前k...