Bei dem ganzen MNIST-Datensatz hat unser k-nearest-Neighbor-Algorithmus eine Genauigkeit von 98%.

Ziele:

Labels neudefiniert um Datensätze anzugleichen
import cPickle as pickle
 
with open('clean_symbols.p','r') as f:
	u=pickle.Unpickler(f)
	data=u.load()
 
zahlen=['1','2','3','4','5','6','7','8','9','0']
for i in range(15568):
	if data[2][i] in zahlen:
		data[1][i]= int(data[2][i])
	else:
		data[1][i] +=10
 
pickle.dump( data, open( "symbols-newlabel.p", "wb" ) )
Symbol-Datensatz formieren
import cPickle as pickle
import numpy as np
 
with open('symbols-newlabel.p','r') as f:
	u=pickle.Unpickler(f)
	data=u.load()
 
data_neu=np.zeros(shape=data[0].shape,dtype=np.float)
for i in range(data[0].shape[0]):
	data_neu[i]=data[0][i,:]/np.linalg.norm(data[0][i,:])
 
alldata_neu= (data_neu, data[1], data[2])
 
pickle.dump( alldata_neu, open( "symbols-newlabel-norm.p", "wb" ) )
Zusammenfügen der Datensätze
import cPickle as pickle
import scipy.io
import numpy as np
mat=scipy.io.loadmat('/home/mensch/scikit_learn_data/mldata/mnist-original-norm.mat')
 
with open('symbols-newlabel-norm.p','r') as f:
	u=pickle.Unpickler(f)
	data=u.load()
 
mnist_data=mat['data']
mnist_data= mnist_data.transpose()
mnist_label=mat['label']
mnist_label=mnist_label.transpose()
mnist_label_int=np.zeros(shape=mnist_label.shape, dtype=np.int64)
mnist_label_string=np.zeros(shape=mnist_label.shape, dtype=object)
for i in range(mnist_label.shape[0]):
	mnist_label_int[i]= np.int64(mnist_label[i])
	mnist_label_string[i]= np.string_(mnist_label[i])
 
mnist_label_int = mnist_label_int.reshape((mnist_label_int.shape[0],))
mnist_label_string = mnist_label_string.reshape((mnist_label_string.shape[0],))
 
zusammendaten=np.append(data[0], mnist_data, axis=0)
zusammenlabel= np.append(data[1], mnist_label_int, axis=0)
zusammenlabel2=np.append(data[2], mnist_label_string, axis=0)
alleszusammen = (zusammendaten, zusammenlabel, zusammenlabel2)
 
 
pickle.dump( alleszusammen, open( "/home/mensch/scikit_learn_data/mldata/datensaetze-zsm.p", "wb" ) )

Der Versuch die Daten mit Pickle zu speichern führte allerdings zu einem MemoryError. Daher sind wir dazu übergegangen die Dateien in einem Numpy-Objekt zu speichern:

alleszusammen= np.array((zusammendaten, zusammenlabel, zusammenlabel2))
np.save( "/home/mensch/scikit_learn_data/mldata/datensaetze-zsm.p",alleszusammen)

Die Datei wird dann als „datensaetze-zsm.p.npy“ gespeichert und kann mit dem Befehl

np.load("/home/mensch/scikit_learn_data/mldata/datensaetze-zsm.p.npy")

geladen werden.

Nach weiterer Bearbeitung hat sich rausgestellt, dass np.save() die Matrix der Daten falsch abspeichert. Nach dem Laden der Daten zeigt sich in der nullten Komponente das Format

(85568,)

obwohl es (85568,784) sein sollte. Daher müssen die verschiedenen Teile des Datensatzes einzeln gespeichert werden. Also eine Datei für die Daten und eine andere für die Labels als int und als string.