knn鄰近演算法

2021-08-11 18:18:23 字數 2357 閱讀 9029

knn演算法即為k鄰近演算法,是一種監督式的機器學習演算法,且它是用來進行分類的。注意此演算法需要和

k-means演算法進行區別,因為都有個k。

工作原理是:存在乙個樣本資料集合,也稱作訓練樣本集,且樣本集中每個資料都存在標籤,知道樣本集中與所屬分類的對應關係。輸入沒有定義的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。一般而言,只選取樣本資料集中前k個最相似的資料,然後選擇此k個最相似資料中出現次數最多的分類,作為新資料的分類。因為用於訓練的資料已經具有分類,此處稱為標籤,所以稱為「監督式學習」。

那麼計算最近鄰的方法一般採用歐式距離方法,也就是直接計算兩個特徵之間的距離,即:

a = (a1,a2),b=(b1,b2),distance = [(a1 - b1)^2+(a2-b2)^2]^0.5,也就是兩個距離的平方和的平方根。非常好用,然後將需要進行分類的資料與所有已經帶有標籤的訓練資料一一進行距離計算,挑選出前k個距離最小的點作為與需要對測試集進行分類的點的最相似的k個資料。那麼對於knn演算法的核心實現,用python**如下所示:

def knnclassify(inx,dataset,labels,k):

#inx輸入的分類向量,dataset是輸入的訓練樣本集,labels標籤向量,k是選擇的最近鄰居的數目

datasetsize = dataset.shape[0] #shape[0]表示的是行數

#print dataset.shape[1],dataset.shape[0] #shape[1]表示的是列數

diffmat = tile(inx,(datasetsize,1)) - dataset #tile用於將陣列往x,y...軸擴充套件,比如這裡因為datasetsize為4,所以tile(inx,(datasetsize,1))表示將inx先往x軸擴充套件一倍,也就是沒擴充套件,然後再往y軸擴充套件4倍,得到如下的矩陣[[0,0],[0,0],[0,0],[0,0]]

sqdiffmat = diffmat**2 #將每一行陣列對應的差值進行平方處理

sqdistances = sqdiffmat.sum(axis=1) #將每一行中的差值平方後進行求和處理

distances = sqdistances**0.5 #再將每一行的平方和取平方根

#print distances

sorteddistindicies = distances.argsort() #對陣列按從小到大進行排序,返回排完序後的陣列元素的位置下標

classcount={}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

#print voteilabel

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

#print classcount.get(voteilabel,0)

#print classcount[voteilabel]

#print classcount

sortedclasscount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=true) #根據classcount的值進行排序,按照從小到大排,然後再逆序輸出

#print sortedclasscount

return sortedclasscount[0][0] #表示取字典中的第一對鍵值對的值

上述**執行後輸出的是輸入的inx的**分類,上述**是knn的核心,需要能夠

默寫!

但是在呼叫上述knn演算法的python介面時,還需要對相關的訓練資料進行預處理,主要包括要將普通文字儲存的資料轉化成matrix格式,即以矩陣的形式儲存;然後是對資料進行規範化處理,某些不存在的資料需要用拉格朗日插值法進行新增;同時最主要的是需要將所有特徵(屬性)的量綱統一,能夠保證所有屬性在訓練的時候的權重是一樣的,而不會因為某些特徵的值比較大,而引起因為量綱不統一所帶來的問題。一般我們用

newvalue = (oldvalue - min) / (max - min)

使得所有特徵值均在0-1之間,保證所有特徵的權重一致。然後就可以對測試資料進行分類了,同時一般用原始資料的一部分作為訓練資料,另一部分作為測試資料,然後用測試資料用訓練模型進行分類,分完類後的結果和測試資料的真實結果進行對比,稱之為錯誤率。在《機器學習實戰》一書中,第二章中的關於約會資料的分類處理的模型正好是對knn演算法進行歸納的乙個亮點。

KNN鄰近演算法

k near neighbor k個最近的鄰居,即每個樣本都可以用它最接近的k個鄰居來代表。演算法的思想是 樣本集中的某一樣本與資料集中的其他k個樣本最相似,如果這k個樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。1 計算已知類別資料集中的點與當前點之間的距離 2 按距離遞增次序排序 3 選...

KNN演算法 鄰近演算法

knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單 計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下 電影名稱 打鬥次數 接吻次數 電影型別 california ...

KNN演算法(鄰近演算法)

鄰近演算法 或者說k最近鄰 knn,k nearestneighbor 分類演算法是 資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn演算法的核心思想 是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類...