Bei dem ganzen MNIST-Datensatz hat unser k-nearest-Neighbor-Algorithmus eine Genauigkeit von 98%.
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" ) )
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" ) )
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.