Laufzeitproblem von letzter Woche basierte auf einem Vektorfehler
from __future__ import division from sklearn.neighbors import NearestNeighbors import numpy as np import scipy.io import random from sklearn import neighbors mat=scipy.io.loadmat('/[…]/[…]/scikit_learn_data/mldata/mnist-original-norm.mat') trainingsize=9000 testsize=1000 daten=mat['data'] choice1=np.random.choice(70000, trainingsize+testsize, replace=False) daten=daten[:,choice1] daten=daten.transpose() print "Datenshape:", daten.shape choice2= np.random.choice(trainingsize+testsize,testsize, replace=False) test=daten[choice2,:].copy() print "Testshape:", test.shape datenkurz=np.delete(daten,choice2,axis=0) zahllang=mat['label'] zahllang=zahllang[:,choice1] zahllang=zahllang.transpose() labels=zahllang[choice2,:].copy() labels=labels.reshape((testsize,)) zahl=np.delete(zahllang,choice2,axis=0) zahl=zahl.reshape((trainingsize,))
Da der Algorithmus von sklearn mit einem anderen shape arbeitet als der MNIST-Datensatz, musste wir den Datensatz transponieren. Außerdem haben wir aus Laufzeitgründen den Datensatz verkleinert.
clf = neighbors.KNeighborsClassifier(k) clf.fit(datenkurz, zahl) print clf.score(test,labels)
for i in range(2): if i==0: clf = neighbors.KNeighborsClassifier(8) if i==1: clf = svm.SVC() t1=time.clock() clf.fit(datenkurz, zahl) Genauigkeit=clf.score(test,labels) t2=time.clock() zeit=t2-t1 print print "Genauigkeit: ", Genauigkeit, "Zeit: ", zeit
Genauigkeit: 0.957 Zeit: 12.72157 #knn Genauigkeit: 0.955 Zeit: 24.224649 #SVC
Genauigkeit bei Support Vector Classification und k-nearest-Neighbor-Algorithmus ist ähnlich allerdings ist SVC deutlich langsamer als knn.