kNN演算法python實現和簡單數字識別

2022-02-28 14:58:54 字數 3939 閱讀 7666

a = np.array([0, 1, 2])

np.tile(a, 2)

array([0, 1, 2, 0, 1, 2])

np.tile(a, (2, 2))

array([[0, 1, 2, 0, 1, 2],[0, 1, 2, 0, 1, 2]])

np.tile(a, (2, 1, 2))

array([[[0, 1, 2, 0, 1, 2]],[[0, 1, 2, 0, 1, 2]]])

b = np.array([[1, 2], [3, 4]])

np.tile(b, 2)

array([[1, 2, 1, 2],[3, 4, 3, 4]])

np.tile(b, (2, 1))

array([[1, 2],[3, 4],[1, 2],[3, 4]])`

createdataset()生成測試陣列

knnclassify(inputx, dataset, labels, k)分類函式

inputx表示輸入向量(也就是我們要判斷它屬於哪一類的)12#

dataset表示訓練樣本13#

label表示訓練樣本的標籤14#

k是最近鄰的引數,選最近k個

15def

knnclassify(inputx, dataset, labels, k):

16 datasetsize = dataset.shape[0]#

計算有幾個訓練資料17#

開始計算歐幾里得距離

18 diffmat = tile(inputx, (datasetsize,1)) -dataset19#

diffmat = inputx.repeat(datasetsize, aixs=1) - dataset

20 sqdiffmat = diffmat ** 2

21 sqdistances = sqdiffmat.sum(axis=1)#

矩陣每一行向量相加

22 distances = sqdistances ** 0.523#

歐幾里得距離計算完畢

24 sorteddistance =distances.argsort()

25 classcount ={}

26for i in

xrange(k):

27 votelabel =labels[sorteddistance[i]]

28 classcount[votelabel] = classcount.get(votelabel,0) + 1

29 res =max(classcount)

30return

res31

32def

img2vec(filename):

33 returnvec = zeros((1,1024))

34 fr =open(filename)

35for i in range(32):

36 linestr =fr.readline()

37for j in range(32):

38 returnvec[0,32*i+j] =int(linestr[j])

39return

returnvec

4041

defhandwritingclasstest(trainingfloder,testfloder,k):

42 hwlabels =

43 trainingfilelist =os.listdir(trainingfloder)

44 m =len(trainingfilelist)

45 trainingmat = zeros((m,1024))

46for i in

range(m):

47 filename =trainingfilelist[i]

48 filestr = filename.split('.'

)[0]

49 classnumstr = int(filestr.split('_'

)[0])

5051 trainingmat[i,:] = img2vec(trainingfloder+'

/'+filename)

52 testfilelist =os.listdir(testfloder)

53 errorcount = 0.0

54 mtest =len(testfilelist)

55for i in

range(mtest):

56 filename =testfilelist[i]

57 filestr = filename.split('.'

)[0]

58 classnumstr = int(filestr.split('_'

)[0])

59 vectorundertest = img2vec(testfloder+'

/'+filename)

60 classifierresult =knnclassify(vectorundertest, trainingmat, hwlabels, k)61#

print classifierresult,' ',classnumstr

62if classifierresult !=classnumstr:

63 errorcount +=1

64print

'tatal error

',errorcount

65print

'error rate

',errorcount/mtest

6667

defmain():

68 t1 =time.clock()

69 handwritingclasstest('

trainingdigits

','testdigits

',3)

70 t2 =time.clock()

71print

'execute

',t2-t1

72if

__name__=='

__main__':

73main()

74來自為知筆記(wiz)

Python實現KNN演算法

from numpy import import operator def creatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 lables a a b b return group,lables def classify0 inx,dataset,...

python實現knn演算法

importnumpyasnp importoperator defcreatedataset group np.array 1.0 1.1 1.0 1.0 0.0 0.0 0.0 0.1 labels a a b b returngroup,labels 分類演算法 inx待分類的點 defcla...

python實現KNN演算法

具體 如下 import numpy as np import matplotlib.pyplot as plt class myknn def init self,k self.k k def compute self,x train,y train,x test dist i 0 計算歐式距離 ...