• 高斯判别分析模型( 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
  • 相关阅读:
    线程同步:互斥锁,条件变量,信号量
    设计推荐系统
    寻找第K大的数
    算法思想
    LIS 最长递增子序列
    LeetCode Median of Two Sorted Arrays
    oracle查询所有初始化参数(含隐含参数)
    glibc 2.x release note
    spring boot log4j2与三方依赖库log4j冲突无法初始化问题解决方法
    spring boot @Scheduled未生效原因以及相关坑、及相对其他定时任务架构的优势
  • 原文地址:https://www.cnblogs.com/sumai/p/5258081.html
Copyright © 2020-2023  润新知