MachineLearning 学习之fisher判别

来源:互联网 发布:女网球运动服知乎 编辑:程序博客网 时间:2024/06/05 19:00
import numpy as npfrom scipy.linalg import solveclass Fisher:    def __init__(self,data,clas,inpu):        self.data=data        self.clas=clas        self.inpu=inpu        self.result=self.__getResult()    def __getResult(self):        S=[[0 for i in range(len(self.data[0][0]))]for i in range(len(self.data[0][0]))]        S=np.array(S)        av_1=[0 for i in range(len(self.data[0][0]))]        av_2=[0 for 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=0                for 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=0            else:                numC=1        elif yb>yab:            y=np.dot(np.array(inpu),c.T)            if y>yab:                numC=1            else:                numC=0        else:            print "wrong"        #if         numC=0        result=clas[numC]        return resultdata=[        [[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
原创粉丝点击