import numpy as np
from scipy.linalg import solve
classFisher:def__init__(self,data,clas,inpu):
self.data=data
self.clas=clas
self.inpu=inpu
self.result=self.__getResult()
def__getResult(self):
S=[[0for i in range(len(self.data[0][0]))]for i in range(len(self.data[0][0]))]
S=np.array(S)
av_1=[0for i in range(len(self.data[0][0]))]
av_2=[0for i in range(len(self.data[0][0]))]
for i in range(len(self.data[0][0])):
for j in range(len(self.data[0])):
av_1[i]+=1.0*self.data[0][j][i]/len(self.data)
for i in range(len(self.data[0][0])):
for j in range(len(self.data[1])):
av_2[i]+=1.0*self.data[1][j][i]/len(self.data)
print av_1,av_2
for k in range(len(S[0])):
for l in range(len(S[0])):
s=0for i in range(len(self.data[0])):
s+=(self.data[0][i][k]-av_1[k])*(self.data[0][i][l]-av_1[l])
for i in range(len(self.data[1])):
s+=(self.data[1][i][k]-av_1[k])*(self.data[1][i][l]-av_1[l])
S[k][l]=s
av=1.0*(np.array(av_1)-np.array(av_2))
#print av
c = solve(S, av)
print"info"print c
print"*********************"print av_1,av_2
ya=np.dot(av_1,c.T)
yb=np.dot(av_2,c.T)
print ya,yb
yab=(len(self.data[0])*ya+len(self.data[1])*yb)/(\
len(self.data[0])+len(self.data[1]))
print ya,yb,yab
if ya>yab:
y=np.dot(np.array(inpu),c.T)
if y>yab:
numC=0else:
numC=1elif yb>yab:
y=np.dot(np.array(inpu),c.T)
if y>yab:
numC=1else:
numC=0else:
print"wrong"#if
numC=0
result=clas[numC]
return result
data=[
[[1,2,2,1],[1,2,3,1]],\
[[-3,-2,-2,-1],[-4,-4,-3,-1]]
]
clas=['A','B']
inpu=[1,-3,2,1]
fish=Fisher(data,clas,inpu)
print"the result is"print fish.result