Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss16:07.07.2016

Lösung:

Laufzeitproblem von letzter Woche basierte auf einem Vektorfehler

Ziele:

  • knn-Algorithmus von scikit-learn für MNIST-Datensatz implementieren
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.

Ausgabe der Genauigkeit:

clf = neighbors.KNeighborsClassifier(k)
clf.fit(datenkurz, zahl)
print clf.score(test,labels)
Genauigkeit in Abhängigkeit von k:

Der Algorithmus ist bei k von 6-9 am genausten. Aus diesem Grund haben wir uns für k=8 entschieden.

Support Vector Classification(SVC):

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 
Ausgabe:
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.

ss16/07.07.2016.txt · Zuletzt geändert: 2016/07/07 16:46 von henrikfrenzel