4 2 最近鄰規則分類演算法(KNN 應用

2021-07-14 10:10:05 字數 2895 閱讀 3678

1 資料集介紹:

虹膜

150個例項

萼片長度,萼片寬度,花瓣長度,花瓣寬度

(sepal length, sepal width, petal length and petal width)

類別:

iris setosa, iris versicolor, iris virginica.

利用python的機器學習庫sklearn: sklearnexample.py

from sklearn import neighbors

from sklearn import datasets

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

3.手寫knn演算法:

import csv 

import random

import math

import operator

from webbrowser import opera

defloaddataset

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

with open(filename,'rb') as csvfile:

lines=csv.reader(csvfile)

dataset=list(lines)

for x in range(len(dataset)-1):

for y in range(4):

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

if random.random()else:

defeuclideandistance

(testinstance, traininstance, lenght):

distance=0;

for x in range(lenght):

distance+=(testinstance[x]-traininstance[x])**2;

return math.sqrt(distance)

defgetneighbors

(trainingset, testinstance, k):

distances=

lenght=len(testinstance)-1

for x in range(len(trainingset)):

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

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

neighbors=

for x in range(k):

return neighbors

defgetresponse

(neighbors):

classvotes={}

for x in range(len(neighbors)):

response=neighbors[x][-1]

if response in classvotes:

classvotes[response]+=1

else:

classvotes[response]=1

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

return sortedvotes[0][0]

defgetaccuracy

(testset, predictions):

correct=0

for x in range(len(testset)):

if testset[x][-1]==predictions[x]:

correct+=1

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

defmain

(): trainingset=

testset=

loaddataset("irisdata.csv", 0.67, trainingset, testset)

print

"trainingset:",trainingset

print

"testset:",testset

predictions=

k=3for x in range(len(testset)):

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

result=getresponse(neighbors)

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

accuracy=getaccuracy(testset,predictions)

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

if __name__=="__main__":

main()

最近鄰規則演算法(KNN)

最近鄰演算法 knn 是乙個基於例項學習的分類演算法。如果乙個例項在特徵空間中的k個最相似 即特徵空間中最近鄰 的例項中的大多數屬於某乙個類別,則該例項也屬於這個類別。所選擇的鄰居都是已經正確分類的例項。演算法步驟 1 把所有分類好的 有標籤label 的資料 例項 作為訓練集 2 選擇好引數k 3...

KNN最近鄰分類演算法梳理

k最近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。其指導思想是 近朱者赤,近墨者黑 即由你的鄰居來推斷出你的類別。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn最鄰近分類演算法的實現原理 為了判斷未知...

kNN 最近鄰分類器

以下都是個人對於knn的一些認識,可能有比較大的問題,望大家批評指正。knn分類器是一種消極的學習期,其並不事先建立明確的學習模型,是一種簡單的基於儲存的學習。應用範圍 主要針對簡單的分類問題。主要思想 找到與待檢測點距離最小的k個樣本點的分類情況,取最多的那類為待檢測點的分類。需要的內容 有標記的...