import numpy import numpy.random import pylab from dispims_color import dispims_color import logreg rng = numpy.random.RandomState(1) SMALL = 0.001 patchsize = 10 numfeatures = 100 pooling = "quadrants" datadir = ... def extract_features(data, prototypes): projection = numpy.dot(data, prototypes.T) return projection * (projection>0) def crop_patches_color(image, keypoints, patchsize): patches = numpy.zeros((len(keypoints), 3*patchsize**2)) for i, k in enumerate(keypoints): patches[i, :] = image[k[0]-patchsize/2:k[0]+patchsize/2, k[1]-patchsize/2:k[1]+patchsize/2,:].flatten() return patches def pca(data, var_fraction): """ principal components analysis of data (columnwise in array data), retaining as many components as required to retain var_fraction of the variance """ from numpy.linalg import eigh u, v = eigh(numpy.cov(data, rowvar=0, bias=1)) v = v[:, numpy.argsort(u)[::-1]] u.sort() u = u[::-1] u = u[u.cumsum()<=(u.sum()*var_fraction)] numprincomps = u.shape[0] u[u=16))+str(int(a[1]>=16)), 2) for a in keypoints]) features = extract_features(patches, prototypes_whitened) allfeatures.append(numpy.array([(features * (quadrants==j)[:,None]).mean(0) for j in range(4)]).reshape(4*numfeatures)) print numtrain = 40000 numvali = 10000 alltrainfeatures = numpy.vstack(allfeatures[:numtrain+numvali]) testfeatures = numpy.vstack(allfeatures[numtrain+numvali:]) trainfeatures = alltrainfeatures[:numtrain] valifeatures = alltrainfeatures[numtrain:] alltrainlabels = trainlabels valilabels = trainlabels[numtrain:] trainlabels = trainlabels[:numtrain] #alltrainfeatures = numpy.vstack(trainfeatures[:numtrain+numvali]) #trainfeatures = alltrainfeatures[:numtrain] #valifeatures = alltrainfeatures[numtrain:] #alltrainlabels = trainlabels #valilabels = trainlabels[numtrain:] #trainlabels = trainlabels[:numtrain] #CLASSIFICATION WITH CROSSVALIDATION weightcosts = [0.1, 0.001, 0.0] valicosts = [] lr = logreg.Logreg(10, trainfeatures.shape[1]) lr.train(trainfeatures.T, logreg.onehot(trainlabels).T, numsteps=100, verbose=False, weightcost=weightcosts[0]) #lr.train_cg(trainfeatures.T, logreg.onehot(trainlabels).T, weightcost=weightcosts[0], maxnumlinesearch=1000) valicosts.append(lr.zeroone(valifeatures.T, logreg.onehot(valilabels).T)) for wcost in weightcosts[1:]: lr.train(trainfeatures.T, logreg.onehot(trainlabels).T, numsteps=100, verbose=False,weightcost=wcost) #lr.train_cg(trainfeatures.T, logreg.onehot(trainlabels).T, weightcost=wcost, maxnumlinesearch=1000) valicosts.append(lr.zeroone(valifeatures.T, logreg.onehot(valilabels).T)) winningwcost = weightcosts[numpy.argmin(valicosts)] lr.train(alltrainfeatures.T, logreg.onehot(alltrainlabels).T, numsteps=100, verbose=False, weightcost=winningwcost) #lr.train_cg(alltrainfeatures.T, logreg.onehot(alltrainlabels).T, weightcost=winningwcost, maxnumlinesearch=1000) print "winning weightcost: ", winningwcost print "logreg train performance: ", 1.0 - lr.zeroone(trainfeatures.T, logreg.onehot(trainlabels).T) print "logreg test performance: ", 1.0 - lr.zeroone(testfeatures.T, logreg.onehot(testlabels).T)