knn演算法,又名k鄰近演算法,簡單的來說,就是通過測量不同特徵值之間距離的方法進行分類。
演算法的原理十分簡單,舉個例子,假設我們要通過」打鬥鏡頭數「和接吻鏡頭數」這兩個特徵把電影分為愛情片和動作片,我們可以用一下步驟。
為使**重複使用方便,我們將運算過程寫在函式中,再將函式放置於python模組內。而非寫在指令碼中。
**如下。主要是根據書改的,修改了變數的名稱使可讀性增加。
之後,在命令列中輸入from numpy import *
import operator
def classify(inx,data,labels,k):
datasize = data.shape[0]
diffmat = tile(inx,(datasize,1))-data
sqdiff=diffmat ** 2
sqdist=sqdiff.sum(axis=1)
dists = sqdist**0.5
sorteddist = argsort(dists)
classcount={}
for i in range(k):
votelabel=labels[sorteddist[i]]
classcount[votelabel]=classcount.get(votelabel,0)+1
sortedcount=sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)
return sortedcount[0][0]
def filetomat(filename):
fr=open(filename)
lines = fr.readlines()
linescount=len(lines)
res=zeros((linescount,3))
labels=
index = 0
for line in lines:
line = line.strip()
listfromline = line.split('\t')
res[index,:] = listfromline[0:3]
index += 1
return res,labels
def norm(data):
mins = data.min(0)
maxs = data.max(0)
ranges = maxs-mins
res = zeros(shape(data))
m=data.shape[0]
res=data-tile(mins,(m,1))
res=res/tile(ranges,(m,1))
return res,ranges,mins
def test():
horatio = 0.1
data,labels = filetomat('datingtestset2.txt')
normmat,ranges,mins = norm(data)
m = normmat.shape[0]
numtests = int(m*horatio)
errorcount = 0.0
for i in range(numtests):
classifyres = classify(normmat[i,:],normmat[numtests:m,:],labels[numtests:m],3)
print("分類結果:",classifyres,"正確答案:",labels[i])
if (classifyres != labels[i]):
errorcount+=1.0
print("平均出錯率:",errorcount/float(numtests))
即可對**進行測試。import knn
knn.test()
機器學習之KNN演算法
在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...
機器學習演算法之KNN
物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...
機器學習之kNN演算法
knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...