KNN應用及演算法簡單實現

2021-08-15 16:17:20 字數 3043 閱讀 1386

鳶尾[yu

ān wěi]

(學名:

iris tectorum maxim. 

)iris

資料集,統計學常用資料集

fromsklearn importneighbors

fromsklearn importdatasets

knn = neighbors.kneighborsclassifier()

iris = datasets.load_iris()

print(iris)

knn.fit(iris.data, iris.target)

predictedlabel = knn.predict([[0.1,0.2,0.3,0.4]])

print(predictedlabel)

自己程式設計實現knn

演算法(根據網上**修改,已新增權重,即便這樣,還是有

90%的情況,演算法確實不怎麼好)

--key,需要說明的是,資料點有可能是重複的,即

dist為0

,這樣就不能作為權重了,但同時也可以

break

(找到完全匹配)

importcsv

importmath

importrandom

importoperator

defloaddataset

(filename, split, trainingset=, testset=):

withopen(filename, 'r') ascsvfile:

lines = csv.reader(csvfile)

dataset = list(lines)

forx inrange(len(dataset) - 1):

fory inrange(4):

dataset[x][y] = float(dataset[x][y])

ifrandom.random() < split:

else:

defeuclideandistance

(instance1, instance2, length):

distance = 0

forx inrange(length):

distance += pow((instance1[x] - instance2[x]), 2)

returnmath.sqrt(distance)

defgetneighbors

(trainingset, testinstance, k):

distances = 

length = len(testinstance) - 1

forx inrange(len(trainingset)):

dist = euclideandistance(testinstance, trainingset[x], length)

distances.sort(key=operator.itemgetter(1))

neighbors = 

forx inrange(k):

returnneighbors

defgetresponse

(neighbors):

classvotes = {}

forx inrange(len(neighbors)):

species = neighbors[x][0][-1]

dist = neighbors[x][1]

ifdist == 0:

returnspecies

ifspecies inclassvotes:

classvotes[species] += 1/ dist

else:

classvotes[species] = 1/ dist

sortedvotes = sorted(classvotes.items(), key=operator.itemgetter(1), reverse=true)

returnsortedvotes[0][0]

defgetaccuracy

(testset, predictions):

correct = 0

forx inrange(len(testset)):

iftestset[x][-1] == predictions[x]:

correct += 1

return(correct / float(len(testset))) * 100.0

defmain

():trainingset = 

testset = 

split = 0.67

# 2/3訓練集,1/3測試集

loaddataset(r'd:\onedrive\data\[python]\iris.txt', split, trainingset, testset)

print('train set: '+ repr(len(trainingset)))

print('test set: '+ repr(len(testset)))

predictions = 

k = 7

forx inrange(len(testset)):

neighbors = getneighbors(trainingset, testset[x], k)

result = getresponse(neighbors)

print('>predicted='+ repr(result) + ', actual='+ repr(testset[x][-1]))

print('predictions: '+ repr(predictions))

accuracy = getaccuracy(testset, predictions)

print('accuracy: '+ repr(accuracy) + '%')

if__name__ == '__main__':

main()

iris資料

sample

(這是從

r中取的,去掉第一列,空格從長到短批量替換為英文逗號)

:5.1,3.5,1.4,0.2,setosa

KNN(一) 簡單KNN原理及實現

原文 1.knn演算法介紹 鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法可以說是整個資料探勘分類技術中最簡單的方法了。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用她最接近的k個鄰居來代表。knn演算法的核心思想是如果乙個樣本在特徵空間中的k個最...

KNN(一) 簡單KNN原理及實現

原文 1.knn演算法介紹 鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法可以說是整個資料探勘分類技術中最簡單的方法了。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用她最接近的k個鄰居來代表。knn演算法的核心思想是如果乙個樣本在特徵空間中的k個最...

簡述KNN演算法及實現

numpy中shape 0 返回陣列的行數,shape 1 返回列數 datasetsize dataset.shape 0 將intx在橫向重複datasetsize次,縱向重複1次 例如intx 1,2 1,2 1,2 1,2 1,2 便於後面計算 diffmat np.tile intx,da...