vrijdag 5 juni 2015

Alleen nullen, enen en tweeën (3)

Het is nu ook gelukt om alles goed (redelijk :-) weer te geven. Bijvoorbeeld:

Prediction for number with index: ( 0 ) =  [2] Known value =  2
Prediction for number with index: ( 1 ) =  [3] Known value =  3
Prediction for number with index: ( 2 ) =  [2] Known value =  2
Prediction for number with index: ( 3 ) =  [2] Known value =  2
Prediction for number with index: ( 4 ) =  [0] Known value =  0
Prediction for number with index: ( 5 ) =  [2] Known value =  2
Prediction for number with index: ( 6 ) =  [2] Known value =  2
Prediction for number with index: ( 7 ) =  [2] Known value =  2
Prediction for number with index: ( 8 ) =  [1] Known value =  1
Prediction for number with index: ( 9 ) =  [1] Known value =  1




Het leeralgoritme blijkt dus inderdaad goed te werken. Het geeft de juiste som van de afzonderlijke cijfers weer.
Het is nu natuurlijk ook eenvoudig om gewoon het getal weer te geven:

Prediction for number with index: ( 0 ) =  [20] Known value =  20
Prediction for number with index: ( 1 ) =  [12] Known value =  12
Prediction for number with index: ( 2 ) =  [2] Known value =  2
Prediction for number with index: ( 3 ) =  [11] Known value =  11
Prediction for number with index: ( 4 ) =  [0] Known value =  0
Prediction for number with index: ( 5 ) =  [2] Known value =  2
Prediction for number with index: ( 6 ) =  [11] Known value =  11
Prediction for number with index: ( 7 ) =  [2] Known value =  2
Prediction for number with index: ( 8 ) =  [1] Known value =  1

Prediction for number with index: ( 9 ) =  [10] Known value =  10



Wow! wat knap is ie toch :-)

Gebruikte code:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
import numpy as np
import time
from sklearn import svm
from load import mnist
trX, teX, trY, teY = mnist(onehot=True)

t0 = time.time()

ga = 0.028          # Hiermee (gamma = 0.028) wordt bij 10.000 oefeningen 97.07% betrouwbaarheid gehaald
size = 1000

clf = svm.SVC(gamma=ga, C=100)

# Eerst nullen, eenen en tweeen voor de oefendataset selecteren.
Y = np.argmax(trY,axis=1)
index=[]
elem = Y.size
for x in range(0,elem-1):
    if Y[x] in range(0,3):
        index += [x]
#print Y[x]
XX = np.take(trX, index, axis=0)
YY = np.take(Y,index)

# Nu nullen, eenen en tweeen voor de testdataset selecteren.
Y = np.argmax(teY,axis=1)
index=[]
elem, val = XX.shape
for x in range(0,size):
    if Y[x] in range(0,3):
        index += [x]

XXt = np.take(teX, index, axis=0)
YYt = np.take(Y,index)

#Nu samenstellen

XXX = np.concatenate((XX,np.flipud(XX)), axis = 1)
YYY = YY+np.flipud(YY)

XXXt = np.concatenate((XXt,np.flipud(XXt)), axis = 1)
YYYt = YYt+np.flipud(YYt)

clf.fit(XXX[0:size],YYY[0:size])

#clf.fit(XXX,YYY)     # Totale set 'leren'.

print ""
print "reliability: ", np.mean(YYYt == clf.predict(XXXt)), time.time() - t0, "seconds, gamma: ", ga, " size :", size
print ""

t = 0
i = 0
fig = plt.figure(1,(5.,5.))
grid = ImageGrid(fig,111,
                 nrows_ncols = (10,2),
                 axes_pad=0.1,
                 )
while (t < 19 and i < 100):
    if (YYYt[i] != clf.predict(XXXt[i])):
        print "Prediction for number with index: (",i, ") = ", clf.predict(XXXt[i]), "Known value = ",YYYt[i]
        im1 = XXXt[i,0:784]
        im2 = XXXt[i,784:2*784]
        im1.shape=28,28
        im2.shape=28,28
        grid[t].imshow(im1,cmap=plt.cm.gray_r)
        grid[t+1].imshow(im2,cmap=plt.cm.gray_r)
        #plt.imshow(im1, cmap=plt.cm.gray_r, interpolation="nearest")
        t += 2
    i += 1

plt.show()

Geen opmerkingen:

Een reactie posten