Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import scipy as sp
- import matplotlib as plt
- import os as os
- import sys
- import glob
- from sklearn import svm
- from random import randint
- from sklearn import multiclass
- class MouseMovement:
- # Class for mouse movement data
- def __init__(self, startPixel, endPixel, listPixel=[], cl = None):
- # startPixel = [x_start, y_start, t_start]
- # endPixel = [x_end, y_end, t_end]
- # moveList = [x1, y1, t1;
- # x2, y2, t2;
- # x3, y3, t3;
- # ...
- # xn, yn, tn]
- self.start = startPixel
- self.end = endPixel
- self.moveList = listPixel
- self.cl = cl
- self.length = self.getMoveLength()
- self.moveTime = self.getMoveTime()
- # self.v = self.getSpeedVector()
- def MMPrint(self):
- print (self.start)
- print (self.moveList)
- print (self.end)
- def getMoveLength(self):
- tmp1 = self.end[0]-self.start[0]
- tmp2 = self.end[1]-self.start[1]
- length = np.sqrt(tmp1*tmp1+tmp2*tmp2)
- return length
- def getMoveTime(self):
- tmpTime=self.end[2]
- for x in self.moveList:
- tmpTime += x[2]
- return tmpTime
- def getLongPause(self):
- list = []
- list.append(self.start)
- for i in range(0, len(self.moveList)):
- list.append(self.moveList[i])
- list.append(self.end)
- tmpTime = 0
- for i in range(1, len(list)):
- if np.abs(list[i][2] - list[i - 1][2]) > 1000:
- tmpTime += list[i][2]
- return tmpTime
- def getSpeedVector(self):
- l1 = np.append(np.transpose(self.start[0:2]), self.moveList[:,0:2])
- l2 = np.append(self.moveList[:,0:2], np.transpose(self.end[0:2]))
- # print l1
- l1=l1.reshape(len(l1)/2,2)
- l2=l2.reshape(len(l2)/2,2)
- t = np.maximum(np.append(np.transpose(self.start[2]), self.moveList[:,2]),np.ones(len(self.moveList[:,2])+1))
- diff = l2 - l1
- # print diff
- diff_sq = np.multiply(diff, diff)
- # print diff_sq
- dist = np.sqrt(diff_sq[:,0]+diff_sq[:,1])
- # print dist
- v = np.divide(dist,t)
- return v
- def getAverageSpeed(self):
- n = len(self.moveList)
- avg = 0
- br = 0
- for i in range(1, n):
- tmp1 = self.moveList[i][0] - self.moveList[i - 1][0]
- tmp2 = self.moveList[i][1] - self.moveList[i - 1][1]
- tmp3 = self.moveList[i][2]
- br += np.sqrt((tmp1 * tmp1) + (tmp2 * tmp2)) / tmp3
- br += np.sqrt((self.moveList[n - 1][0] - self.end[0]) ** 2 + (self.moveList[n - 1][1] - self.end[1]) ** 2) / \
- self.end[2]
- avg = br / (n + 1)
- return avg
- def getElement(self, id, verify):
- strOut = '-'+str(id)+'-\n'
- if verify == 1:
- strOut += '-'+str(self.cl)+'-\n'
- else:
- strOut += '---\n'
- strOut += str(self.start) + '\n'
- for data in self.moveList:
- strOut += str(data) + '\n'
- strOut += str(self.end) + '\n'
- return strOut
- moveClassList = []
- # Path to data file
- data = str('hw2_mouse_data.txt')
- f = open(data,'r')
- cnt = 0
- tmp = '0'
- move_list = []
- y=[]
- # def feature_normalize(x):
- # x_norm=x
- # num_col=x.shape[1]
- # for i in range (1,num_col):
- # x_norm[:,i]=(x_norm[:,i]-np.mean(x[:,i]))/np.std(x[:,i])
- # return x_norm
- while tmp != '':
- # read new line
- tmp = f.readline()
- if not tmp:
- # moveClassList.append(MouseMovement(move_list[0], move_list[-1], move_list[1:-1], cl))
- break
- if tmp[0] == '-':
- # save the data
- if cnt >0:
- moveClassList.append(MouseMovement(move_list[0], move_list[-1], move_list[1:-1], cl))
- cnt += 1
- tmp = f.readline()
- if tmp.find('Goran', 0, len(tmp)) >=0:
- cl = 0 #'Goran'
- y.append(cl)
- if tmp.find('Gorjan', 0, len(tmp))>=0:
- cl = 1 #'Gorjan'
- y.append(cl)
- if tmp.find('Ivan', 0, len(tmp))>=0:
- cl = 2 #'Ivan'
- y.append(cl)
- if tmp.find('Georgi', 0, len(tmp))>=0:
- cl = 3 #'Georgi'
- y.append(cl)
- move_list = []
- else:
- if tmp[0] == '[':
- data = tmp.replace('[','')
- data = data.replace(']','')
- data = data.replace('\n','')
- value = [int(no) for no in data.split(",")]
- move_list.append(value)
- # print test data
- #print (moveClassList[3].getElement(4,0))
- #print (moveClassList[3].getAverageSpeed())
- # model = svm.SVC(C=10.0, kernel='rbf', degree=3, gamma=1, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=5)
- # model.fit(x_train, y_train)
- # model.score(x_train, y_train)
- # predicted = model.predict(x_predict)
- # t1_str = str('./data_ready/hw2_mouse_prediction_fin.txt')
- # f1 = open(t1_str,'w')
- # t2_str = str('./data_ready/hw2_mouse_prediction-verify_fin.txt')
- # f2 = open(t2_str,'w')
- # cnt = 1
- #
- # while not (not moveClassList):
- # el = np.random.randint(0,len(moveClassList),1)
- # print el
- # f1.write(moveClassList[el].getElement(cnt, 0)) # test
- # f2.write(moveClassList[el].getElement(cnt, 1)) # verify
- # del moveClassList[el]
- # cnt += 1
- # print cnt
- #
- #
- moveClassList2 = []
- data_predict = str('hw2_mouse_prediction.txt')
- f2 = open(data_predict,'r')
- cnt2 = 0
- tmp2 = '0'
- move_list2 = []
- while tmp2 != '':
- # read new line
- tmp2 = f2.readline()
- if not tmp2:
- moveClassList2.append(MouseMovement(move_list2[0], move_list2[-1], move_list2[1:-1]))
- break
- if tmp2[0] == '-':
- # save the data
- if cnt2 >0:
- moveClassList2.append(MouseMovement(move_list2[0], move_list2[-1], move_list2[1:-1]))
- cnt2 += 1
- tmp2 = f2.readline()
- move_list2 = []
- else:
- if tmp2[0] == '[':
- data_predict = tmp2.replace('[','')
- data_predict = data_predict.replace(']','')
- data_predict = data_predict.replace('\n','')
- value = [int(no) for no in data_predict.split(",")]
- move_list2.append(value)
- speeds = []
- moveLengths = []
- moveTimes = []
- print(len(moveClassList))
- for i in range(0, len(moveClassList)):
- speeds.append(moveClassList[i].getAverageSpeed())
- moveLengths.append((moveClassList[i].getMoveLength()))
- moveTimes.append((moveClassList[i].getMoveTime()))
- data_train = np.zeros((1151, 4))
- data_train[:, 0] = speeds
- data_train[:, 1] = moveLengths
- data_train[:, 2] = moveTimes
- data_train[:, 3]=y
- for i in range(0,1151):
- rand = randint(0,1150)
- pom = data_train[rand,:]
- data_train[rand,:] = data_train[i,:]
- data_train[i,:] = pom
- x_train = np.zeros((1151, 4))
- y_train = []
- x_train = data_train[:, :3]
- y_train = data_train[:, 3]
- #x_test = np.zeros((231, 2))
- #y_test = []
- #x_test = data_train[921:, :2]
- #y_test = data_train[921:, 2]
- speedsP = []
- moveLengthsP = []
- moveTimesP = []
- #print(len(moveClassList2))
- for c in range(0, len(moveClassList2)):
- speedsP.append(moveClassList2[c].getAverageSpeed())
- moveLengthsP.append((moveClassList2[c].getMoveLength()))
- moveTimesP.append((moveClassList2[c].getMoveTime()))
- data_p = np.zeros((133, 3))
- data_p[:, 0] = speedsP
- data_p[:, 1] = moveLengthsP
- data_p[:, 2]=moveTimesP
- #data_train[:, 2] = y
- x_p = np.zeros((133, 3))
- x_p = data_p[:, :]
- classif = multiclass.OneVsRestClassifier(svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.00005, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=1))
- classif.fit(x_train, y_train)
- #score = classif.score(x_test, y_test)
- #predicted = classif.predict(x_test)
- #predict= classif.predict(x_p)
- #for i in range(0, len(predicted)):
- # print(predicted[i])
- #print("Procent pogodeni: ", score*100)
- predict1 = classif.predict(x_p)
- eden=0
- dva=0
- tri=0
- nula=0
- for i in range(0, len(predict1)):
- if (predict1[i] == 0):
- nula += 1
- if (predict1[i] == 1):
- eden += 1
- if (predict1[i] == 2):
- dva += 1
- if (predict1[i] == 3):
- tri += 1
- #print(predict1[i])
- for i in range(0,133):
- if predict1[i] == 0:
- moveClassList2[i].cl = 'Goran'
- if predict1[i] == 1:
- moveClassList2[i].cl = 'Gorjan'
- if predict1[i] == 2:
- moveClassList2[i].cl = 'Ivan'
- if predict1[i] == 3:
- moveClassList2[i].cl = 'Georgi'
- for i in range(0,133):
- with open("hw_mouse_prediction_006_2013.txt", "a") as myfile:
- myfile.write(moveClassList2[i].getElement(i+1,1))
- print(nula)
- print(eden)
- print(dva)
- print(tri)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement