MachineLearning 学习之fisher判别

import numpy as np
from scipy.linalg import solve

class 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 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值