高斯判別分析模型( Gaussian discriminant analysis)及Python實現
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