Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss16:07.07.2016 [2016/07/07 16:19] henrikfrenzel |
ss16:07.07.2016 [2016/07/07 16:46] (aktuell) henrikfrenzel |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
=== Lösung: === | === Lösung: === | ||
- | Laufzeitproblem von letzter Woche basierte auf einem Vektorfehler. | + | Laufzeitproblem von letzter Woche basierte auf einem Vektorfehler |
=== Ziele: === | === Ziele: === | ||
* knn-Algorithmus von scikit-learn für MNIST-Datensatz implementieren | * knn-Algorithmus von scikit-learn für MNIST-Datensatz implementieren | ||
- | === Genauigkeit in Abhängigkeit von k: === | + | <code python> |
+ | 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,)) | ||
+ | </code> | ||
+ | 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: === | ||
+ | <code python> | ||
+ | clf = neighbors.KNeighborsClassifier(k) | ||
+ | clf.fit(datenkurz, zahl) | ||
+ | print clf.score(test,labels) | ||
+ | </code> | ||
+ | |||
+ | == Genauigkeit in Abhängigkeit von k: == | ||
{{ :ss16:printme.png |}} | {{ :ss16:printme.png |}} | ||
+ | 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): === | ||
+ | <code python> | ||
+ | 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 "Genauigkeit: ", Genauigkeit, "Zeit: ", zeit | ||
+ | </code> | ||
+ | == Ausgabe: == | ||
+ | <code terminal> | ||
+ | Genauigkeit: 0.957 Zeit: 12.72157 #knn | ||
+ | |||
+ | Genauigkeit: 0.955 Zeit: 24.224649 #SVC | ||
+ | </code> | ||
+ | Genauigkeit bei Support Vector Classification und k-nearest-Neighbor-Algorithmus ist ähnlich allerdings ist SVC deutlich langsamer als knn. |