import cPickle import numpy as np from cifar import load_cifar from cifar import load_cifar_file import matplotlib.pyplot as plt from logreg import sigmoid # Try to do classification based on logistic regression for some CIFAR-10 images. #IT will be difficult to get convergence using all 3072 features values and 10000-images in bach-1 # We will the images to grayscale to reduce the nof. features trainimages, trainlab = load_cifar_file('data_batch_1') #print trainlab.shape #print trainimages.shape #Reduce to gray level image by averaging the 3 bands grayimages = (trainimages[:,:,:,0]+trainimages[:,:,:,1]+trainimages[:,:,:,2])/3 print grayimages.shape nsamp,nx,ny,nb=trainimages.shape trainvec =grayimages.reshape(nsamp,nx*ny) #print grayimages.shape #nsamp,nx,ny,nb=grayimages.shape #trainvec =grayimages.reshape(nsamp,nx*ny) print trainvec.shape nofsamp, nfeat = trainvec.shape trainvecAppend = np.ones((nofsamp,nfeat+1)) trainvecAppend[:,1:]= trainvec #Reshape images to vectors #trainimgvector = trainimages.reshape noftrain = 500; subtrain = trainvecAppend[1:noftrain,:] sublab = trainlab[1:noftrain] testvec = trainvecAppend[noftrain:noftrain+noftrain,:] testlab = trainlab[noftrain:noftrain+noftrain] from sklearn.linear_model import LogisticRegression clf = LogisticRegression(penalty='l2',C=1,solver='sag',max_iter=2000, random_state=1,multi_class='multinomial').fit(subtrain,sublab) #print training score print("training score : %3.3f (%s)") % (clf.score(subtrain,sublab),'multinomial') print("test score : %3.3f (%s)") % (clf.score(testvec,testlab),'multinomial')