Python线性分类

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

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

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

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

import numpy as np
X = np.loadtxt(open("data/abalone.txt", "r"))
X.shape
from scipy.stats import multivariate_normal
import 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] == index
percent_correct = np.sum(correct) * 100.0 / index.shape
print(percent_correct)

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

使用等协方差矩阵:
如果您正确地遵循了与上一本笔记相同的步骤,您将为每个类估计出一个单独的协方差矩阵。这些矩阵将不相等,因此您的系统将不是线性分类器(即,它将具有非平面决策边界)。为了将其简化为线性系统,我们需要确保只有一个协方差矩阵。您可以想象这样做的不同方式:
首先,您可以想象简单地从完整的训练集中估计单个协方差矩阵,然后再将其划分为类。这将生成一个矩阵,但这不是正确的做法。我们希望矩阵表示类内的分布,如果您仅使用完整的训练数据集训练模型,它还将捕获类间的分布。
其次,可以想象平均两个类相关协方差矩阵。这更接近于正确的情况,但它没有考虑到类的示例数可能不相等这一事实。
最好的方法是首先将两个类的中心移动到同一点上,然后将它们视为单个类。要将类中心移动到同一点上,只需从每个数据样本中减去类平均向量。

def centre_data(data):nsamples = data.shape[0]data_mean = np.mean(data, axis=0)data_centred = data - data_meanreturn 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] == index
percent_correct = np.sum(correct) * 100.0 / index.shape
print(percent_correct)

Python线性分类相关推荐

  1. 基于python的分类模型_python SVM 线性分类模型的实现

    运行环境:win10 64位 py 3.6 pycharm 2018.1.1 导入对应的包和数据 import matplotlib.pyplot as plt import numpy as np ...

  2. 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习

    Iris数据集的Fisher线性分类以及数据可视化技术的学习 1.Iris数据集的Fisher线性分类 2.数据可视化技术的学习 1.数据集介绍 2.观看数据前5行 3.特征工程 1.数据清洗 2.数 ...

  3. CS231n课程笔记翻译3:线性分类笔记

    译者注 :本文 智能单元 首发,译自斯坦福CS231n课程笔记 Linear Classification Note ,课程教师 Andrej Karpathy 授权翻译.本篇教程由 杜客 翻译完成, ...

  4. 支持向量机鸢尾花Iris数据集的SVM线性分类练习

    支持向量机&鸢尾花Iris数据集的SVM线性分类练习 摘要 一.SVM基础 1.三种支持向量机 2.非线性支持向量机 二.鸢尾花实例 1.认识鸢尾花 2.鸢尾花实例演示 3.使用多项式特征和核 ...

  5. Bishop 模式识别与机器学习读书笔记 || 线性分类模型之判别函数的几何建模

    线性分类模型之判别函数的几何建模 文章目录 线性分类模型之判别函数的几何建模 1. 判别函数 1.1 两类问题 1.2 多类问题 1.3 Fisher 线性判别 LDA 算法 1.3 代码实现 1.4 ...

  6. 斯坦福大学卷积神经网络----Module 1 Lesson 2 线性分类

    原文地址:http://cs231n.github.io/linear-classify/ 标题:Linear classification: Support Vector Machine, Soft ...

  7. CS231n课程笔记翻译:线性分类笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Linear Classification Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校 ...

  8. 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集

    混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录

  9. Python多分类问题下,micro-PR计算以及macro-PR计算

    Python多分类问题下,micro-PR计算以及macro-PR计算 #二分类的Precision和Recall计算公式 在普通的二分类问题中通过混淆矩阵可以轻松地计算出来Precison和Reca ...

最新文章

  1. 链表问题17—— 一种怪异的节点删除方式
  2. Win7 + VS2015 + Python3.6编译
  3. 经典面试题(35):以下代码将输出的结果是什么?
  4. ROS笔记(13) 记录与回放数据
  5. AIX系统root用户密码忘记
  6. JAVA移慎_java里面给对象赋值,慎用赋值符号(=) (转)
  7. 华景机器人怎么控制_【扫地机器人选购】支持华为hilink智能家居联动/支持华为小艺语音控制的扫地机器人...
  8. 错误 -source 1.6 中不支持 diamond 运算符的解决办法(已解决)
  9. 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
  10. 远程桌面连接下拉框IP地址删除
  11. debian10编译安装mysql
  12. 看黄天鹅如何下一颗高端鸡蛋?
  13. 区块链隐私保护(一): 交易层的隐私保护机制
  14. 二维码生成(带文字)
  15. ulimit命令参数及用法
  16. c语言浮点数和0比较大小,C-浮点数为什么不能和0比较?
  17. 圆周率不用计算机怎么算,为何圆周率算了这么多年还没算完?就连超级计算机都“无可奈何”...
  18. 计算机人机交互接口论文,人机交互论文中英对照.doc
  19. 发射瞬时速度约束下的弹道导弹轨迹仿真算法
  20. 谷雨主题的微信公众号图文排版有哪些技巧?

热门文章

  1. VBA向单元格输入双引号
  2. php 判断是否汉字
  3. 配置activiti控制台打印SQL
  4. 亿道丨三防平板丨加固平板丨三防加固平板丨改善资产管理
  5. Python按键精灵自动化
  6. 爆款短视频封面的三个核心要素
  7. Git 使用详解,日常使用 | 什么是git
  8. 互联网晚报 | 7月17日 星期日 | iPhone 14量产在即;首款国产科学计算软件研发成功;上半年广东人均收入2.47万元...
  9. 2022-02-13 机器学习基本概念
  10. 使用DeepWalk从图中提取特征