機器學習實戰之KNN演算法

2021-09-26 04:01:34 字數 1528 閱讀 7207

1:knn分類演算法介紹

演算法實現原理:存在乙個樣本資料集,將需要分類的輸入值與樣本資料集計算歐式距離,將歐式距離由小到大進行排序,取前k次最小距離對應的樣本資料集,對該樣本資料集的類別進行統計,其**現次數最多的類別為輸入值的預判類別。

歐式距離計算公式:

假設a點座標為(x1,y1),b點座標為(x2,y2)

則a點與b點的歐式距離為:

2:python實現knn演算法程式

def classify0(inx,dataset,labels,k): #inx為輸入資料,dataset為樣本資料集,labels為樣本資料集標籤,k為取前k個歐式距離最近樣本

datasetsize = dataset.shape[0] #輸出矩陣行數,括號中為1,則輸出列數

diffmat = tile(inx, (datasetsize,1)) - dataset #tile命令將inx複製datasetsize行,1列

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1) #矩陣內部元素求和

distances = sqdistances**0.5 #求取根號值

sorteddistindicies = distances.argsort() #將元素由小到大進行排序,輸出排序後數值所在原始矩陣中的位置

classcount = {}

for i in range(3):

voteilabel = labels[sorteddistindicies[i]] #提取最小距離所在的類別標誌

classcount[voteilabel] = classcount.get(voteilabel,0)+1 #計算類別出現次數

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

return sortedclasscount[0][0]

3:案例推算

inx = [0,0]

dataset = [[1,1.1],[1,1],[0,0],[0,0.1]]

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

k = 3

則:datasetsize = 4

diffmat = [[0,0],[0,0],[0,0],[0,0]]-[[1,1.1],[1,1],[0,0],[0,0.1]]

=[[-1,-1.1],[-1,-1],[0,0],[0,-1]]

sqdiffmat =[[1,1.21],[1,1],[0,0],[0,0.01]]

sqdistances = [2.21,2,0,0.01]

distances = [1.49,1.41,0,0.1]

sorteddistindicies = [2,3,1,0]

sortedclasscount[0][0] = b

初次寫部落格,歡迎各位大佬提意見

機器學習實戰之knn演算法

程式 author xiaoyun from numpy import import operator def createdataset group array 1.0,0.9 1.0,1.0 0.1,0.2 0.0,0.1 labels a a b b return group,labels d...

《機器學習實戰》之knn演算法

買了王斌老師翻譯的 機器學習實戰 一書,裡面全是乾貨,既可以練python,又可以學習機器學習演算法知識,挺不錯的,學習一些東西這裡分享下。k 近鄰演算法 knn 它的核心思想就一句話,如果兩個東西各方面屬性都很相似,那麼這兩個東西屬於同一類。k的意思是有很多東西和你要判斷的東西相似 稱作x 那麼找...

機器學習實戰之knn演算法pandas

機器學習實戰之knn演算法pandas,供大家參考,具體內容如下 開始學習機器學習實戰這本書,打算看完了再回頭看 周志華的 機器學習。機器學習實戰的 都是用numpy寫的,有些麻煩,所以考慮用pandas來實現 也能回顧之前學的 用python進行資料分析。感覺目前章節的測試方法太渣,留著以後學了更...