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進行資料分析。感覺目前章節的測試方法太渣,留著以後學了更...