依照歐氏距離計算公式計算測試資料與訓練集的距離
按照距離公升序排序,選取距離最小的k個點
確定前k個點所在類別的出現頻率
返回前k個點出現頻率最高的類作為測試資料的**分類
import operator
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris_dataset = load_iris(
)x_train,x_test,y_train,y_test = train_test_split(iris_dataset[
'data'
],iris_dataset[
'target'
],random_state =0)
defclassify0
(inx, dataset, labels, k)
:#numpy函式shape[0]返回dataset的行數
datasetsize = dataset.shape[0]
#print(datasetsize)
#在列向量方向上重複inx共1次(橫向),行向量方向上重複inx共datasetsize次(縱向)
diffmat = np.tile(inx,
(datasetsize,1)
)- dataset
#二維特徵相減後平方
sqdiffmat = diffmat**
2#sum()所有元素相加,sum(0)列相加,sum(1)行相加
sqdistances = sqdiffmat.
sum(axis=1)
#開方,計算出距離
#distances = np.sqrt(np.sum((group - inx)**2))
distances = sqdistances**
0.5#返回distances中元素從小到大排序後的索引值
sorteddistindices = distances.argsort(
)#定乙個記錄類別次數的字典
classcount =
for i in
range
(k):
#取出前k個元素的類別
voteilabel = labels[sorteddistindices[i]
]#dict.get(key,default=none),字典的get()方法,返回指定鍵的值,如果值不在字典中返回預設值。
#計算類別次數
classcount[voteilabel]
= classcount.get(voteilabel,0)
+1#key=operator.itemgetter(1)根據字典的值進行排序
#reverse降序排序字典
sortedclasscount =
sorted
(classcount.items(
),key=operator.itemgetter(1)
,reverse=
true
)#返回次數最多的類別,即所要分類的類別
return sortedclasscount[0]
[0]if __name__ ==
'__main__'
: group = x_train
print
(type
(group)
) labels = y_train
print
(type
(labels)
) test = x_test.tolist(
) test_get =
[classify0(x,group,labels,3)
for x in test]
print
("**:"
,test_get)
# print("predicted target name : {}".format(iris_dataset['target_names'][test_get]))
print
("測試集:"
,y_test.tolist())
print
("test set score:"
.format
(np.mean(test_get ==y_test)
))
本次knn演算法計算距離,通過統計與測試集資料的距離和k值實現鳶尾花的分類,對於np陣列轉list列表使用tolist()函式實現,匯入scikit-learn鳶尾花資料集,x_train,y_train作為訓練集引數和標籤,計算測試集-y_test求出分類結果。
KNN實現鳶尾花分類
將其按照7 3的比例劃分為訓練集和測試集。前4列為特徵,第5列為類別,setosa 視為1,versicolor 視為2,virginica 視為3 測試集順序略有調整。最簡單最初級的分類器是將全部的訓練資料所對應的類別都記錄下來,當測試物件的屬性和某個訓練物件的屬性完全匹配時,便可以對其進行分類。...
KNN演算法進行鳶尾花分類
import numpy as np import matplotlib.pylab as pyb matplotlib inline from sklearn.neighbors import kneighborsclassifier from sklearn import datasets fr...
Python Iris鳶尾花資料Knn分類
首先匯入sklearn庫中自帶iris資料 三類 0 山鳶尾花 1 變色鳶尾花 2 維吉尼亞鳶尾花 訓練集112個,測試集38個。匯入iris資料,x資料,y標籤 iris datasets.load iris x iris.data y iris.target x train,x test,y t...