knn演算法 鳶尾花

2021-09-28 15:33:32 字數 3589 閱讀 6457

knn分類演算法實現鳶尾花**

對鳶尾花利用knn演算法進行分類,利用python的sklean庫極大方便了python的使用,減少了大量**的書寫。knn演算法的**是通過計算歐氏距離來確定**鳶尾花的結果,遍歷所有樣本集,計算待分類樣本與每個樣本的距離,計算並儲存後排序,尋找k個近鄰,最後輸出最小結果即為分類的組。因為對於python語法不盡熟練的原因,在進行編碼過程出現了莫名的bug,並且裡邊有許多不應出現的結構複雜的**。

import numpy as np

import pandas as pd

#匯入sklearn庫

from sklearn.model_selection import train_test_split

class

knn:

# 設定近鄰數

def__init__

(self, k)

: self.n_neighbors = k

# 訓練

deffit

(self, x_train, y_train)

:# 一行代表乙個樣本,y是n行的一維陣列,對應x的標籤

self.xtr = x_train

self.ytr = y_train

# **

defpredict

(self, x_test)

: num_test = x_test.shape[0]

# 確認輸出的結果型別符合輸入的型別

ypred = np.zeros(num_test, dtype=self.ytr.dtype)

# 迴圈每一行,也就是每乙個樣本

for i in

range

(num_test)

:# 計算歐式距離

distances = np.sqrt(np.

sum(np.square(self.xtr - x_test[i,:]

), axis=1)

) min_index= np.argmin(distances)

# 拿到最小距離的索引

ypred[i]

= self.ytr[min_index]

# **樣本的標籤,其實就是跟他最近的訓練資料樣本的標籤

return ypred

if __name__ ==

'__main__'

:# 獲取鳶尾花資料

iris_dataset = pd.read_csv(

"iris.data.csv"

)# 載入特徵和標籤集

x = iris_dataset[

['e_length'

,'e_width'

,'b_length'

,'b_width']]

#花萼長,寬,花瓣長,寬

y = iris_dataset[

'species'

]#0表示setosa;1表示versicolor;2是virginica

# 劃分資料集

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=

0.3, random_state=0)

# 建立knn例項,k為1

knn = knn(1)

# 訓練資料

knn.fit(x_train, y_train)

score=

el=ew=

bl=bw=

# **

for i in

range(1

,5):

e_length =

float

(input

("請輸入進行**的花萼長:"))

e_width =

float

(input

("請輸入進行**的花萼寬:"))

b_length =

float

(input

("請輸入進行**的花瓣長:"))

b_width =

float

(input

("請輸入進行**的花瓣寬:"))

x_new = np.array(

[[e_length, e_width, b_length, b_width]])

print

("x_new.shape:{}"

.format

(x_new.shape)

) prediction = knn.predict(x_new)

print

("prediction:{}"

.format

(prediction)

)if prediction ==0:

print

("prediction target name:setosa"

)'set'

)elif prediction ==1:

print

("prediction target name:versicolour"

)'ver'

)elif prediction ==2:

print

("prediction target name:virginica"

)'vir'

)#列印**結果表

print

("花萼長:"

,end=

'\t'

)print

(el,end=

'\t'

)print

('\n'

)print

("花萼寬"

,end=

'\t'

)print

(ew, end=

'\t'

)print

('\n'

)print

("花瓣長"

,end=

'\t'

)print

(bl, end=

'\t'

)print

('\n'

)print

("花瓣寬"

,end=

'\t'

)print

(bw, end=

'\t'

)print

('\n'

)print

("結果"

,end=

'\t'

)print

(score, end=

'\t'

)print

('\n'

)print

("\nps:**結果0表示setosa;1表示versicolor;2是virginica\n"

)

knn 鳶尾花例子

1.獲取資料集 2.資料基本處理 3.特徵工程 4.機器學習 模型訓練 5.模型評估 from sklearn.datasets import load iris from sklearn.model selection import train test split from sklearn.pr...

鳶尾花KNN演算法的重構

一 作業題目 鳶尾花的knn演算法重構 knn演算法又稱為k近鄰演算法,k的含義是指考慮訓練集中與新資料點最近的任意k個鄰居 比如說,距離新資料點最近的3個或5個鄰居 而不是只考慮距離新資料點最近的那乙個。然後,我們可以利用這些鄰居中數量最多的類分別作出 二 演算法設計 1 knn演算法的原理 如果...

KNN演算法進行鳶尾花分類

import numpy as np import matplotlib.pylab as pyb matplotlib inline from sklearn.neighbors import kneighborsclassifier from sklearn import datasets fr...