news 2026/4/23 16:23:48

机器学习 - 高斯判别分析(Gaussian Discriminant Analysis)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习 - 高斯判别分析(Gaussian Discriminant Analysis)

摘要:高斯判别分析(GDA)是一种基于高斯分布的生成式分类算法,通过建模各类别的多元高斯分布进行预测。该算法要求数据满足连续型、正态分布、协方差矩阵相同等假设条件。在Python中可通过scikit-learn的QuadraticDiscriminantAnalysis实现,在鸢尾花数据集上通常能达到97%以上的准确率。虽然存在假设限制,但GDA仍是处理连续型数据的有效分类方法。

目录

机器学习 - 高斯判别分析(Gaussian Discriminant Analysis)

GDA 算法对数据的假设条件

示例

示例说明

输出结果

总结


机器学习 - 高斯判别分析(Gaussian Discriminant Analysis)

高斯判别分析(Gaussian Discriminant Analysis,简称 GDA)是机器学习中用于分类任务的一种统计算法。它是一种生成式模型,通过高斯分布对每个类别的数据分布进行建模,也被称为高斯朴素贝叶斯分类器(Gaussian Naive Bayes classifier)。

GDA 的核心思想是将每个类别的数据分布建模为多元高斯分布。给定一组训练数据,算法会估计每个类别分布的均值(mean)和协方差矩阵(covariance matrix)。模型参数估计完成后,即可用于预测新数据点属于各个类别的概率,并将概率最高的类别作为最终预测结果。

GDA 算法对数据的假设条件

  1. 特征为连续型数据,且服从正态分布(高斯分布);
  2. 每个类别的协方差矩阵相同;
  3. 给定类别标签的条件下,各特征之间相互独立。

假设 1 意味着 GDA 不适用于含分类特征或离散特征的数据;假设 2 表明 GDA 要求每个特征的方差在所有类别中保持一致,若实际数据不满足这一条件,算法性能可能会受影响;假设 3 即 “类条件独立” 假设,这一假设可通过另一种算法 —— 线性判别分析(Linear Discriminant Analysis,简称 LDA)来放宽。

示例

在 Python 中实现 GDA 相对简便,以下是使用 scikit-learn 库在鸢尾花(Iris)数据集上实现 GDA 的示例代码:

from sklearn.datasets import load_iris from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis from sklearn.model_selection import train_test_split # 加载鸢尾花数据集 iris = load_iris() # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.3, random_state=42 ) # 训练GDA模型(二次判别分析为GDA的实现形式之一) gda = QuadraticDiscriminantAnalysis() gda.fit(X_train, y_train) # 在测试集上进行预测 y_pred = gda.predict(X_test) # 评估模型准确率(通过对比预测标签与真实标签) accuracy = (y_pred == y_test).mean() print('准确率(Accuracy):', accuracy)
示例说明

该示例首先通过 scikit-learn 的load_iris函数加载鸢尾花数据集,再使用train_test_split函数将数据按 7:3 的比例划分为训练集(用于模型训练)和测试集(用于性能评估)。随后创建QuadraticDiscriminantAnalysis(二次判别分析)对象(其本质是 GDA 的一种实现形式),通过fit方法在训练集上训练模型,再调用predict方法在测试集上生成预测结果,最后通过对比预测标签与真实标签计算模型准确率。

输出结果

代码运行后将输出模型在测试集上的准确率。对于鸢尾花数据集,GDA 模型的准确率通常在 97%-99% 之间,典型输出如下:

plaintext

准确率(Accuracy): 0.9811320754716981

总结

GDA 是一种强大的分类算法,适用于处理多种数据类型,尤其擅长连续型且服从正态分布的数据。尽管它对数据提出了若干假设条件,但在众多实际应用场景中,仍是一种实用且高效的算法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 1:05:58

Java毕设选题推荐:基于Java web的电影院选票系统电影场次编号、电影名称、该场次电影单价、播放日期、播放时间段、所在放映厅、放映厅座位当【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/23 16:07:24

Java多线程编程技巧:面试必看的几种实现方式!

文章目录 Java多线程编程技巧:面试必看的几种实现方式!为什么我们需要多线程?Java多线程的实现方式1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 使用线程池(ThreadPoolExecutor)5. 并行流(Ja…

作者头像 李华
网站建设 2026/4/23 7:49:51

开题报告+基于Python的家庭安防监控系统设计与实现

目录 开题报告概述系统核心功能技术实现方案创新点与难点预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 开题报告概述 基于Python的家庭安防监控系统旨在通过现代技术手段提升家庭安全防护能力…

作者头像 李华