千家信息网

Python线性分类是什么意思

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章给大家分享的是有关Python线性分类是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过约束类的协方差相等,将贝叶斯分类器简化为线性分类器。比较生成模型和
千家信息网最后更新 2025年01月21日Python线性分类是什么意思

这篇文章给大家分享的是有关Python线性分类是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

通过约束类的协方差相等,将贝叶斯分类器简化为线性分类器。
比较生成模型和判别模型在挑战性分类任务中的性能。

在本实验课中:我们将比较线性分类的"生成建模"和"判别建模"方法。对于"生成"方法,我们将重新讨论我们在前面练习中使用的贝叶斯分类代码,但我们将限制系统具有相等的协方差矩阵,即一个协方差矩阵来表示所有类别,而不是每个类别都有其自己的协方差矩阵。在这种情况下,系统成为线性分类器。我们将把它与"判别式"方法进行比较,在这种方法中,我们使用感知器学习算法直接学习线性分类器参数。

在本笔记本中,我们将使用UCI机器学习库中的另一个数据集:鲍鱼数据。鲍鱼是一种海螺。一个样本的年龄可以通过在圆锥体上切割外壳和用显微镜(更像是树木)计数环来确定,但这是一个耗时且昂贵的过程。这里的任务是通过简单的外部测量动物的重量和尺寸,尝试并预测环的数量。对于我们正在使用的数据集,环数的真实值是已知的(即,在测量蜗牛后对环进行计数)。结果从1到29个环不等,因此这通常被视为29类分类问题。为了简化一些,我将数据重新组合成两个大小大致相同的类:年轻(少于10个环)和老年(10个或更多个环)。我也只采集了女性样本。有7个测量值(都是高度相关的)用于预测类别标签。

生成性建模:具有等协变多元正态分布的贝叶斯分类。
与上一个介绍相比,有更多的样本(1306个,178个),因此我们不必担心遗漏一个测试,相反,我们只需像上一个一样,将数据切割成大小相同的测试和训练集。
通过修改上次编写的代码,使用具有完全协方差矩阵的多元正态分布来评估贝叶斯分类器的性能。在考虑对代码进行更改时,请注意,主要区别在于本笔记本中只有两个类,而不是三个。(如果您愿意,您可以尝试将代码包装到函数中,看看是否可以将其设计为适用于任意数量的类。)
您的分类器的性能如何?此任务的分数可能在60%-70%之间,因此,如果性能似乎比前一个任务差很多,请不要担心。如果性能低于60%,那么您应该检查代码是否存在可能的bug。

import numpy as npX = np.loadtxt(open("data/abalone.txt", "r"))X.shapefrom scipy.stats import multivariate_normalimport matplotlib.pyplot as plt%matplotlib inlineabalone1 = X[X[:, 0] == 1, :]abalone2 = X[X[:, 0] == 2, :]abalone1_test = abalone1[0::2, :]abalone1_train = abalone1[1::2, :]abalone2_test = abalone2[0::2, :]abalone2_train = abalone2[1::2, :]abalone_test = np.vstack((abalone1_test, abalone2_test))abalone_test.shapemean1 = np.mean(abalone1_train[:, 1:], axis=0)mean2 = np.mean(abalone2_train[:, 1:], axis=0)cov1 = np.cov(abalone1_train[:, 1:], rowvar=0)cov2 = np.cov(abalone2_train[:, 1:], rowvar=0)dist1 = multivariate_normal(mean=mean1, cov=cov1)dist2 = multivariate_normal(mean=mean2, cov=cov2)p1 = dist1.pdf(abalone_test[:, 1:])p2 = dist2.pdf(abalone_test[:, 1:])p = np.vstack((p1, p2))index = np.argmax(p, axis=0) + 1plt.plot(index, "k.", ms=10)correct = abalone_test[:, 0] == indexpercent_correct = np.sum(correct) * 100.0 / index.shapeprint(percent_correct)

rowvarbool,可选

如果rowvar为True(默认),则每行表示一个变量,列中包含观察值。否则,关系将被转换:每列表示一个变量,而行包含观察值。

使用等协方差矩阵:

如果您正确地遵循了与上一本笔记相同的步骤,您将为每个类估计出一个单独的协方差矩阵。这些矩阵将不相等,因此您的系统将不是线性分类器(即,它将具有非平面决策边界)。为了将其简化为线性系统,我们需要确保只有一个协方差矩阵。您可以想象这样做的不

同方式:

首先,您可以想象简单地从完整的训练集中估计单个协方差矩阵,然后再将其划分为类。这将生成一个矩阵,但这不是正确的做法。我们希望矩阵表示类内的分布,如果您仅使用完整的训练数据集训练模型,它还将捕获类间的分布。
其次,可以想象平均两个类相关协方差矩阵。这更接近于正确的情况,但它没有考虑到类的示例数可能不相等这一事实。
最好的方法是首先将两个类的中心移动到同一点上,然后将它们视为单个类。要将类中心移动到同一点上,只需从每个数据样本中减去类平均向量。

def centre_data(data):    nsamples = data.shape[0]    data_mean = np.mean(data, axis=0)    data_centred = data - data_mean    return data_centredabalone1_centred = centre_data(abalone1_train)abalone2_centred = centre_data(abalone2_train)abalone_centred = np.vstack((abalone1_centred, abalone2_centred))cov_global = np.cov(abalone_centred[:, 1:], rowvar=0)dist1 = multivariate_normal(mean=mean1, cov=cov_global)dist2 = multivariate_normal(mean=mean2, cov=cov_global)p1 = dist1.pdf(abalone_test[:, 1:])p2 = dist2.pdf(abalone_test[:, 1:])p = np.vstack((p1, p2))index = np.argmax(p, axis=0) + 1plt.plot(index, "k.", ms=10)correct = abalone_test[:, 0] == indexpercent_correct = np.sum(correct) * 100.0 / index.shapeprint(percent_correct)

感谢各位的阅读!关于"Python线性分类是什么意思"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

分类 矩阵 协方差 线性 数据 代码 性能 方法 生成 两个 任务 更多 样本 系统 贝叶 训练 相同 模型 笔记 类别 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技产品的前景 服务器配置清单2021年 数据库管理软件 参数 衡水市委网络安全和信息化 acer网络安全模式 网络安全人员紧缺 军人网络安全对照检查6 备用dns服务器在电脑哪里查看 知网中国硕士论文数据库 江门自主可控软件开发维修电话 北京北斗卫星网络技术有限公司 部落冲突建筑匹配数据库 无代码软件开发图片 电视电信网络无法连接服务器 郑州校园网移动的服务器 软件开发架构选择 怀化软件开发培训多少钱 赤峰宝妈团网络技术 软件开发需要多少资金用途如何写 太原网络安全培训学校好找工作吗 随着网络技术的频繁使用的英语 物理删除怎么操作数据库数据 校园网络安全从我做起手抄报 华为网络安全考试题库 软件开发 怎样接活 中星商业管理系统服务器设置 工行软件开发中心有哪几个 网络技术市值 中宾网络技术官网 数据库不能有重复的数据
0