K 臨近演算法學習總結

2021-08-20 04:15:01 字數 1715 閱讀 3933

1演算法簡介:

按照距離遞增次序排序;

選取與當前點距離最小的k個點;

確定前k個點所在類別的出現頻率;

返回前k個點所出現頻率最高的類別作為當前點的**分類

import numpy as np

import operator

def createdataset():

#四組二維特徵

group = np.array([[0,1],[0.3,3],[3.1,0],[3.2,1]])

#四組特徵的標籤

labels = ['a','a','b','b']

return group, labels

2.2 k-臨近演算法(分類器)

--計算待測點與每乙個樣本點的距離,根據距離從小到大進行排序,選出距離最近的k個點中出現次數最多的標籤,作為待測點的標籤:

parameters:

inx - 待分類的資料

dataset - 訓練集

labes - 分類標籤

k - knn演算法引數,選擇距離最小的k個點

returns:

sortedclasscount[0][0] - 分類結果

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

datasetsize = dataset.shape[0]

#在列向量方向上重複inx共1次(橫向),行向量方向上重複inx共datasetsize次(縱向)

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

sqdiffmat = diffmat**2

#sum(1)行相加

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5

#返回distances中元素從小到大排序後的索引值

sorteddistindices = distances.argsort()

classcount = {}

for i in range(k):

voteilabel = labels[sorteddistindices[i]]

#計算類別次數

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

#reverse降序排序字典

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

#返回次數最多的類別,即所要分類的類別

return sortedclasscount[0][0]

2.3 測試分類器是否構建成功

if __name__ == '__main__':

#建立資料集

group, labels = createdataset()

#測試集

test = [4,0]

test_class = classify0(test, group, labels, 3)

print(test_class)

執行結果如下:

結果顯示與預期**的類別一致。

機器學習 01 K 臨近演算法學習

k nearest neighbor演算法又叫knn演算法,這個演算法是機器學習裡面乙個比較經典的演算法,總體來說knn演算法是相對比較容易理解的演算法。其中的k表示最接近自己的k個資料樣本。knn演算法和k means演算法不同的是,k means演算法用來聚類,用來判斷哪些東西是乙個比較相近的型...

K臨近演算法

k臨近演算法 k nearest neighbor,knn 是最簡單的監督學習分類演算法之一。有之一嗎?對於乙個應用樣本點,k臨近演算法尋找距它最近的k個訓練樣本點即k個nearest neighbor。若在k個鄰居中屬於某一類別的最多,則認為應用樣本點也屬於該類別。knn演算法無需訓練,很容易實現...

K臨近演算法

k臨近演算法 k nearest neighbor,knn 是最簡單的監督學習分類演算法之一。有之一嗎?對於乙個應用樣本點,k臨近演算法尋找距它最近的k個訓練樣本點即k個nearest neighbor。若在k個鄰居中屬於某一類別的最多,則認為應用樣本點也屬於該類別。knn演算法無需訓練,很容易實現...