機器學習(一)k 進鄰演算法

2021-09-06 08:15:45 字數 2402 閱讀 1188

概述

原理

存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前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...