原生python實現knn演算法,用鳶尾花資料集

2021-09-28 15:35:36 字數 2448 閱讀 5969

一、題目說明

原生python實現knn演算法,用鳶尾花資料集

二、程式分析

讀取資料

withopen

('iris.csv'

,'r'

)asfile:

#csv

裡的函式,以字典形式讀取檔案

reader=csv.dictreader(file)#推導

datas= [rowforrowinreader]

資料分組

random.shuffle(datas)

test_set=datas[0:

106]

train_set=datas[

106:]

計算距離函式

defdistance(d1

,d2):

res =

0forkeyin(

"sepal length"

,"sepal width"

,"petal length"   

,"petal width"

):        res += (

float

(d1[key])-

float

(d2[key]))**

2returnres**

0.5

總函式

k = 

3defknn(data):

res = [

fortrainintrain_set

]sorted

(res

,key

=lambdaitem:item[

'distance'

])   

#取前k個值

res2 = res[

0:k]

#加權平均(result是最終判據)

result =

#總長度

sum_dist =

0forr1inres2:

sum_dist += r1[

'distance'

]   

#逐個分類加和

forr2inres2:

result[r2[

"result"

]] +=

1-r2[

"distance"

]/sum_dist

print

(result)

ifresult[

'iris-setosa'

] > result[

'iris-versicolor'

]andresult[

'iris-setosa'

]> result[

'iris-virginica'

]:return'iris-setosa'

elifresult[

'iris-versicolor'

] > result[

'iris-setosa'

]andresult[

'iris-versicolor'

]>result[

'iris-virginica'

]:return'iris-versicolor'

else:

return'iris-virginica'

correct =

0fortestintest_set:

result = test[

'species'

]    result2 = knn(test)

ifresult == result2:

correct = correct + 1;

print

(str

(correct/

len(test_set)))

三、演算法構造

四、除錯

讀取資料

計算距離

主函式五、測試

第二次執行:

原生python實現knn演算法

1 knn演算法的思想 就是在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料 現次數最多的那個分類。2 演算法設計 根據knn演算法的思想可以得到knn演算法的步驟為 1 計算測...

原生Python實現KNN分類演算法

原生python實現knn分類演算法,用鳶尾花資料集。knn是一種聚類演算法,用於對新的資料點進行分類。對於乙個只知道特徵的資料點,首先計算它和已知訓練集所有點的距離,然後選擇最近的k個點進行 投票表決 來決定所屬型別。因為訓練集的標籤是已知的,所以根據 投票 結果,判定該點的型別為 票數 最多的類...

原生python實現knn分類演算法

一 題目 原生python實現knn分類演算法 二 演算法設計 k 近鄰 k nearset neighbor,簡稱 knn 學習是一種常用的監督學習方法,其工作機制非常簡單 給定測試樣本,基於某種距離度量找出訓練集中與其最靠近的 k 個訓練樣本,然後基於這 k 個 鄰居 的資訊來進行觀測。通常,在...