Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def d(test,m,con,cls):
- epred = []
- mpred = []
- for i in range(len(test)):
- x = []
- euc = []
- man = []
- for f in range(len(test[0])-1):
- x.append(test[i,f+con])
- for c in range(3):
- me = m[:,c]
- euc.append(np.sqrt(sum(([(i - j)**2 for i, j in zip(x, me)]))))
- man.append(abs(sum(x)-sum(m[:,c])))
- epred.append(euc.index(min(euc)))
- mpred.append(man.index(min(man)))
- #print("predict by euclidean - "+str(epred[i]))
- #print("predict by manhattan - "+str(mpred[i]))
- #print("real - "+str(cls[i]))
- re = 0
- rm = 0
- for i in range(len(test)):
- if epred[i]==cls[i]:
- re+=1
- if mpred[i]==cls[i]:
- rm+=1
- print("Euclidian distance accuracy - "+str(round(100*re/len(test)))+"%")
- print("Manhattan distance accuracy - "+str(round(100*rm/len(test)))+"%")
- #Read file
- file = open("fisher.txt", "r")
- lines = []
- for i,line in enumerate(file):
- if i!=0:
- lines.append([int(x) for x in line.strip().split("\t")])
- print("--- BEFORE PCA ---")
- data = np.array(lines)
- cls = data[:,0]
- train = data[0:119,:]
- test = data[119:,:]
- T0 = train[train[:,0] == 0,1:]
- T1 = train[train[:,0] == 1,1:]
- T2 = train[train[:,0] == 2,1:]
- m = []
- for i in range(4):
- m.append([np.mean(T0[:,i]),np.mean(T1[:,i]),np.mean(T2[:,i])])
- m = np.array(m)
- d(test,m,1,cls[119:])
- #PCA
- X1 = data[:,1]
- X2 = data[:,2]
- X3 = data[:,3]
- X4 = data[:,4]
- Mu1 = np.mean(X1)
- Mu2 = np.mean(X2)
- Mu3 = np.mean(X3)
- Mu4 = np.mean(X4)
- X1p = X1-Mu1
- X2p = X2-Mu2
- X3p = X3-Mu3
- X4p = X4-Mu4
- cm = np.cov([X1p,X2p,X3p,X4p])
- w, v = np.linalg.eig(cm)
- index = np.argsort(-w)
- fv = v[:,index]
- rfv = np.transpose(fv)
- rzm = np.array([X1p, X2p, X3p, X4p])
- fd = np.transpose(np.matmul(rfv, rzm))
- fd = fd[:,:3]
- data = fd
- train = data[0:119,:]
- test = data[119:,:]
- T0 = train[cls[:119] == 0,:]
- T1 = train[cls[:119] == 1,:]
- T2 = train[cls[:119] == 2,:]
- print(" --- AFTER PCA ---")
- m = []
- cls = cls[119:]
- for i in range(3):
- m.append([np.mean(T0[:,i]),np.mean(T1[:,i]),np.mean(T2[:,i])])
- m = np.array(m)
- print(m)
- d(test,m,0,cls)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement