高斯判別分析模型( Gaussian discriminant analysis)及Python實現


高斯判別分析模型( Gaussian discriminant analysis)及Python實現

http://www.cnblogs.com/sumai

1.模型

         高斯判別分析模型是一種生成模型,而之前所提到的邏輯回歸是一種判別模型,生成模型和判別模型的詳細了解可參考這篇文章:

         http://blog.sciencenet.cn/home.php?mod=space&uid=248173&do=blog&id=227964

         簡單的來說,我們的目標都是p(y|x),判別模型是構造一個函數f(x)去逼近p(y|x),而對於生成模型則是通過貝葉斯公式p(y|x) = p(x|y)p(y)/p(x),求得p(x|y)和p(y)來間接得到p(y|x)。

        

         首先,高斯判別分析模型對變量x和y有如下假設:

          

      這樣,可以給出概率密度函數:

 

 

2.評價

         該模型的對數似然函數如下:

 

        

3.優化

         對各個參數進行求導后令等式為0,得到:

         

    Φ是訓練樣本中結果 y=1 占有的比例。
    μ0是 y=0 的樣本中特征均值。
    μ1是 y=1 的樣本中特征均值。
    Σ是樣本特征方差均值。

 

4.python代碼實現

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Tue Mar 08 16:16:36 2016
 4 
 5 @author: SumaiWong
 6 """
 7 
 8 import numpy as np
 9 import pandas as pd
10 from numpy import dot
11 from numpy.linalg import inv
12 
13 iris = pd.read_csv('D:\iris.csv')
14 dummy = pd.get_dummies(iris['Species']) # 對Species生成啞變量
15 iris = pd.concat([iris, dummy], axis =1 )
16 iris = iris.iloc[0:100, :] # 截取前一百行樣本
17 
18 X = iris.ix[:, 0:4]
19 Y = iris['setosa'].reshape(len(iris), 1) #整理出X矩陣 和 Y矩陣
20 
21 def GDA(Y, X):
22     theta1 = Y.mean() #類別1的比例
23     theta0 = 1-Y.mean() #類別2的比例
24     mu1 = X[Y==1].mean() #類別1特征的均值向量
25     mu0 = X[Y==0].mean() #類別2特征的均值向量
26        
27     X_1 = X[Y==1]
28     X_0 = X[Y==0]
29     A = dot(X_1.T, X_1) - len(Y[Y==1])*dot(mu1.reshape(4,1), mu1.reshape(4,1).T)
30     B = dot(X_0.T, X_0) - len(Y[Y==0])*dot(mu0.reshape(4,1), mu0.reshape(4,1).T)
31     sigma = (A+B)/len(X) #sigma = X'X-n(X.bar)X.bar'=X'[I-1/n 1 1]X  
33     return theta1, theta0, mu1, mu0, sigma

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM