機器學習實戰筆記 KNN近鄰演算法

2021-08-22 13:42:57 字數 1788 閱讀 4298

knn近鄰演算法偽**:

對未知類別屬性的資料集中的每個點依次執行以下操作: 

(1) 計算已知類別資料集中的點與當前點之間的距離; 

(2) 按照距離遞增次序排序; 

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

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

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

import tensorflow as tf

import operator

#構造資料集

def createdataset():

group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

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

return group,labels

group,labels=createdataset()

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

datasetsize=dataset.shape[0]

#numpy.tile(a,reps)

#tile共有2個引數,a指待輸入陣列,reps則決定a重複的次數。整個函式用於重複陣列a來構建新的陣列。

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

sqdiffmat=diffmat**2

sqdistances=sqdiffmat.sum(axis=1)

distances=sqdistances**0.5

sorteddistindicies=distances.argsort()#返回陣列從小到大的索引值

#例如按照資料[11,22,33,44]依次計算距離的,然後根據距離大小排序,如3下標代表的資料最小,然後

#是2,1,0,返回的索引值sorteddistindicies=[3,2,1,0]對應的值分別為[44,33,22,11]

classcount={}

for i in range(k):

voteilabel=labels[sorteddistindicies[i]]#下標對應著相應的標籤

#初始化classcount = {}時,此時輸入classcount,輸出為: classcount = {}

#classcount.get()返回字典classcount中voteilabel元素對應的值

#當第一次遇到新的label時,將新的label新增到字典classcount,並初始化其對應數值為0

#然後+1,即該label已經出現過一次,此時輸入classcount,輸出為:classcount =

#當第二次遇到同乙個label時,classcount.get(voteilabel,0)返回對應的數值(此時括號內的0不起作

#用,因為已經初始化過了),然後+1,此時輸入classcount,輸出為:classcount =

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

#iteritems()將字典中的項按列表返回

#key,按照key給的關鍵字進行排序

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

reverse=true)

print("sorted",sortedclasscount[0][0])

classify0([0,0],group,labels,3)

classcount的輸出值是

機器學習實戰 KNN演算法(K近鄰)

演算法實現 演算法應用舉例 k近鄰演算法是機器學習最簡單的演算法之一,也是機器學習的初步,其主要通過大量的資料分析,判斷一組未知資料和各資料的距離,從而對一組未知資料進行相應的歸類。而所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。所以knn演算法並不是十分完...

《機器學習實戰》學習筆記一 k 近鄰演算法(kNN)

k 近鄰演算法 以下簡稱knn 是分類演算法中比較簡單的一種,knn演算法的一般流程為 1 收集資料,如從檔案中匯入資料 2 準備資料,將資料轉化為適合計算的格式,如矩陣的形式 3 分析資料 4 測試資料,計算分類的錯誤率 5 應用演算法,給定輸入,得到相應的輸出,指出改資料屬於哪一種分類。knn演...

《機器學習實戰》 k近鄰分類演算法kNN

knn全稱為k nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸 分類問題的輸出為 找出k個和要 物件最近鄰的樣本,這k個樣本中,大多數 屬於哪一類即為 物件的分類標籤。回歸問題的輸出為 找出k個和回...