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演算法無需訓練,很容易實現...