Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
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> |