import pylab as pl import numpy as np from sklearn import svm, datasets print("\nImporting training data...") #removing pybrain dataset items #bring in data from training file f = open("classification.tra") inp = [] tar = [] for line in f.readlines(): inp.append(list(map(float, line.split()))[0:2]) tar.append(int(list(map(float, line.split()))[2])-1) print("Training rows: %d " % len(inp) ) print("Input dimensions: %d, output dimensions: %d" % ( len(inp), len(tar))) #raw_input("Press Enter to view training data...") #print(traindata) print("\nFirst sample: ", inp[0], tar[0]) #sk-learn SVM svm_model = svm.SVC(kernel='linear') svm_model.fit(inp,tar) #show predictions #out = net.activateOnDataset(ds) out = svm_model.predict(inp) #print(test) class_predict = [0.0 for i in range(len(out))] predict_correct = [] pred_corr_class1 = [] pred_corr_class2 = [] for index, row in enumerate(out): if row == 0: class_predict[index] = 0 else: class_predict[index] = 1 for N in range(len(class_predict)): if class_predict[N] == tar[N]: if tar[N] == 0: pred_corr_class2.append(1) if tar[N] == 1: pred_corr_class1.append(1) predict_correct.append(1) else: if tar[N] == 0: pred_corr_class2.append(0) if tar[N] == 1: pred_corr_class1.append(0) predict_correct.append(0) print ("SVM Kernel: ", svm_model.kernel) print ("\nCorrectly classified: %d, Percent: %f, Error: %f" % (sum(predict_correct),sum(predict_correct)/float(len(predict_correct)),1-sum(predict_correct)/float(len(predict_correct)))) print ("Class 1 correct: %d, Percent: %f, Error: %f" % (sum(pred_corr_class1),sum(pred_corr_class1)/float(len(pred_corr_class1)),1-sum(pred_corr_class1)/float(len(pred_corr_class1)))) print ("Class 2 correct: %d, Percent: %f, Error: %f" % (sum(pred_corr_class2),sum(pred_corr_class2)/float(len(pred_corr_class2)),1-sum(pred_corr_class2)/float(len(pred_corr_class2)))) raw_input("\nPress Enter to start testing...") print("\nImporting testing data...") #bring in data from testing file f = open("classification.tst") inp_tst = [] tar_tst = [] for line in f.readlines(): inp_tst.append(list(map(float, line.split()))[0:2]) tar_tst.append(int(list(map(float, line.split()))[2])-1) print("Testing rows: %d " % len(inp_tst) ) print("Input dimensions: %d, output dimensions: %d" % ( len(inp_tst), len(tar_tst))) print("\nFirst sample: ", inp_tst[0], tar_tst[0]) print("\nTesting...") #show predictions #out = net.activateOnDataset(ds) out_tst = svm_model.predict(inp_tst) #print(test) class_predict = [0.0 for i in range(len(out_tst))] predict_correct = [] pred_corr_class1 = [] pred_corr_class2 = [] for index, row in enumerate(out_tst): if row == 0: class_predict[index] = 0 else: class_predict[index] = 1 for N in range(len(class_predict)): if class_predict[N] == tar_tst[N]: if tar_tst[N] == 0: pred_corr_class2.append(1) if tar_tst[N] == 1: pred_corr_class1.append(1) predict_correct.append(1) else: if tar_tst[N] == 0: pred_corr_class2.append(0) if tar_tst[N] == 1: pred_corr_class1.append(0) predict_correct.append(0) print ("\nTest Data Correctly classified: %d, Percent: %f, Error: %f" % (sum(predict_correct),sum(predict_correct)/float(len(predict_correct)),1-sum(predict_correct)/float(len(predict_correct)))) print ("Class 1 correct: %d, Percent: %f, Error: %f" % (sum(pred_corr_class1),sum(pred_corr_class1)/float(len(pred_corr_class1)),1-sum(pred_corr_class1)/float(len(pred_corr_class1)))) print ("Class 2 correct: %d, Percent: %f, Error: %f" % (sum(pred_corr_class2),sum(pred_corr_class2)/float(len(pred_corr_class2)),1-sum(pred_corr_class2)/float(len(pred_corr_class2))))