高斯判别法

同朴素贝叶斯一样,高斯判别分析(Gaussian discriminant analysismodel, GDA)也是一种生成学习算法,在该模型中,我们假设y给定的情况下,x服从混合正态分布。通过训练确定参数,新样本通过已建立的模型计算出隶属不同类的概率,选取概率最大为样本所属的类。

一、混合正态分布(multivariate normal distribution)

混合正态分布也称混合高斯分布。该分布的期望和协方差为多元的:期望,协方差,协方差具有对称性和正定性。混合高斯分布:,它的的概率密度函数为:

其中,为混合高斯分布的期望为其协方差表示协方差的行列式。

下面用图形直观的看一下二维高斯分布的性质:

以上三个图形的期望都为:,最左端图形的协方差,中间的,最右端的,我们可以看出:当变小时,图像变得更加“瘦长”,而当增大时,图像变得更加“扁平”。

再看看更多的例子:


以上三个图形的期望都为:,从左至右三个图形的协方差分别的:

可以看到随着矩阵的逆对角线数值增加,图形延方向,即底部坐标45度角压缩。图形在这个方向更加“扁”。


以上三幅图分别是以上图形的等高线,可以更直观的看到调整逆对角线的数值对图像的压缩程度。

以上三幅图保持协方差不变,期望的值分别为

可以看出,随着期望的改变,图形在平面上平移,而其他特性保持不变。

二、高斯判别分析模型

如果特征值x是连续的随机变量,我们可以使用高斯判别分析模型完成特征值的分类。为了简化模型,假设特征值为二分类,分类结果服从0-1分布。(如果为多分类,分类结果就服从二项分布)

模型基于这样的假设:

他们的概率(密度)函数分别为:



模型的待估计参数为,通常模型有两个不同的期望,而有一个相同的协方差。

该模型的极大似然对数方程为:

                                                                                         

                                                        

                                                        

求解该极大似然方程得:




在对计算完成之后,将新的样本x带入进建立好的模型中,计算出,选取概率更大的结果为正确的分类。

三、GDA和logistic回归

GDA模型和logistic回归模型存在这样有趣的关系:假如我们将视作关于x的函数,该函数可以表示成logistic回归形式:


其中,可以用以为变量的函数表示。

前文中已经提到,如果为混合高斯分布,那么,就可以表示成logistic回归函数形式;相反,如果可表示成logistic回归函数形式,并不代表服从混合高斯分布。这意味着GDA比logistic回归需要更加严格的模型假设,当然,如果混合高斯模型的假设是正确的,那么,GDA具有更高的拟合度。基于以上原因,在实践中使用logistic回归比使用GDA更普遍。


### 关于机器学习中的高斯判别分析 #### 理论基础 高斯判别分析(Gaussian Discriminant Analysis, GDA)是一种基于生成模型的方法,在处理二分类或多分类问题上表现良好。此方法假设给定类别的样本特征遵循多维正态分布,即对于每一个类别 \(c\) ,\(P(x|y=c)\) 是一个多维正态分布函数[^1]。 具体来说,如果考虑的是二元分类,则有: \[ P(x | y = 0) \sim N(\mu_0,\Sigma),\quad P(x | y = 1) \sim N(\mu_1,\Sigma) \] 其中,\(\mu_c\) 表示第 c 类的数据均值向量;而 \(\Sigma\) 则代表共同协方差矩阵。通过估计这些参数并应用贝叶斯决策规则来决定新实例所属的类别[^2]。 #### 参数估计与实现方式 为了构建高斯判别分析模型,需要完成以下几个步骤: - **数据预处理**: 对训练集进行标准化或归一化操作以确保各维度具有相同尺度。 - **参数拟合**: 使用极大似然法估算每种类别下的平均向量和共享协方差矩阵。这可以通过遍历所有属于同一标签的数据点来进行统计汇总得到[^3]。 ```python import numpy as np from scipy.stats import multivariate_normal def fit_gda(X_train, y_train): phi = sum(y_train)/len(y_train) mu_0 = X_train[y_train==0].mean(axis=0) mu_1 = X_train[y_train==1].mean(axis=0) sigma = ((X_train[y_train==0]-mu_0).T.dot((X_train[y_train==0]-mu_0)) + (X_train[y_train==1]-mu_1).T.dot((X_train[y_train==1]-mu_1))) / len(X_train) return {'phi': phi, 'mu_0': mu_0, 'mu_1': mu_1, 'sigma': sigma} gda_params = fit_gda(X_train, y_train) ``` 接着就可以利用已知参数计算任意输入 x 属于两个可能类别的后验概率,并据此作出预测[^4]: ```python def predict_proba(gda_params, X_test): mvn_0 = multivariate_normal(mean=gda_params['mu_0'], cov=gda_params['sigma']) mvn_1 = multivariate_normal(mean=gda_params['mu_1'], cov=gda_params['sigma']) p_y0_x = (1-gda_params['phi']) * mvn_0.pdf(X_test) p_y1_x = gda_params['phi'] * mvn_1.pdf(X_test) proba = p_y1_x/(p_y0_x+p_y1_x) return proba proba_predictions = predict_proba(gda_params, X_test) ``` #### 应用场景 当面对有限数量的小规模数据集时,尤其是那些能够很好地由单一模式描述的情况,比如医学诊断、金融风险评估等领域内的某些特定任务,高斯判别分析往往能提供较为理想的性能。这是因为相比于逻辑回归这样的判别型算法,它更依赖于对底层分布的理解而不是仅仅关注边界划分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值