利用python實現KNN分類器

2021-06-26 00:17:04 字數 1506 閱讀 5644

雖然已經熟悉掌握了knn分類器,但是關鍵還是要實現一遍,參考一些資料之後,實現如下**(加了注釋):

#該程式實現了knn演算法

import numpy

import operator

def knnclassifier(inx, dataset, labels, k):

'''inx: 被分類的測試樣本(向量形式);

dataset: 訓練樣本集,每個樣本為一行,則行數=樣本個數

labels:每個樣本的標記,list形式

k:近鄰個數

sortedclasscount:返回字典,key是排名,value是標記

'''datasetsize=dataset.shape[0] #shape函式返回行數,也就是訓練樣本個數

diffmat=numpy.tile(inx, (datasetsize, 1))-dataset #tile複製測試向量,datasetsize行,1列,為了相減

sqdiffmat=diffmat**2 #差值求平方

sqdistances=sqdiffmat.sum(axis=1) #按每行求和

distances=sqdistances**0.5 #開方,得到測試樣本和每個訓練樣本(每行)的距離

sorteddistindices=distances.argsort() #距離排序

classcount={} #key:樣本標記,value:得票數

for i in range(k): #計數k個近鄰樣本的標記

voteilabel=labels[sorteddistindices[i]] #voteilabel記錄第i個樣本的標記

classcount[voteilabel]=classcount.get(voteilabel, 0)+1 #計票

sortedclasscount=sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true) #按照每個樣本標記的得票數,降序排序

return sortedclasscount[0][0] #返回排名第一的標記,就當作測試樣本的標記

if __name__=="__main__":

dataset=numpy.array([[1., 1.1], #每行是乙個樣本,這點和matlab中實現**不同

[1., 1.],

[0., 0.],

[0., 0.1]])

labels=['a', 'a', 'b', 'b'] #樣本的標記,行向量,乙個元素代表乙個樣本的標記

k=3 #近鄰範圍

inx=[0, 0] #測試樣本

classifyingresult=knnclassifier(inx, dataset, labels, k) #呼叫knn分類器,得到分類結果

print 'classifyingresult = '+str(classifyingresult) #輸出分類結果

Python 實現 KNN 分類演算法

2.python 實現 本文將詳細講述 knn 演算法及其 python 實現 knn k nearest neighbour 即 k最近鄰,是分類演算法中最簡單的演算法之一。knn 演算法的核心思想是如果乙個樣本在特徵空間中的 k 個最相鄰的樣本中的大多數屬於某乙個類別,則將該樣本歸為該類別 有 ...

python實現KNN分類演算法

k近鄰演算法,簡稱knn演算法,作用就是分類 三大要素 import numpy import matplotlib.pyplot as plt 已知訓練集和訓練集類別 測試集 1.測試集廣播和訓練集一樣的規格 2.計算距離 3.對距離列表排序返回最近的k個點的下標 4.有幾個類別就設幾個標籤用來統...

python實現KNN分類演算法

import sklearn import numpy as np from sklearn.neighbors import kneighborsclassifier import sklearn.datasets as data import matplotlib as mpl import m...