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:59]
henrikfrenzel
ss16:23.06.2016 [2016/07/07 16:50] (aktuell)
henrikfrenzel
Zeile 10: Zeile 10:
 import numpy as np import numpy as np
 import scipy.io import scipy.io
-mat=scipy.io.loadmat('/​home/mensch/​scikit_learn_data/​mldata/​mnist-original.mat'​) +mat=scipy.io.loadmat('/​[…]/[…]/​scikit_learn_data/​mldata/​mnist-original.mat'​)
  
 data=mat['​data'​] data=mat['​data'​]
Zeile 20: Zeile 19:
 for i in range(data.shape[1]):​ for i in range(data.shape[1]):​
  data_neu[:,​i]= data[:,​i]/​np.linalg.norm(data[:,​i])  data_neu[:,​i]= data[:,​i]/​np.linalg.norm(data[:,​i])
-scipy.io.savemat('/​home/mensch/​scikit_learn_data/​mldata/​mnist-original-norm.mat',​ mdict={'​data':​data_neu,​ '​label':​label})+scipy.io.savemat('/​[…]/[…]/​scikit_learn_data/​mldata/​mnist-original-norm.mat',​ mdict={'​data':​data_neu,​ '​label':​label})
 </​code>​ </​code>​
-  * Einlesen eines 28x28 Bildes (bildeinlesen.py)+  * Einlesen eines 28x28 Bildes (bild_einlesen.py)
 <code python> <code python>
 from scipy import misc from scipy import misc
Zeile 59: 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 77: Zeile 126:
 print "​Shape:​ ", data[2].shape print "​Shape:​ ", data[2].shape
 </​code>​ </​code>​
-  * Trainieren des k-nearest-Neighbor-Algorithmus 
  
 === Problem: === === Problem: ===
Zeile 85: Zeile 133:
 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.1467291587.txt.gz · Zuletzt geändert: 2016/06/30 14:59 von henrikfrenzel