Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss16:23.06.2016

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss16:23.06.2016 [2016/06/30 14:58]
henrikfrenzel
ss16:23.06.2016 [2016/07/07 16:50] (aktuell)
henrikfrenzel
Zeile 4: Zeile 4:
 ---------------------------------------------------------------------------- ----------------------------------------------------------------------------
  
 +  * Normierung des MNIST-Datensatz
 +<code python>
 +from __future__ import division
  
-  ​* Einlesen eines 28x28 Bildes (bildeinlesen.py)+import numpy as np 
 +import scipy.io 
 +mat=scipy.io.loadmat('/​[…]/​[…]/​scikit_learn_data/​mldata/​mnist-original.mat'​) 
 + 
 +data=mat['​data'​] 
 +label=mat['​label'​] 
 + 
 +data_neu=np.zeros(shape=data.shape,​dtype=np.float) 
 + 
 +for i in range(data.shape[1]):​ 
 + data_neu[:,​i]= data[:,​i]/​np.linalg.norm(data[:,​i]) 
 +scipy.io.savemat('/​[…]/​[…]/​scikit_learn_data/​mldata/​mnist-original-norm.mat',​ mdict={'​data':​data_neu,​ '​label':​label}) 
 +</​code>​ 
 +  ​* Einlesen eines 28x28 Bildes (bild_einlesen.py)
 <code python> <code python>
 from scipy import misc from scipy import misc
Zeile 42: Zeile 58:
  return bild  return bild
 </​code>​ </​code>​
-  ​Symbole lesen (symbole_lesen.py)+   Testbild mit Bildgröße 28x28 (test.png) \\ 
 +{{:​ss16:​test.png?​200|}} 
 + 
 +  * k-nearest-Neighbor-Algorithmus mit Testbild (knNTest.py):​ 
 +<code python>​ 
 +from __future__ import division 
 +import numpy as np 
 +import operator 
 +import scipy.io 
 +import bild_einlesen as bl 
 +mat=scipy.io.loadmat('/​[…]/​[…]/​scikit_learn_data/​mldata/​mnist-original-norm.mat'​)  
 + 
 +def abstand(vektor1,​ vektor2): 
 + abstand=np.linalg.norm(vektor1-vektor2) 
 + return abstand 
 + 
 + 
 +def nachbarn(untersuchen,​ vergleich):​ 
 + abstaende=[] 
 + for i in range(vergleich.shape[1]-1):​ 
 + abstaende.append((abstand(untersuchen,​ vergleich[:,​i]),​i)) 
 + if i%1000==0:​ 
 + print i 
 + abstaende.sort(key=operator.itemgetter(0)) 
 + return abstaende 
 +  
 +def zugehoerigkeit(zahlen,​k):​ 
 + haeufigkeit=[[0,​0],​[1,​0],​[2,​0],​[3,​0],​[4,​0],​[5,​0],​[6,​0],​[7,​0],​[8,​0],​[9,​0]] 
 + for i in range(k-1):​ 
 + haeufigkeit[zahlen[i]][1] +=1 
 + haeufigkeit.sort(key=operator.itemgetter(1)) 
 + return haeufigkeit[9][0] 
 + 
 + 
 +def bestimmung(k):​ 
 + global eingelesen 
 + daten=mat['​data'​] 
 + zahl=mat['​label'​] 
 + zahlen=[] 
 + eingelesen=bl.bildlesen() 
 + test=eingelesen.daten 
 + testnorm=test/​np.linalg.norm(test) 
 + abstaende=nachbarn(testnorm,​ daten) 
 + for i in range(k-1):  
 + zahlen.append(int(zahl[0,​abstaende[i][1]])) 
 + print "Die Zahl ist: ", zugehoerigkeit(zahlen,​k) 
 + 
 +bestimmung(10) 
 +</​code>​ 
 + 
 +  * Öffnen von neuem Datensatz clean_symbols.p ​(symbole_lesen.py)
 <code python> <code python>
 from pickle import Unpickler from pickle import Unpickler
Zeile 60: Zeile 126:
 print "​Shape:​ ", data[2].shape print "​Shape:​ ", data[2].shape
 </​code>​ </​code>​
-  * Trainieren des k-nearest-Neighbor-Algorithmus 
  
 === Problem: === === Problem: ===
 Porgramm knNTest.py ist extrem langsam. Aus diesem Grund untersuchen wir mit cProfile, wo die Zeit in dem Programm verloren geht.  Porgramm knNTest.py ist extrem langsam. Aus diesem Grund untersuchen wir mit cProfile, wo die Zeit in dem Programm verloren geht. 
 <code python> <code python>
-import ​cprofile+import ​cProfile
 cProfile.run('​bestimmung(10)',​sort='​time'​) cProfile.run('​bestimmung(10)',​sort='​time'​)
 bestimmung(10) bestimmung(10)
 +</​code>​
 +
 +  * Genauigkeit des k-nearest-Neighbor-Algorithmus
 +<code python>
 +from __future__ import division
 +import numpy as np
 +import math as m
 +import operator
 +import scipy.io
 +import matplotlib.pyplot as plt
 +import random
 +import time 
 +mat=scipy.io.loadmat('/​[…]/​[…]/​scikit_learn_data/​mldata/​mnist-original-norm.mat'​) #pfad muss angepasst werden
 +
 +def abstand(vektor1,​ vektor2):
 + abstand=np.linalg.norm(vektor1-vektor2)
 + return abstand
 +
 +
 +def nachbarn(untersuchen,​ vergleich):
 + abstaende=[]
 + for i in range(vergleich.shape[1]-1):​
 + abstaende.append((abstand(untersuchen,​ vergleich[:,​i]),​i))
 + if i%1000==0:
 + print i
 + abstaende.sort(key=operator.itemgetter(0))
 + return abstaende
 +
 +def zugehoerigkeit(zahlen,​k):​
 + haeufigkeit=[[0,​0],​[1,​0],​[2,​0],​[3,​0],​[4,​0],​[5,​0],​[6,​0],​[7,​0],​[8,​0],​[9,​0]]
 + for i in range(k-1):
 + haeufigkeit[zahlen[i]][1] +=1
 + haeufigkeit.sort(key=operator.itemgetter(1))
 + return haeufigkeit[9][0]
 +
 +def bestimmung(k):​
 + daten=mat['​data'​]
 + choice= np.random.choice(70000,​10000,​ replace=False)
 + test=daten[:,​choice].copy()
 + datenkurz=np.delete(daten,​choice,​axis=1)
 + zahllang=mat['​label'​]
 + labels=zahllang[:,​choice].copy()
 + zahl=np.delete(zahllang,​choice,​axis=1)
 + richtigkeit=[]
 + for i in range(100-1):​
 + zahlen=[]
 + abstaende=nachbarn(test[:,​i],​ datenkurz)
 + for z in range(k-1):
 + zahlen.append(int(zahl[0,​ abstaende[z][1]]))
 + print "Die Zahl ist: ", zugehoerigkeit(zahlen,​k),​ " Label:"​ , labels[0][i]
 + if zugehoerigkeit(zahlen,​k)==labels[0][i]:​
 + richtigkeit.append(1)
 + return richtigkeit
 +
 +for j in range(10,​20):​
 + t1=time.clock()
 + richtig=bestimmung(j)
 + t2=time.clock()
 + zeit=t2-t1
 + prozentRichtig= len(richtig)/​99
 + print "Fuer " ,j, "als k, betraegt die Zeit: ", zeit, "und die Genauigkeit:​ ", prozentRichtig
 </​code>​ </​code>​
ss16/23.06.2016.1467291512.txt.gz · Zuletzt geändert: 2016/06/30 14:58 von henrikfrenzel