鳶尾[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...