Python實現KNN演算法 iris資料集

2021-08-21 11:18:32 字數 2119 閱讀 8158

在本文中,通過python實現knn演算法,而非簡單的呼叫sklearn庫,並通過iris鳶尾花資料集進行訓練和測試。

詳情參見以下**:

if__name__ =='__main__':

trainx, trainy, testx, testy=loadsplitdataset()

prey=knn(testx)

evaluateknn()

# 和切分資料集為訓練集和測試集

# 訓練集:trainx、trainy;

# 測試集:testx、testy;

defloadsplitdataset():

#隨機生成訓練集和測試集 不能確定比例

iris = datasets.load_iris()

randarray=np.random.randint(2,size=len(iris.data))

print(len(randarray))

trainx = iris.data[randarray==0]

trainy=iris.target[randarray==0]

testx = iris.data[randarray == 1]

testy=iris.target[randarray == 1]

returntrainx, trainy, testx, testy

def

loadsplitdataset(rate=

0.8):

iris = datasets.load_iris()

#確定訓練集和測試集的比例

shuffleindex=np.random.permutation(

len(iris.data))

trainsize=

int(rate *

len(iris.data))

trainx= iris.data[shuffleindex[:trainsize]]

trainy=iris.target[shuffleindex[:trainsize]]

testx= iris.data[shuffleindex[trainsize:]]

testy = iris.target[shuffleindex[trainsize:]]

return

trainx, trainy, testx, testy

#knn演算法實現

#testx為測試樣本及

# k為鄰近的樣本點數量

defknn(testx,k=5):

predy =

forxintestx:

# 計算樣本點訓練集的歐氏距離

distance = [np.sqrt(np.sum(np.power(x_train - x, 2)))forx_trainintrainx]

# 從小到大排序,每個數的索引位置

indexsort = np.argsort(distance)

# 獲得距離樣本點最近的k個點的標記值y

neark_y = [trainy[i]foriinindexsort[:k]]

# 統計鄰近k個點標記值的數量

cnty = counter(neark_y)

# 返回標記值最多的那個標記

y_predict = cnty.most_common(1)[0][0]

returnpredy

#計算測試的準確率

defevaluateknn():

cnt = np.sum(prey == testy)

acc=np.divide(cnt,len(testx))

print("the accurate of knn:",round(acc,4))

Python實現KNN演算法

from numpy import import operator def creatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 lables a a b b return group,lables def classify0 inx,dataset,...

python實現knn演算法

importnumpyasnp importoperator defcreatedataset group np.array 1.0 1.1 1.0 1.0 0.0 0.0 0.0 0.1 labels a a b b returngroup,labels 分類演算法 inx待分類的點 defcla...

python實現KNN演算法

具體 如下 import numpy as np import matplotlib.pyplot as plt class myknn def init self,k self.k k def compute self,x train,y train,x test dist i 0 計算歐式距離 ...