def crossvalidation(self, fold, v, k):
		
		error = 0
		data = Data(k, 0, 0)
		data.importDataFromMat()
		data.normalize()

		n = data.train_cat.shape[1]
		all_indices = sp.arange(n)
		data.shuffleData()

		sq = SquaredErrorLinearClassifier(v,k)

		dataset_indices = sp.split(all_indices, fold)

		for i in range(fold):
			set_without_D_i_indices = sp.concatenate(dataset_indices[0:i]+dataset_indices[i+1:fold])
			
			#print "-"*30+"train"+"-"*30
			sq.train(data.train_left[:,set_without_D_i_indices], data.train_right[:,set_without_D_i_indices], data.train_cat[:,set_without_D_i_indices])
			#print "-"*30+"classify"+"-"*30
			results, classes = sq.classify(data.train_left[:,dataset_indices[i]], data.train_right[:,dataset_indices[i]])
			#print "-"*30+"error"+"-"*30

			err,  _ = sq.error(results, data.train_cat[:,dataset_indices[i]].T)

			error += fold/(n*1.0)*err

		error = error / fold

		with open("results/crossvalidation.txt", "a") as myfile:
			toWrite = "v="+str(v)+" error="+str(error)
			myfile.write(toWrite)
Ejemplo n.º 2
0
def testSquaredError():
    k = 5

    data = Data(k, 0, 0)
    data.importDataFromMat()
    data.normalize()

    sq = SquaredErrorLinearClassifier(2 ** 10, k)
    sq.train(data.train_left, data.train_right, data.train_cat)
    results, cat = sq.classify(data.test_left, data.test_right)
    sq.confusion_matrix(cat, data.test_cat.argmax(axis=0))

    err = Error()
    err, misclass = err.norm_total_error(results.T, data.test_cat, k)
    print "Error on the test set " + str(err)
    print "Misclassification ratio on the test set " + str(misclass)