Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def d(test,m):
- epred = []
- mpred = []
- for i in range(len(test)):
- x = []
- euc = []
- man = []
- for f in range(len(test[0])-1):
- x.append(test[i,f+1])
- 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(test[i,0]))
- re = 0
- rm = 0
- for i in range(len(test)):
- if epred[i]==test[i,0]:
- re+=1
- if mpred[i]==test[i,0]:
- rm+=1
- print("Euclidian distance accuracy - "+str(round(100*re/len(test)))+"%")
- print("Manhattan distance accuracy - "+str(round(100*rm/len(test)))+"%")
- 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")])
- data = np.array(lines)
- train = data[0:119,:]
- test = data[120:,:]
- T0 = data[data[:,0] == 0,1:]
- T1 = data[data[:,0] == 1,1:]
- T2 = data[data[:,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)
- X1 = train[:,1]
- X2 = train[:,2]
- X3 = train[:,3]
- X4 = train[:,4]
- Mu1 = np.mean(X1)
- Mu2 = np.mean(X2)
- Mu3 = np.mean(X3)
- Mu4 = np.mean(X4)
- d(test,m)
- #PCA
- 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))
- f1 =fd[:,0]
- f2 =fd[:,1]
- f3 =fd[:,2]
- for i in range(len(test)):
- for f in range(3):
- test[i,f+1]=fd[i,f]
- np.delete(test[i],4)
- d(test,m)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement