pytorch&scikit-learn机器学1- 赋予计算机从数据中学习的能力

yizhihongxing

在我看来,机器学习即对数据有意义的算法的应用和科学,是所有计算机科学中最令人兴奋的领域!利用机器学习领域的自学算法,我们可以将这些数据转化为知识。

在本章中,我们将涵盖以下主题:

  • 机器学习的一般概念
  • 三种类型的学习和基本术语
  • 成功设计机器学习系统的基石
  • 安装和设置用于数据分析和机器学习的Python
  • 构建智能机器,将数据转化为知识

机器学习的一般概念

在这个现代技术的时代有大量的结构化和非结构化数据。在20世纪下半叶,机器学习作为人工智能(AI)的子领域发展起来,涉及到自学算法,从数据中得出知识,进行预测。

与其要求人类从分析大量数据中手动推导出规则并建立模型,机器学习提供了更有效的替代方案,捕捉数据中的知识,逐步提高预测模型的性能,做出数据驱动的决策。

由于机器学习,我们享有强大的电子邮件垃圾邮件过滤器,方便的文本和语音识别软件,可靠的网络搜索引擎,娱乐性电影的观看建议,移动支票存款,估计送餐时间,以及更多。希望不久之后,我们将把安全高效的自动驾驶汽车添加到这个列表中。此外,在医疗应用方面也取得了明显的进展;例如,研究人员证明,深度学习模型可以以接近人类的准确度检测皮肤癌。另一个里程碑是最近由DeepMind的研究人员取得的,他们使用深度学习来预测三维蛋白质结构,比基于物理学的方法要好得多。研究人员设计了提前四天预测COVID-19患者的氧气需求的系统,以帮助医院为需要的人分配资源。我们这个时代的另一个重要话题是气候变化,它是最大和最关键的挑战之一。研究人员旨在设计基于计算机视觉的机器学习系统,以优化资源配置,尽量减少肥料的使用和浪费。

机器学习的三种不同类型

在本节中,我们将看一下机器学习的三种类型:监督学习、无监督学习和强化学习。我们将了解这三种不同的学习类型之间的根本区别,并利用概念性的例子,对它们可以应用的实际问题领域进行了解:

image

  • 用监督学习对未来进行预测

监督学习的主要目标是从标记的训练数据中学习一个模型,使我们能够对未见的或未来的数据进行预测。在这里,术语 "监督 "指的是一组训练实例(数据输入),其中所需的输出信号(标签)已经知道。监督下的学习是对数据输入和输出之间的关系进行建模的过程。 因此,我们也可以把监督学习看作是 "标签学习"。

下图总结了典型的监督学习工作流程:标记的训练数据被传递给机器学习算法,用于拟合预测模型,该模型可以对新的、未标记的数据输入进行预测:

pytorch&scikit-learn机器学1- 赋予计算机从数据中学习的能力

我们可以使用监督机器学习算法在已标记的邮件语料库上训练一个模型,这些邮件被正确地标记为垃圾邮件或非垃圾邮件,以预个新邮件是否属于这两个类别。有离散类标签的监督学习任务,如前面的垃圾邮件过滤例子,也被称为分类任务。监督学习的另一个子类别是回归,其中结果信号是一个连续值。

分类是监督学习的子类别,其目标是根据过去的观察结果来预测新实例或数据点的分类标签。这些类标签是离散的、无序的值,可以理解为数据点的组别成员。前面提到的垃圾邮件检测的例子代表了二元分类任务的典型例子,机器学习算法学习了一套规则来区分两个可能的类别:垃圾邮件和非垃圾邮件。

下图说明了给定30个训练实例的二元分类任务的概念;15个训练实例被标记为A类,15个训练实例被标记为B类。在这种情况下,我们的数据集是二维的,这意味着每个实例有两个与之相关的值:x1和x2。现在,我们可以使用监督下的机器学习算法来学习一条规则--用虚线表示的决策边界--它可以将这两个类别分开,并将新的数据分类到这两个类别中,因为它的值是x1和x2。

image

类标签的集合不一定是二进制性质的。由监督学习算法学习的预测模型可以将训练数据集中出现的任何类别标签分配给新的、未标记的数据点或实例。

多类分类任务的典型例子是手写字符识别。我们可以收集一个训练数据集,其中包括字母表中每个字母的多个手写例子。这些字母("A"、"B"、"C"等)将代表我们想要预测的不同无序类别或类标签。现在,如果用户通过输入设备提供新的手写字符,我们的预测模型将能够以一定的准确性预测出字母表中的正确字母。然而,我们的机器学习系统将无法正确识别0到9之间的任何数字,如果它们不是训练数据集的一部分。

第二种类型的监督学习是预测连续结果,这也被称为回归分析。在回归分析中,我们得到一些预测(解释)变量和连续的响应变量(结果),我们试图找到这些变量之间的关系,使我们能够预测结果。

注意,在机器学习领域,预测变量通常被称为 "特征",而响应变量通常被称为 "目标变量"。

例如,让我们假设我们对预测学生的数学SAT分数感兴趣。(SAT是美国大学录取时经常使用的一种标准化考试)。如果学习考试的时间和最终的分数之间有关系,我们可以用它作为训练数据来学习一个模型,用学习时间来预测未来计划参加这个考试的学生的考试分数。

他观察到,父母的身高并没有传给他们的孩子,相反,他们的孩子的身高会向人群的平均水平倒退。

下图说明了线性回归的概念。给定特征变量x和目标变量y,我们对这个数据拟合一条直线,使数据点和拟合线之间的距离最小--最常见的是平均平方距离。

image

  • 用强化学习解决互动问题

在强化学习中,目标是开发一个系统(代理),根据与环境的交互作用来提高其性能。由于关于环境当前状态的信息通常还包括奖励信号,我们可以认为强化学习是监督学习有关的领域。然而,在强化学习中,这种反馈不是正确的基础真理标签或价值,而是衡量该行动被奖励函数所衡量的程度。通过与环境的互动,代理可以使用强化学习来学习一系列的行动,通过探索性的试错方法或深思熟虑的规划来使这个奖励最大化。

强化学习的流行的例子是国际象棋程序。在这里,代理人根据棋盘(环境)的状态来决定一系列的动作,奖励可以定义为游戏结束时的赢或输:

image

强化学习有许多不同的子类型。然而普遍的方案是,强化学习中的代理人试图通过与环境的一系列互动来实现奖励的最大化。每个状态都可以与正或负的奖励相关联,奖励可以被定义为完成一个总体目标,如赢或输一盘棋。例如,在国际象棋中,每一步棋的结果可以被认为是环境的不同状态。

为了进一步探讨国际象棋的例子,我们可以认为访问棋盘上的某些配置与更有可能导致胜利的状态有关--例如,从棋盘上移走对手的棋子或威胁到皇后。而其他位置则与更有可能导致输掉比赛的状态有关,例如在下一回合输给对手一个棋子。现在,在国际象棋游戏中,奖励(赢棋的正面奖励或输棋的负面奖励)将在游戏结束时才会给出。此外,最后的奖励也将取决于对手如何下棋。例如,对手可能会牺牲皇后,但最终赢得比赛。

总之,强化学习关注的是学会选择一系列行动,使总奖励最大化,奖励可以在采取行动后立即获得,也可以通过延迟的反馈获得。

  • 用无监督学习发现隐藏结构

在监督学习中,当我们训练一个模型时,我们事先知道正确的答案(标签或目标变量),而在强化学习中,我们为代理进行的特定行动定义了奖励的措施。然而,在无监督学习中,我们要处理的是没有标签的数据或未知结构的数据。使用无监督学习技术,我们能够探索数据的结构,在没有已知的结果变量或奖励函数的指导下提取有意义的信息。

聚类是一种探索性的数据分析或模式发现技术,它允许我们将一堆信息组织成有意义的子组(聚类),而不需要事先了解它们的组员身份。在分析过程中产生的每个聚类定义了一组具有一定程度相似性的对象,但与其他聚类中的对象更不相似,这就是为什么聚类有时也被称为无监督分类。聚类是一种构造信息和从数据中得出有意义关系的伟大技术。例如,它允许营销人员根据客户的兴趣来发现客户群,以便制定不同的营销方案。

下图说明了聚类是如何应用于将无标签的数据根据其特征x1和x2的相似性组织成三个不同的群体或聚类(A、B和C,顺序任意):

image

无监督学习的另一个子领域是降维。通常情况下,我们要处理的是高维数据--每个观察值都有大量的测量值--这对有限的存储空间和机器学习算法的计算性能是一个挑战。无监督的降维是特征预处理中常用的方法,可以去除数据中的噪音,这可能降低某些算法的预测性能。降维将数据压缩到较小的维度子空间,同时保留大部分相关信息。

有时,降维对于数据的可视化也很有用;例如,高维特征集可以被投射到一维、二维或三维特征空间上,通过二维或三维散点图或直方图进行可视化。下图显示了一个应用非线性降维的例子,将三维瑞士卷压缩到一个新的二维特征子空间:

image

基本术语和记号的介绍

下图Iris数据集的节选,这是机器学习领域的一个经典案例(更多信息可以在https://archive.ics.uci.edu/ml/datasets/iris)。鸢尾花数据集包含来自三个不同品种的150朵鸢尾花的测量结果--Setosa, Versicolor, 和Virginica。

在这里,每个花的例子代表我们数据集中的一行,以厘米为单位的花的测量值被存储为列,我们也称之为数据集的特征:

image

为了使符号和实现简单而有效,我们将利用线性代数的一些基础知识。在下面的章节中,我们将使用矩阵符号来指代我们的数据。我们将遵循常见的惯例,将每个例子表示为特征矩阵X中的一个单独的行,其中每个特征被存储为一个单独的列。

Iris数据集由150个例子和4个特征组成,因此可以写成150×4的矩阵,形式上表示为 :

我们将使用上标i指代第i个训练实例,下标j指代训练数据集的第j个维度。

我们将使用小写的粗体字来指代向量,大写的粗体字来指代矩阵。为了指代向量或矩阵中的单个元素,我们将用斜体字写字母。

例如,指的是花例150的第一个维度,即萼片长度。矩阵X中的每一行代表一个花的实例,可以写成一个四维行向量, :

而每个特征维度是一个150维的列向量, 。举例来说:

同样,我们可以把目标变量(这里是指类标签)表示为150维的列向量:

机器学习是一个庞大的领域,也是非常跨学科的领域,因为它汇集了许多来自其他研究领域的科学家。恰好,许多术语和概念被重新发现或重新定义,可能已经为你所熟悉,但以不同的名称出现。为了方便起见,在下面的列表中,你可以找到一些常用的术语和它们的同义词,你在阅读本书和一般的机器学习文献时可能会发现它们很有用:

训练实例: 表中代表数据集的一行,与观察、记录、实例或样本同义(在大多数情况下,样本是指训练实例的集合)。
训练: 模型拟合,对于参数模型类似于参数估计。
特征,缩写为x: 数据表或数据(设计)矩阵中的一列。与预测器、变量、输入、属性或协变量同义。
目标,缩写为y: 与结果、输出、响应变量、因果变量、(类)标签和基本事实同义。

损失函数: 通常与成本函数同义使用。有时损失函数也被称为误差函数。在一些文献中,"损失 "一词指的是针对单个数据点测量的损失,而成本是计算整个数据集的损失(平均或加总)的测量。

构建机器学习系统的路线图

在前面的章节中,我们讨论了机器学习的基本概念和三种不同的学习类型。在本节中,我们将讨论机器学习系统中伴随着学习算法的其他重要部分。

image

  • 预处理--使数据成型

原始数据很少以学习算法的最佳性能所需的形式和形状出现。因此,数据的预处理是任何机器学习应用中最关键的步骤之一。

如果我们以上一节中的鸢尾花数据集为例,我们可以把原始数据看成是一系列的花卉图像,我们要从中提取有意义的特征。有用的特征可以围绕花的颜色或花的高度、长度和宽度。

许多机器学习算法还要求所选特征在同一尺度上以获得最佳性能,这通常是通过在[0, 1]范围内转换特征或具有零平均值和单位方差的标准正态分布来实现。

一些被选中的特征可能是高度相关的,因此在一定程度上是多余的。在这些情况下,降维技术对于将特征压缩到较低维度的子空间是很有用的。降低特征空间的维度需要更少的存储空间,而且学习算法可以运行得更快。在某些情况下,如果数据集包含大量不相关的特征(或噪声);也就是说,如果数据集的信噪比很低,降维也可以提高模型的预测性能。

为了确定我们的机器学习算法不仅在训练数据集上表现良好,而且对新数据也有很好的泛化作用,我们还想把数据集随机分成独立的训练和测试数据集。我们使用训练数据集来训练和优化我们的机器学习模型,而将测试数据集保留到最后以评估最终模型。

  • 训练和选择预测模型

每种分类算法都有其固有的偏见,如果我们不对任务做任何假设,没有任何分类模型有优势。因此,在实践中,必须至少比较一些不同的学习算法,以训练和选择性能最好的模型。但在比较不同的模型之前,我们首先要决定衡量性能的指标。常用的指标是分类精度,它被定义为正确分类的实例比例。

如果我们不使用这个测试数据集进行模型选择,而是保留它进行最终的模型评估,我们怎么知道哪个模型在最终的测试数据集和真实世界的数据上表现良好?为了解决这个问题中蕴含的问题,可以使用被总结为 "交叉验证 "的不同技术。在交叉验证中,我们将数据集进一步划分为训练子集和验证子集,以估计模型的泛化性能。

最后,我们也不能指望软件库提供的不同学习算法的默认参数对我们的具体问题任务来说是最优的。因此,我们将经常使用超参数优化技术,帮助我们在后面的章节中对模型的性能进行微调。

我们可以把这些超参数看作不是从数据中学习出来的参数,而是代表模型的旋钮,我们可以转动它来提高其性能。在后面的章节中,当我们看到实际的例子时,这将变得更加清晰。

  • 评估模型和预测未见过的数据实例

在我们选择了一个在训练数据集上拟合的模型后,我们可以使用测试数据集来估计它在这些未见过的数据上的表现,以估计所谓的泛化误差。如果我们对它的表现感到满意,我们现在可以用这个模型来预测新的、未来的数据。需要注意的是,前面提到的程序的参数,如特征缩放和降维,完全是从训练数据集中获得的,同样的参数后来被重新应用于转换测试数据集,以及任何新的数据实例--否则在测试数据上测量的性能可能过于乐观了。

使用Python进行机器学习

  • Anaconda

Python是数据科学中最流行的编程语言,由于其非常活跃的开发者和开源社区,已经开发了大量有用的科学计算和机器学习的库。

尽管Python等解释型语言在计算密集型任务方面的性能不如低级别的编程语言,但NumPy和SciPy等扩展库已经被开发出来,它们建立在低级别的Fortran和C实现之上,用于对多维数组进行快速矢量操作。

对于机器学习编程任务,我们将主要参考scikit-learn库,它是目前最流行和最容易获得的开源机器学习库之一。在后面的章节中,当我们关注机器学习的一个子领域--深度学习时,我们将使用最新版的PyTorch库,它专门通过利用显卡非常有效地训练所谓的深度神经网络模型。

强烈推荐的用于科学计算背景下安装Python的开源软件包管理系统是Continuum Analytics的Conda。Conda是免费的,并在许可性的开源许可证下授权。它的目标是帮助数据科学、数学和工程的Python包在不同的操作系统上进行安装和版本管理。如果你想使用conda,它有不同的版本,即Anaconda、Miniconda和Miniforge:

Anaconda预装了许多科学计算软件包。Anaconda的安装程序可以在https://docs.anaconda.com/anaconda/install/,而Anaconda的快速入门指南可以在https://docs.anaconda.com/anaconda/user-guide/getting-started/。
Miniconda是Anaconda的一个更精简的替代品(https://docs.conda.io/en/latest/miniconda.html)。本质上,它与Anaconda相似,但没有预装任何软件包,许多人(包括作者)都喜欢这样。
Miniforge与Miniconda类似,但由社区维护,并使用与Miniconda和Anaconda不同的包库(conda-forge)。我们发现Miniforge是Miniconda的很好的替代品。下载和安装说明可以在GitHub仓库中找到:https://github.com/conda-forge/miniforge。
在通过 Anaconda、Miniconda 或 Miniforge 成功安装 conda 后,我们可以使用以下命令安装新的 Python 包:

conda install SomePackage
conda update SomePackage

不能通过官方conda渠道获得的软件包可能会通过社区支持的conda-forge项目(https://conda-forge.org)获得,这可以通过-channel conda-forge标志指定。比如说

conda install SomePackage --channel conda-forge

不能通过默认的conda通道或conda-forge获得的软件包可以通过pip安装,如前所述。比如说

pip install SomePackage
  • 用于科学计算、数据科学和机器学习的软件包

在本书的前半部分,我们将主要使用NumPy的多维数组来存储和处理数据。偶尔,我们会使用pandas,这是建立在NumPy之上的库,它提供了额外的高级数据操作工具,使处理表格数据更加方便。为了增强你的学习体验,并将定量数据可视化,这对理解数据往往非常有用,我们将使用非常可定制的Matplotlib库。

NumPy
SciPy
Scikit-learn 
Matplotlib 
pandas

原文链接:https://www.cnblogs.com/testing-/p/17354838.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch&scikit-learn机器学1- 赋予计算机从数据中学习的能力 - Python技术站

(0)
上一篇 2023年5月4日
下一篇 2023年5月4日

相关文章

  • 图像处理3 Felzenszwalb算法的Python实现 图像处理2 基于图的图像分割算法 Python 调用 C/C++实现卷积

    介绍 算法介绍上一篇随笔中很详细。 图像处理2 基于图的图像分割算法 实现和效果     # coding:utf8 import cv2 import numpy as np from skimage import io as sio from skimage.segmentation import felzenszwalb import matplotl…

    卷积神经网络 2023年4月8日
    00
  • 第3章 循环神经网络(RNN与LSTM)——3.2 BP神经网络模型

    1.正向传播,输入->隐含->输出层 (1)网络初始化,定义每层节点和权重 (2)隐藏层的输出 (3)输出层的输出 2.误差计算 3.反向传播,误差反向传播,权重更新 (1)隐藏层到输出层 (2)输入层到隐藏层 4.偏置更新 (1)隐藏层到输出层 (2)输入层到隐藏层 5.BP神经网络,前馈神经网络 (1)可以通过逐层信息传递到最后的输出 (2)…

    2023年4月8日
    00
  • skimage.io.imread vs caffe.io.load_image

    这两周在跑一个模型,我真的是被折腾的要崩溃了。 最后原因就是数据类型的问题,你说是不是应该管小黑屋啊。 skimage.io.imread得到的是uint8的数据,而caffe.io.load_image得到的是0-1之间的小数。 img=skimage.io.imread(img_path), uint8,0-255 img=caffe.io.load_i…

    Caffe 2023年4月6日
    00
  • [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题

    上一篇实践学习中,遇到了在多/单个GPU、GPU与CPU的不同环境下训练保存、加载使用使用模型的问题,如果保存、加载的上述三类环境不同,加载时会出错。就去研究了一下,做了实验,得出以下结论: 多/单GPU训练保存模型参数、CPU加载使用模型 #保存 PATH = ‘cifar_net.pth’ torch.save(net.module.state_dict…

    PyTorch 2023年4月8日
    00
  • 基于scikit-learn包实现机器学习之KNN(K近邻)-完整示例

                  基于scikit-learn包实现机器学习之KNN(K近邻) scikit-learn(简称sklearn)是目前最受欢迎,也是功能最强大的一个用于机器学习的Python库件。它广泛地支持各种分类、聚类以及回归分析方法比如支持向量机、随机森林、DBSCAN等等,由于其强大的功能、优异的拓展性以及易用性,目前受到了很多数据科学从业者…

    机器学习 2023年4月11日
    00
  • 深度学习caffe:Ubuntu16.04安装指南(1)

    caffe [CPU ONLY] 2017-01-15 最简单的安装配置方式: 不用GPU加速,使用OPENCV2.4图像库, 这是根据官方教程(链接如下)简化而得到. Ubuntu 16.04 or 15.10 Installation Guide 1. 软件源更新 刚刚安装好Ubuntu16.04的系统之后,第一步应该是更新软件源,有多种方式,这里使用的…

    2023年4月8日
    00
  • 【笔记】PyTorch快速入门:基础部分合集

    一天时间快速上手PyTorch PyTorch快速入门 Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 Tensors的初始化 有很多方式 直接给值 data = [[1,2],[3,4]] x_data = torch.tensor(data) 从NumPy数组转来 np_arr = np.array(dat…

    2023年4月8日
    00
  • Pytorch: torch.nn

    import torch as t from torch import nn class Linear(nn.Module): # 继承nn.Module def __init__(self, in_features, out_features): super(Linear, self).__init__() # 等价于nn.Module.__init__(…

    PyTorch 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部