機器學習之knn演算法,python例項,鳶尾花資料

2021-10-08 00:19:46 字數 3577 閱讀 6821

**

// 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 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...