生活随笔
收集整理的這篇文章主要介紹了
KNN算法实现knn完成iris数据集分类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近鄰規則分類KNN
例子
歐氏距離
K值選取
算法缺點
算法實現
import matplotlib
.pyplot
as plt
import numpy
as np
import operator
x1
= np
.array
([3,2,1])
y1
= np
.array
([104,100,81])
x2
= np
.array
([101,99,98])
y2
= np
.array
([10,5,2])
scatter1
= plt
.scatter
(x1
,y1
,c
='r')
scatter2
= plt
.scatter
(x2
,y2
,c
='b')
x
= np
.array
([18])
y
= np
.array
([90])
scatter3
= plt
.scatter
(x
,y
,c
='k')
plt
.legend
(handles
=[scatter1
,scatter2
,scatter3
],labels
=['labelA','labelB','X'],loc
='best')plt
.show
()
x_data
= np
.array
([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])
y_data
= np
.array
(['A','A','A','B','B','B'])
x_test
= np
.array
([18,90])
x_data_size
= x_data
.shape
[0]
x_data_size
np
.tile
(x_test
, (x_data_size
,1))
diffMat
= np
.tile
(x_test
, (x_data_size
,1)) - x_data
diffMat
sqDiffMat
= diffMat
**2
sqDiffMat
sqDistances
= sqDiffMat
.sum(axis
=1)
sqDistances
distances
= sqDistances
**0.5
distances
sortedDistances
= distances
.argsort
()
sortedDistances
classCount
= {}
k
= 5
for i
in range(k
):votelabel
= y_data
[sortedDistances
[i
]]classCount
[votelabel
] = classCount
.get
(votelabel
,0) + 1
classCount
sortedClassCount
= sorted(classCount
.items
(),key
=operator
.itemgetter
(1), reverse
=True)
sortedClassCount
knnclass
= sortedClassCount
[0][0]
knnclass
iris分類
import numpy
as np
from sklearn
import datasets
from sklearn
.model_selection
import train_test_split
from sklearn
.metrics
import classification_report
,confusion_matrix
import operator
import random
def knn(x_test
, x_data
, y_data
, k
):x_data_size
= x_data
.shape
[0]np
.tile
(x_test
, (x_data_size
,1))diffMat
= np
.tile
(x_test
, (x_data_size
,1)) - x_datasqDiffMat
= diffMat
**2sqDistances
= sqDiffMat
.sum(axis
=1)distances
= sqDistances
**0.5sortedDistances
= distances
.argsort
()classCount
= {}for i
in range(k
):votelabel
= y_data
[sortedDistances
[i
]]classCount
[votelabel
] = classCount
.get
(votelabel
,0) + 1sortedClassCount
= sorted(classCount
.items
(),key
=operator
.itemgetter
(1), reverse
=True)return sortedClassCount
[0][0]
iris
= datasets
.load_iris
()
data_size
= iris
.data
.shape
[0]
index
= [i
for i
in range(data_size
)]
random
.shuffle
(index
)
iris
.data
= iris
.data
[index
]
iris
.target
= iris
.target
[index
]
test_size
= 40
x_train
= iris
.data
[test_size
:]
x_test
= iris
.data
[:test_size
]
y_train
= iris
.target
[test_size
:]
y_test
= iris
.target
[:test_size
]predictions
= []
for i
in range(x_test
.shape
[0]):predictions
.append
(knn
(x_test
[i
], x_train
, y_train
, 5))print(classification_report
(y_test
, predictions
))
print(confusion_matrix
(y_test
,predictions
))
sklearn進行iris分類
from sklearn
import neighbors
from sklearn
import datasets
from sklearn
.model_selection
import train_test_split
from sklearn
.metrics
import classification_report
import random
iris
= datasets
.load_iris
()
print(iris
)
data_size
= iris
.data
.shape
[0]
index
= [i
for i
in range(data_size
)]
random
.shuffle
(index
)
iris
.data
= iris
.data
[index
]
iris
.target
= iris
.target
[index
]
test_size
= 40
x_train
= iris
.data
[test_size
:]
x_test
= iris
.data
[:test_size
]
y_train
= iris
.target
[test_size
:]
y_test
= iris
.target
[:test_size
]
model
= neighbors
.KNeighborsClassifier
(n_neighbors
=3)
model
.fit
(x_train
, y_train
)
prediction
= model
.predict
(x_test
)print(classification_report
(y_test
, prediction
))
總結
以上是生活随笔為你收集整理的KNN算法实现knn完成iris数据集分类的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。