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 計算歐式距離 ...