**
// an highlighted block
import numpy as np
import matplotlib.pyplot as plt
import knn
#讀取和處理資料,這裡將資料設定成文字檔案,將資料讀出來形成乙個序列
def file2matrix
(filename)
: fr =
open
(filename)
numberoflines =
len(fr.
readlines()
)
returnmat = np.
zeros
((numberoflines,4)
)
classlabelvector =
fr =
open
(filename)
index =
0for line in fr.
readlines()
: line = line.
strip
()
listfromline = line.
split
('\t'
)
returnmat[index,:]
= listfromline[1:
5]if listfromline[0]
=='1'
: classlabelvector.(1
) elif listfromline[0]
=='2'
: classlabelvector.(2
) elif listfromline[0]
=='3'
: classlabelvector.(3
) index +=
1return returnmat,classlabelvector
datingdatamat,datinglabels=
file2matrix
('iris.txt'
)print
(datingdatamat)
print
(datinglabels)
print
(datingdatamat)
#測試集中將資料分成兩份,比例是80
%和20%m=
0.8datasize=datingdatamat.shape[0]
print
(datasize)
trainsize=
int(m*datasize)
testsize=
int((1
-m)*datasize)
print
(trainsize,testsize)
#knn演算法函式
def knn
(inx,dataset,labels,k)
: dist=((
(dataset-inx)**2
).sum(1)
)**0.5 sorteddist=dist.
argsort()
classcount=
for i in
range
(k):
votelabel = labels[sorteddist[i]
] classcount[votelabel]
=classcount.
get(votelabel,0)
+1maxtype=
0 maxcount=-1
for key,value in classcount.
items()
:if value > maxcount:
maxtype = key
maxcount = value
return maxtype
#五折驗證計算出錯率k=5
error=
0for i in
range
(testsize)
: result=
knn(datingdatamat[trainsize+i-1,
:],datingdatamat[
0:trainsize,:]
,datinglabels[
0:trainsize]
,k)if result!=datinglabels[trainsize+i-1]
: error=error+
1print
("error:"
,error/testsize)
**執行結果是:
// an highlighted block[[
5.13.5
1.40.2]……
[5.9
3.5.1
1.8]][
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
1,1,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
2,2,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3,
3,3]
[[5.13.5
1.40.2]……
[5.9
3.5.1
1.8]
]150
12029
error:
0.20689655172413793
機器學習之KNN演算法
在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...
機器學習演算法之KNN
物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...
機器學習之kNN演算法
knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...