使用 Python 进行机器学习 - 快速指南


使用 Python 进行机器学习 - 基础知识

我们生活在“数据时代”,拥有更好的计算能力和更多的存储资源。这些数据或信息日益增加,但真正的挑战是理解所有数据。企业和组织正在尝试通过使用数据科学、数据挖掘和机器学习的概念和方法构建智能系统来应对这一问题。其中,机器学习是计算机科学中最令人兴奋的领域。如果我们将机器学习称为为数据提供意义的算法的应用和科学,这并没有错。

什么是机器学习?

机器学习 (ML) 是计算机科学的一个领域,借助该领域,计算机系统可以像人类一样为数据提供意义。

简而言之,机器学习是一种人工智能,它通过使用算法或方法从原始数据中提取模式。机器学习的主要重点是允许计算机系统从经验中学习,而无需明确编程或人工干预。

机器学习的需求

此时此刻,人类是地球上最聪明、最先进的物种,因为他们能够思考、评估和解决复杂的问题。另一方面,人工智能还处于初级阶段,在很多方面还没有超越人类智能。那么问题来了,机器学习需要什么?最合适的理由是“基于数据、高效、规模化决策”。

最近,组织正在大力投资人工智能、机器学习和深度学习等新技术,以从数据中获取关键信息,以执行多项现实任务并解决问题。我们可以将其称为机器做出的数据驱动决策,特别是自动化流程。在解决本质上无法编程的问题时,可以使用这些数据驱动的决策,而不是使用编程逻辑。事实是,我们离不开人类智能,但另一方面,我们都需要大规模、高效地解决现实世界的问题。这就是为什么需要机器学习。

为什么以及何时让机器学习?

我们已经讨论了机器学习的必要性,但是另一个问题出现了,在什么场景下我们必须让机器学习?在某些情况下,我们需要机器高效、大规模地做出数据驱动的决策。以下是一些让机器学习会更有效的情况 -

缺乏人类专业知识

我们希望机器学习并做出数据驱动决策的第一个场景可能是缺乏人类专业知识的领域。这些例子可以是在未知领域或太空行星中的导航。

动态场景

有些场景本质上是动态的,即它们随着时间的推移而不断变化。对于这些场景和Behave,我们希望机器能够学习并做出数据驱动的决策。其中一些示例可以是组织中的网络连接和基础设施的可用性。

难以将专业知识转化为计算任务

人类可以在多个领域拥有自己的专业知识;然而,他们无法将这种专业知识转化为计算任务。在这种情况下,我们需要机器学习。这些例子可以是语音识别、认知任务等领域。

机器学习模型

在讨论机器学习模型之前,我们必须了解 Mitchell 教授给出的 ML 的以下正式定义 -

“如果计算机程序在 T 中的任务中的性能(按 P 测量)随着经验 E 的提高而提高,则可以说,计算机程序可以从关于某类任务 T 和性能测量 P 的经验 E 中学习。”

上述定义基本上关注三个参数,也是任何学习算法的主要组成部分,即任务(T)、性能(P)和经验(E)。在这种情况下,我们可以将此定义简化为 -

机器学习是人工智能的一个领域,由学习算法组成:

  • 提高他们的表现(P)

  • 执行某些任务时 (T)

  • 随着时间的推移和经验的积累 (E)

基于上述,下图代表了一个机器学习模型 -

任务

现在让我们更详细地讨论它们 -

任务(T)

从问题的角度来看,我们可以将任务T定义为要解决的现实世界问题。这个问题可以是任何东西,比如寻找特定地点的最佳房价或找到最佳的营销策略等。另一方面,如果我们谈论机器学习,任务的定义是不同的,因为很难通过以下方式解决基于机器学习的任务:传统的编程方法。

当任务 T 基于流程且系统必须遵循对数据点进行操作时,则称其为基于 ML 的任务。基于机器学习的任务的例子有分类、回归、结构化注释、聚类、转录等。

经验(E)

顾名思义,它是从提供给算法或模型的数据点中获得的知识。一旦提供了数据集,模型将迭代运行并学习一些固有的模式。由此获得的学习称为经验(E)。与人类学习进行类比,我们可以将这种情况视为人类正在从情境、关系等各种属性中学习或获得一些经验。监督学习、无监督学习和强化学习是学习或获得经验的一些方式。我们的 ML 模型或算法获得的经验将用于解决任务 T。

性能(P)

机器学习算法应该执行任务并随着时间的推移获得经验。衡量 ML 算法是否按预期执行的指标是其性能 (P)。P 基本上是一个定量指标,它告诉模型如何使用其经验 E 来执行任务 T。有许多指标有助于理解 ML 性能,例如准确度得分、F1 得分、混淆矩阵、精度、召回率、灵敏度等

机器学习的挑战

尽管机器学习正在迅速发展,在网络安全和自动驾驶汽车方面取得了重大进展,但整个人工智能领域仍有很长的路要走。背后的原因是机器学习未能克服许多挑战。机器学习目前面临的挑战是 -

数据质量- 为机器学习算法提供高质量的数据是最大的挑战之一。使用低质量数据会导致与数据预处理和特征提取相关的问题。

耗时的任务- 机器学习模型面临的另一个挑战是时间消耗,尤其是数据采集、特征提取和检索。

缺乏专家- 由于机器学习技术仍处于起步阶段,获得专家资源是一项艰巨的任务。

制定业务问题没有明确的目标- 对于业务问题没有明确的目标和明确的目标是机器学习的另一个关键挑战,因为这项技术还不够成熟。

过度拟合和欠拟合问题- 如果模型过度拟合或欠拟合,则无法很好地表示问题。

维数诅咒- 机器学习模型面临的另一个挑战是数据点的特征太多。这可能是一个真正的障碍。

部署困难- ML 模型的复杂性使得在现实生活中部署非常困难。

机器学习的应用

机器学习是发展最快的技术,研究人员表示,我们正处于人工智能和机器学习的黄金年。它用于解决许多传统方法无法解决的现实世界复杂问题。以下是机器学习的一些实际应用 -

  • 情绪分析

  • 情感分析

  • 错误检测和预防

  • 天气预报和预测

  • 股市分析与预测

  • 语音合成

  • 语音识别

  • 客户细分

  • 物体识别

  • 欺诈识别

  • 预防诈骗

  • 在线购物时向顾客推荐产品。

使用 Python 进行机器学习 - 生态系统

Python 简介

Python是一种流行的面向对象编程语言,具有高级编程语言的功能。其易于学习的语法和可移植性使其如今很受欢迎。以下事实向我们介绍了 Python -

  • Python 是由荷兰 Stichting Mathematisch Centrum 的 Guido van Rossum 开发的。

  • 它是作为名为“ABC”的编程语言的继承者而编写的。

  • 它的第一个版本于 1991 年发布。

  • Python 这个名字是 Guido van Rossum 在电视节目 Monty Python's Flying Circus 中挑选的。

  • 它是一种开源编程语言,这意味着我们可以免费下载它并使用它来开发程序。可以从www.python.org下载。

  • Python编程语言兼具Java和C的特点。它拥有优雅的“C”代码,另一方面,它拥有像 Java 一样的类和对象,用于面向对象编程。

  • 它是一种解释性语言,这意味着Python程序的源代码将首先转换为字节码,然后由Python虚拟机执行。

Python 的优点和缺点

每种编程语言都有一些优点和缺点,Python 也是如此。

优势

根据研究和调查,Python 是第五大最重要的语言,也是机器学习和数据科学领域最流行的语言。这是因为 Python 具有以下优势 -

易于学习和理解- Python 的语法更简单;因此,即使对于初学者来说,学习和理解该语言也相对容易。

多用途语言- Python 是一种多用途编程语言,因为它支持结构化编程、面向对象编程以及函数式编程。

大量的模块- Python 拥有大量的模块,涵盖了编程的各个方面。这些模块易于使用,因此使 Python 成为一种可扩展的语言。

开源社区的支持- 作为开源编程语言,Python 得到了非常大的开发者社区的支持。因此,Python 社区很容易修复这些错误。这个特性使得Python非常健壮和适应性强。

可扩展性- Python 是一种可扩展的编程语言,因为它提供了比 shell 脚本更好的结构来支持大型程序。

弱点

尽管Python是一种流行且功能强大的编程语言,但它也有执行速度慢的弱点。

由于Python是解释性语言,因此与编译语言相比,Python的执行速度较慢。这可能是 Python 社区需要改进的主要领域。

安装Python

为了使用Python,我们首先必须安装它。您可以通过以下两种方式之一执行Python的安装 -

  • 单独安装Python

  • 使用预打包的 Python 发行版 - Anaconda

让我们详细讨论这些内容。

单独安装Python

如果你想在你的计算机上安装Python,那么你只需要下载适用于你的平台的二进制代码。Python 发行版可用于 Windows、Linux 和 Mac 平台。

以下是在上述平台上安装 Python 的快速概述 -

在 Unix 和 Linux 平台上

借助以下步骤,我们可以在 Unix 和 Linux 平台上安装 Python -

  • 首先,访问https://www.python.org/downloads/

  • 接下来,单击链接下载适用于 Unix/Linux 的压缩源代码。

  • 现在,下载并解压文件。

  • 接下来,如果我们想自定义一些选项,我们可以编辑 Modules/Setup 文件。

    • 接下来,编写命令运行./configure脚本

    • 制作

    • 进行安装

在Windows平台上

借助以下步骤,我们可以在 Windows 平台上安装 Python -

  • 首先,访问https://www.python.org/downloads/

  • 接下来,单击 Windows 安装程序 python-XYZ.msi 文件的链接。这里 XYZ 是我们要安装的版本。

  • 现在,我们必须运行下载的文件。它将带我们进入Python安装向导,该向导很容易使用。现在,接受默认设置并等待安装完成。

在 Macintosh 平台上

对于 Mac OS X、Homebrew,建议使用一个出色且易于使用的软件包安装程序来安装 Python 3。如果您没有 Homebrew,您可以使用以下命令来安装它 -

$ ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"

可以使用以下命令更新它 -

$ brew update

现在,要在您的系统上安装 Python3,我们需要运行以下命令 -

$ brew install python3

使用预打包的 Python 发行版:Anaconda

Anaconda 是 Python 的打包编译,其中包含数据科学中广泛使用的所有库。我们可以按照以下步骤使用 Anaconda 设置 Python 环境 -

Step1 - 首先,我们需要从 Anaconda 发行版下载所需的安装包。其链接是https://www.anaconda.com/distribution/。您可以根据需要选择 Windows、Mac 和 Linux 操作系统。

Step2 - 接下来,选择您想要在计算机上安装的 Python 版本。最新的Python版本是3.7。在那里您将获得 64 位和 32 位图形安装程序的选项。

Step3 - 选择操作系统和Python版本后,它将在您的计算机上下载Anaconda安装程序。现在,双击该文件,安装程序将安装 Anaconda 软件包。

步骤 4 - 要检查它是否已安装,请打开命令提示符并输入 Python,如下所示 -

指令管理系统

您还可以在https://www.tutorialspoint.com/python_essentials_online_training/getting_started_with_anaconda.asp上查看详细的视频讲座。

为什么选择 Python 来进行数据科学?

Python 是第五大最重要的语言,也是机器学习和数据科学领域最流行的语言。以下是 Python 的特性,使其成为数据科学语言的首选 -

广泛的套件

Python 拥有一组广泛而强大的软件包,可用于各个领域。它还具有机器学习和数据科学所需的 numpy、scipy、pandas、scikit-learn 等软件包。

轻松制作原型

Python 成为数据科学语言选择的另一个重要特性是简单快速的原型设计。此功能对于开发新算法很有用。

协作功能

数据科学领域基本上需要良好的协作,而 Python 提供了许多有用的工具,使这一点变得非常重要。

一种语言适用于多个领域

典型的数据科学项目包括数据提取、数据操作、数据分析、特征提取、建模、评估、部署和更新解决方案等各个领域。由于 Python 是一种多用途语言,它允许数据科学家从一个通用平台解决所有这些领域的问题。

Python ML 生态系统的组成部分

在本节中,我们将讨论构成 Python 机器学习生态系统组件的一些核心数据科学库。这些有用的组件使 Python 成为数据科学的重要语言。尽管有很多这样的组件,但让我们在这里讨论 Python 生态系统的一些重要组件 -

Jupyter笔记本

Jupyter Notebook 基本上提供了一个交互式计算环境,用于开发基于 Python 的数据科学应用程序。它们以前称为 ipython 笔记本。以下是 Jupyter Notebook 的一些功能,使其成为 Python ML 生态系统的最佳组件之一 -

  • Jupyter Notebook 可以通过逐步排列代码、图像、文本、输出等内容来逐步说明分析过程。

  • 它可以帮助数据科学家在开发分析过程时记录思维过程。

  • 人们还可以将结果捕获为笔记本的一部分。

  • 在 Jupyter Notebook 的帮助下,我们还可以与同行分享我们的工作。

安装与执行

如果您使用 Anaconda 发行版,则无需单独安装 jupyter Notebook,因为它已经随其一起安装。您只需转到 Anaconda Prompt 并输入以下命令 -

C:\>jupyter notebook

按 Enter 后,它将在您计算机的 localhost:8888 处启动笔记本服务器。如以下屏幕截图所示 -

桌子

现在,单击“新建”选项卡后,您将获得一个选项列表。选择Python 3,它将带您进入新笔记本并开始在其中工作。您将在以下屏幕截图中看到它 -

Python表 搜索栏

另一方面,如果您使用标准 Python 发行版,则可以使用流行的 python 包安装程序 pip 来安装 jupyter Notebook。

pip install jupyter

Jupyter Notebook 中的单元格类型

以下是 jupyter 笔记本中的三种类型的单元 -

代码单元- 顾名思义,我们可以使用这些单元来编写代码。编写代码/内容后,它将发送到与笔记本关联的内核。

Markdown 单元格- 我们可以使用这些单元格来注释计算过程。它们可以包含文本、图像、Latex 方程、HTML 标签等内容。

原始单元格- 其中写入的文本按原样显示。这些单元格基本上用于添加我们不希望被jupyter笔记本的自动转换机制转换的文本。

对于jupyter Notebook的更详细的学习,可以访问链接https://www.tutorialspoint.com/jupyter/index.htm

数值模拟

它是另一个有用的组件,使 Python 成为数据科学最喜欢的语言之一。它基本上代表 Numerical Python,由多维数组对象组成。通过使用 NumPy,我们可以执行以下重要操作 -

  • 数组的数学和逻辑运算。

  • 傅里叶变换

  • 与线性代数相关的运算。

我们还可以将 NumPy 视为 MatLab 的替代品,因为 NumPy 主要与 Scipy(科学 Python)和 Mat-plotlib(绘图库)一起使用。

安装与执行

如果您使用 Anaconda 发行版,则无需单独安装 NumPy,因为它已经随 NumPy 一起安装。您只需借助以下命令将包导入到您的 Python 脚本中:

import numpy as np

另一方面,如果您使用标准 Python 发行版,则可以使用流行的 python 包安装程序 pip 安装 NumPy。

pip install NumPy

关于NumPy更详细的学习,可以访问链接https://www.tutorialspoint.com/numpy/index.htm

pandas

它是另一个有用的 Python 库,使 Python 成为数据科学最喜欢的语言之一。Pandas 基本上用于数据操作、整理和分析。它是由 Wes McKinney 于 2008 年开发的。在 Pandas 的帮助下,在数据处理中我们可以完成以下五个步骤 -

  • 加载

  • 准备

  • 操纵

  • 模型

  • 分析

Pandas 中的数据表示

Pandas 中数据的整个表示是在以下三种数据结构的帮助下完成的 -

Series - 它基本上是一个带有轴标签的一维 ndarray,这意味着它就像一个具有同质数据的简单数组。例如,下面的级数是整数1,5,10,15,24,25…的集合

1 5 10 15 24 25 28 36 40 89

数据框架- 它是最有用的数据结构,用于 pandas 中几乎所有类型的数据表示和操作。它基本上是一个可以包含异构数据的二维数据结构。通常,表格数据使用数据框来表示。例如,下表显示了学生的姓名、学号、年龄和性别的数据 -

姓名

卷数

年龄

性别

阿拉夫

1

15

男性

哈希特

2

14

男性

卡尼卡

3

16

女性

玛雅克

4

15

男性

面板- 它是一个包含异构数据的 3 维数据结构。用图形化的方式来表示面板是非常困难的,但是可以将其表示为DataFrame的容器。

下表给出了 Pandas 中使用的上述数据结构的维度和描述 -

数据结构

方面

描述

系列

一维

大小不可变的一维同质数据

数据框

二维

大小可变,表格形式的异构数据

控制板

3-D

大小可变数组,DataFrame 的容器。

我们可以将这些数据结构理解为高维数据结构是低维数据结构的容器。

安装与执行

如果您使用 Anaconda 发行版,则无需单独安装 Pandas,因为它已经随其一起安装。您只需借助以下命令将包导入到您的 Python 脚本中:

import pandas as pd

另一方面,如果您使用标准 Python 发行版,则可以使用流行的 python 包安装程序 pip 安装 Pandas。

pip install Pandas

安装 Pandas 后,您可以像上面那样将其导入到 Python 脚本中。

例子

以下是使用 Pandas 从 ndarray 创建系列的示例 -

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: data = np.array(['g','a','u','r','a','v'])

In [4]: s = pd.Series(data)

In [5]: print (s)

0 g
1 a
2 u
3 r
4 a
5 v

dtype: object

有关 Pandas 的更详细研究,可以访问链接https://www.tutorialspoint.com/python_pandas/index.htm

Scikit-learn

用于 Python 数据科学和机器学习的另一个有用且最重要的 Python 库是 Scikit-learn。以下是 Scikit-learn 的一些功能,使其非常有用 -

  • 它基于 NumPy、SciPy 和 Matplotlib 构建。

  • 它是开源的,可以在 BSD 许可下重复使用。

  • 每个人都可以访问它,并且可以在各种情况下重复使用。

  • 可以在它的帮助下实现涵盖机器学习主要领域的广泛机器学习算法,如分类、聚类、回归、降维、模型选择等。

安装与执行

如果您使用 Anaconda 发行版,则无需单独安装 Scikit-learn,因为它已经随它一起安装了。您只需将该包使用到您的 Python 脚本中即可。例如,通过以下脚本行,我们从Scikit-learn导入乳腺癌患者的数据集-

from sklearn.datasets import load_breast_cancer

另一方面,如果您使用标准 Python 发行版并拥有 NumPy 和 SciPy,则可以使用流行的 python 包安装程序 pip 安装 Scikit-learn。

pip install -U scikit-learn

安装 Scikit-learn 后,您可以将其使用到您的 Python 脚本中,就像上面所做的那样。

使用 Python 进行机器学习 - 方法

有多种机器学习算法、技术和方法可用于构建模型,以利用数据解决现实生活中的问题。在本章中,我们将讨论这些不同类型的方法。

不同类型的方法

以下是基于一些大类的各种机器学习方法 -

基于人类监督

在学习过程中,一些基于人类监督的方法如下 -

监督学习

监督学习算法或方法是最常用的机器学习算法。该方法或学习算法在训练过程中获取数据样本(即训练数据)及其关联的输出(即每个数据样本的标签或响应)。

监督学习算法的主要目标是在执行多个训练数据实例后学习输入数据样本与相应输出之间的关联。

例如,我们有

x:输入变量和

Y:输出变量

现在,应用算法来学习从输入到输出的映射函数,如下所示 -

Y=f(x)

现在,主要目标是很好地近似映射函数,以便即使我们有新的输入数据 (x),我们也可以轻松预测该新输入数据的输出变量 (Y)。

之所以称为监督,是因为整个学习过程可以被认为是在老师或主管的监督下进行的。监督机器学习算法的例子包括决策树、随机森林、KNN、逻辑回归等。

根据机器学习任务,监督学习算法可以分为以下两大类 -

  • 分类

  • 回归

分类

基于分类的任务的主要目标是预测给定输入数据的分类输出标签或响应。输出将基于模型在训练阶段学到的内容。我们知道,分类输出响应意味着无序和离散值,因此每个输出响应将属于特定的类别或类别。我们还将在接下来的章节中详细讨论分类和相关算法。

回归

基于回归的任务的主要目标是预测给定输入数据的连续数值的输出标签或响应。输出将基于模型在训练阶段学到的内容。基本上,回归模型使用输入数据特征(自变量)及其相应的连续数值输出值(因变量或结果变量)来学习输入和相应输出之间的特定关联。我们还将在后续章节中详细讨论回归和相关算法。

无监督学习

顾名思义,它与有监督的机器学习方法或算法相反,这意味着在无监督的机器学习算法中,我们没有任何监督者提供任何类型的指导。在我们没有像监督学习算法那样自由地拥有预先标记的训练数据并且我们希望从输入数据中提取有用模式的情况下,无监督学习算法非常方便。

例如,可以理解如下 -

假设我们有 -

x:输入变量,那么就没有对应的输出变量,算法需要发现数据中有趣的模式来进行学习。

无监督机器学习算法的示例包括 K 均值聚类、K 最近邻等。

根据机器学习任务,无监督学习算法可以分为以下几类:

  • 聚类

  • 协会

  • 降维

聚类

聚类方法是最有用的无监督机器学习方法之一。这些算法用于查找数据样本之间的相似性以及关系模式,然后根据特征将这些样本聚类成具有相似性的组。聚类的现实示例是根据客户的购买Behave对客户进行分组。

协会

另一种有用的无监督机器学习方法是关联,它用于分析大型数据集以查找进一步表示各个项目之间有趣关系的模式。它也称为关联规则挖掘购物篮分析,主要用于分析客户的购物模式。

降维

这种无监督的机器学习方法用于通过选择一组主要或代表性特征来减少每个数据样本的特征变量数量。这里出现一个问题,为什么我们需要降维呢?背后的原因是当我们开始从数据样本中分析和提取数百万个特征时出现的特征空间复杂性问题。这个问题一般指的是“维数灾难”。PCA(主成分分析)、K 最近邻和判别分析是用于此目的的一些流行算法。

异常检测

这种无监督的机器学习方法用于找出罕见事件或通常不会发生的观察结果的发生情况。通过使用学到的知识,异常检测方法将能够区分异常或正常数据点。一些无监督算法(例如聚类、KNN)可以根据数据及其特征来检测异常。

半监督学习

这类算法或方法既不是完全监督的,也不是完全无监督的。它们基本上介于监督学习方法和无监督学习方法两者之间。这类算法通常使用小型监督学习组件(即少量预标记注释数据)和大型无监督学习组件(即大量未标记数据)进行训练。我们可以遵循以下任何方法来实施半监督学习方法 -

  • 第一种简单的方法是基于少量标记和注释数据构建监督模型,然后将其应用于大量未标记数据以获得更多标记样本来构建无监督模型。现在,在它们上训练模型并重复该过程。

  • ,p>第二种方法需要一些额外的努力。在这种方法中,我们可以首先使用无监督方法对相似的数据样本进行聚类,对这些组进行注释,然后使用这些信息的组合来训练模型。

强化学习

这些方法与以前研究的方法不同,并且也很少使用。在这种学习算法中,我们想要训练一个代理一段时间,以便它可以与特定环境进行交互。代理将遵循一组与环境交互的策略,然后在观察环境后,它将针对环境的当前状态采取行动。以下是强化学习方法的主要步骤 -

  • Step1 - 首先,我们需要为代理准备一些初始策略。

  • Step2 - 然后观察环境及其当前状态。

  • Step3 - 接下来,根据当前环境状态选择最佳策略并执行重要操作。

  • Step4 - 现在,代理可以根据上一步采取的行动获得相应的奖励或惩罚。

  • Step5 - 现在,如果需要,我们可以更新策略。

  • Step6 - 最后,重复步骤 2-5,直到代理学习并采用最佳策略。

适合机器学习的任务

下图显示了哪种类型的任务适合各种机器学习问题 -

图表

基于学习能力

在学习过程中,以下是一些基于学习能力的方法 -

批量学习

在许多情况下,我们拥有端到端的机器学习系统,我们需要使用全部可用的训练数据一次性训练模型。这种学习方法或算法称为批量学习或离线学习。它被称为批量或离线学习,因为它是一次性过程,并且模型将使用一批数据进行训练。以下是批量学习方法的主要步骤 -

Step1 - 首先,我们需要收集所有训练数据以开始训练模型。

Step2 - 现在,通过一次性提供整个训练数据来开始模型的训练。

步骤3 - 接下来,一旦获得满意的结果/表现,就停止学习/培训过程。

Step4 - 最后,将这个经过训练的模型部署到生产中。在这里,它将预测新数据样本的输出。

在线学习

它与批量或离线学习方法完全相反。在这些学习方法中,训练数据以多个增量批次(称为小批次)的形式提供给算法。以下是在线学习方法的主要步骤 -

Step1 - 首先,我们需要收集所有训练数据以开始模型训练。

Step2 - 现在,通过向算法提供小批量训练数据来开始模型训练。

Step3 - 接下来,我们需要以多个增量向算法提供小批量训练数据。

Step4 - 因为它不会像批量学习那样停止,因此在小批量提供整个训练数据后,也为其提供新的数据样本。

Step5 - 最后,它将根据新的数据样本持续学习一段时间。

基于泛化方法

在学习过程中,以下是一些基于泛化方法的方法 -

基于实例的学习

基于实例的学习方法是通过基于输入数据进行泛化来构建机器学习模型的有用方法之一。它与之前研究的学习方法相反,这种学习涉及机器学习系统以及使用原始数据点本身来绘制新数据样本结果的方法,而无需在训练数据上构建显式模型。

简而言之,基于实例的学习基本上是通过查看输入数据点开始工作,然后使用相似性度量,它将概括并预测新的数据点。

基于模型的学习

在基于模型的学习方法中,迭代过程发生在基于各种模型参数(称为超参数)构建的 ML 模型上,其中输入数据用于提取特征。在这种学习中,超参数根据各种模型验证技术进行优化。这就是为什么我们可以说基于模型的学习方法使用更传统的机器学习方法来实现泛化。

ML 项目的数据加载

假设如果您想启动一个机器学习项目,那么您需要的第一个也是最重要的东西是什么?这是我们启动任何 ML 项目所需加载的数据。就数据而言,ML 项目最常见的数据格式是 CSV(逗号分隔值)。

基本上,CSV 是一种简单的文件格式,用于存储表格数据(数字和文本),例如纯文本的电子表格。在Python中,我们可以通过不同的方式加载CSV数据,但在加载CSV数据之前我们必须注意一些注意事项。

加载 CSV 数据时的注意事项

CSV 数据格式是 ML 数据最常见的格式,但在将其加载到 ML 项目中时,我们需要注意以下主要考虑因素 -

文件头

在 CSV 数据文件中,标题包含每个字段的信息。我们必须对头文件和数据文件使用相同的分隔符,因为头文件指定如何解释数据字段。

以下是与 CSV 文件头相关的两种情况,必须考虑 -

  • 情况一:当数据文件有文件头时- 如果数据文件有文件头,它将自动为每列数据分配名称。

  • 情况二:当数据文件没有文件头时- 如果数据文件没有文件头,我们需要手动为每列数据分配名称。

在这两种情况下,我们都必须明确指定 CSV 文件是否包含标头。

评论

任何数据文件中的注释都有其重要性。在 CSV 数据文件中,注释由行开头的井号 (#) 表示。在将 CSV 数据加载到 ML 项目时,我们需要考虑注释,因为如果文件中有注释,那么我们可能需要指出是否需要这些注释,具体取决于我们选择的加载方法。

分隔符

在 CSV 数据文件中,逗号 (,) 字符是标准分隔符。分隔符的作用是分隔字段中的值。将 CSV 文件上传到 ML 项目时,考虑分隔符的作用非常重要,因为我们还可以使用不同的分隔符,例如制表符或空格。但在使用与标准分隔符不同的分隔符的情况下,我们必须明确指定它。

引号

在 CSV 数据文件中,双引号 (“ ”) 标记是默认的引号字符。将 CSV 文件上传到 ML 项目时考虑引号的作用很重要,因为我们还可以使用双引号以外的其他引号字符。但如果使用与标准引号不同的引号字符,我们必须明确指定它。

加载 CSV 数据文件的方法

在处理 ML 项目时,最关键的任务是将数据正确加载到其中。ML 项目最常见的数据格式是 CSV,它有多种风格,解析难度也各不相同。在本节中,我们将讨论 Python 中加载 CSV 数据文件的三种常见方法 -

使用 Python 标准库加载 CSV

加载 CSV 数据文件的第一个也是最常用的方法是使用 Python 标准库,它为我们提供了各种内置模块,即 csv 模块和 reader() 函数。以下是在它的帮助下加载 CSV 数据文件的示例 -

例子

在此示例中,我们使用鸢尾花数据集,可以将其下载到本地目录中。加载数据文件后,我们可以将其转换为 NumPy 数组并将其用于 ML 项目。以下是用于加载 CSV 数据文件的 Python 脚本 -

首先,我们需要导入Python标准库提供的csv模块,如下 -

import csv

接下来,我们需要导入 Numpy 模块,将加载的数据转换为 NumPy 数组。

import numpy as np

现在,提供文件的完整路径,存储在我们的本地目录中,包含 CSV 数据文件 -

path = r"c:\iris.csv"

接下来,使用 csv.reader() 函数从 CSV 文件读取数据 -

with open(path,'r') as f:
   reader = csv.reader(f,delimiter = ',')
   headers = next(reader)
   data = list(reader)
   data = np.array(data).astype(float)

我们可以使用以下脚本行打印标题的名称 -

print(headers)

以下脚本行将打印数据的形状,即文件中的行数和列数 -

print(data.shape)

下一个脚本行将给出数据文件的前三行 -

print(data[:3])

输出

['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
(150, 4)
[  [5.1 3.5 1.4 0.2]
   [4.9 3. 1.4 0.2]
   [4.7 3.2 1.3 0.2]]

使用 NumPy 加载 CSV

加载 CSV 数据文件的另一种方法是 NumPy 和 numpy.loadtxt() 函数。以下是在它的帮助下加载 CSV 数据文件的示例 -

例子

在此示例中,我们使用包含糖尿病患者数据的皮马印第安人数据集。该数据集是没有标题的数字数据集。也可以下载到我们的本地目录中。加载数据文件后,我们可以将其转换为 NumPy 数组并将其用于 ML 项目。以下是用于加载 CSV 数据文件的 Python 脚本 -

from numpy import loadtxt
path = r"C:\pima-indians-diabetes.csv"
datapath= open(path, 'r')
data = loadtxt(datapath, delimiter=",")
print(data.shape)
print(data[:3])

输出

(768, 9)
[  [ 6. 148. 72. 35. 0. 33.6 0.627 50. 1.]
   [ 1. 85. 66. 29. 0. 26.6 0.351 31. 0.]
   [ 8. 183. 64. 0. 0. 23.3 0.672 32. 1.]]

使用 Pandas 加载 CSV

加载 CSV 数据文件的另一种方法是通过 Pandas 和 pandas.read_csv() 函数。这是一个非常灵活的函数,它返回一个 pandas.DataFrame ,可以立即用于绘图。以下是在它的帮助下加载 CSV 数据文件的示例 -

例子

在这里,我们将实现两个 Python 脚本,第一个是具有标题的 Iris 数据集,另一个是使用 Pima Indians 数据集,这是一个没有标题的数字数据集。这两个数据集都可以下载到本地目录中。

脚本-1

以下是使用 Pandas on Iris 数据集加载 CSV 数据文件的 Python 脚本 -

from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
print(data[:3])

Output:

(150, 4)
   sepal_length   sepal_width  petal_length   petal_width
0         5.1     3.5          1.4            0.2
1         4.9     3.0          1.4            0.2
2         4.7     3.2          1.3            0.2

脚本2

以下是用于加载 CSV 数据文件的 Python 脚本,还提供了标题名称,使用 Pandas on Pima Indians Diabetes 数据集 -

from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.shape)
print(data[:3])

输出

(768, 9)
   preg  plas  pres   skin  test   mass    pedi    age   class
0   6    148    72      35    0     33.6   0.627    50      1
1   1    85     66      29    0     26.6   0.351    31      0
2   8    183    64      0     0     23.3   0.672    32      1

借助给定的示例,可以轻松理解上述三种加载 CSV 数据文件的方法之间的区别。

ML - 通过统计理解数据

介绍

在处理机器学习项目时,我们通常会忽略两个最重要的部分,即数学数据。这是因为,我们知道机器学习是一种数据驱动的方法,我们的机器学习模型只会产生与我们提供给它的数据一样好的或一样坏的结果。

在上一章中,我们讨论了如何将 CSV 数据上传到我们的 ML 项目中,但在上传数据之前了解这些数据会很有帮助。我们可以通过两种方式理解数据:统计和可视化。

在本章中,借助以下 Python 教程,我们将通过统计来理解 ML 数据。

查看原始数据

第一个方法是查看原始数据。查看原始数据非常重要,因为我们在查看原始数据后获得的见解将增加我们更好地预处理和处理 ML 项目数据的机会。

以下是通过在 Pima Indians 糖尿病数据集上使用 Pandas DataFrame 的 head() 函数实现的 Python 脚本,用于查看前 50 行以更好地理解它 -

例子

from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.head(50))

输出

preg   plas  pres    skin  test  mass   pedi    age      class
0      6      148     72     35   0     33.6    0.627    50    1
1      1       85     66     29   0     26.6    0.351    31    0
2      8      183     64      0   0     23.3    0.672    32    1
3      1       89     66     23  94     28.1    0.167    21    0
4      0      137     40     35  168    43.1    2.288    33    1
5      5      116     74      0   0     25.6    0.201    30    0
6      3       78     50     32   88    31.0    0.248    26    1
7     10      115      0      0   0     35.3    0.134    29    0
8      2      197     70     45  543    30.5    0.158    53    1
9      8      125     96      0   0     0.0     0.232    54    1
10     4      110     92      0   0     37.6    0.191    30    0
11    10      168     74      0   0     38.0    0.537    34    1
12    10      139     80      0   0     27.1    1.441    57    0
13     1      189     60     23  846    30.1    0.398    59    1
14     5      166     72     19  175    25.8    0.587    51    1
15     7      100      0      0   0     30.0    0.484    32    1
16     0      118     84     47  230    45.8    0.551    31    1
17     7      107     74      0   0     29.6    0.254    31    1
18     1      103     30     38  83     43.3    0.183    33    0
19     1      115     70     30  96     34.6    0.529    32    1
20     3      126     88     41  235    39.3    0.704    27    0
21     8       99     84      0   0     35.4    0.388    50    0
22     7      196     90      0   0     39.8    0.451    41    1
23     9      119     80     35   0     29.0    0.263    29    1
24    11      143     94     33  146    36.6    0.254    51    1
25    10      125     70     26  115    31.1    0.205    41    1
26     7      147     76      0   0     39.4    0.257    43    1
27     1       97     66     15  140    23.2    0.487    22    0
28    13      145     82     19  110    22.2    0.245    57    0
29     5      117     92      0   0     34.1    0.337    38    0
30     5      109     75     26   0     36.0    0.546    60    0
31     3      158     76     36  245    31.6    0.851    28    1
32     3       88     58     11   54    24.8    0.267    22    0
33     6       92     92      0   0     19.9    0.188    28    0
34    10      122     78     31   0     27.6    0.512    45    0
35     4      103     60     33  192    24.0    0.966    33    0
36    11      138     76      0   0     33.2    0.420    35    0
37     9      102     76     37   0     32.9    0.665    46    1
38     2       90     68     42   0     38.2    0.503    27    1
39     4      111     72     47  207    37.1    1.390    56    1
40     3      180     64     25   70    34.0    0.271    26    0
41     7      133     84      0   0     40.2    0.696    37    0
42     7      106     92     18   0     22.7    0.235    48    0
43     9      171    110     24  240    45.4    0.721    54    1
44     7      159     64      0   0     27.4    0.294    40    0
45     0      180     66     39   0     42.0    1.893    25    1
46     1      146     56      0   0     29.7    0.564    29    0
47     2       71     70     27   0     28.0    0.586    22    0
48     7      103     66     32   0     39.1    0.344    31    1
49     7      105      0      0   0     0.0     0.305    24    0

我们可以从上面的输出中观察到,第一列给出了行号,这对于引用特定的观察结果非常有用。

检查数据维度

了解我们的 ML 项目有多少行和列数据始终是一个很好的做法。背后的原因是 -

  • 假设如果我们有太多的行和列,那么运行算法和训练模型将需要很长时间。

  • 假设如果我们的行和列太少,那么我们就没有足够的数据来很好地训练模型。

以下是通过在 Pandas 数据框架上打印形状属性来实现的 Python 脚本。我们将在 iris 数据集上实现它,以获取其中的总行数和列数。

例子

from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)

输出

(150, 4)

我们可以从输出中轻松观察到我们将要使用的鸢尾花数据集有 150 行和 4 列。

获取每个属性的数据类型

了解每个属性的数据类型是另一个好习惯。背后的原因是,根据需求,有时我们可能需要将一种数据类型转换为另一种数据类型。例如,我们可能需要将字符串转换为浮点或整数来表示类别或序数值。我们可以通过查看原始数据来了解属性的数据类型,但另一种方法是使用 Pandas DataFrame 的 dtypes 属性。借助 dtypes 属性,我们可以对每个属性数据类型进行分类。可以借助以下 Python 脚本来理解 -

例子

from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.dtypes)

输出

sepal_length float64
sepal_width float64
petal_length float64
petal_width float64
dtype: object

从上面的输出中,我们可以轻松获得每个属性的数据类型。

数据统计汇总

我们已经讨论了获取数据形状(即行数和列数)的 Python 秘诀,但很多时候我们需要查看该数据形状的摘要。它可以借助 Pandas DataFrame 的 describe() 函数来完成,该函数进一步提供每个数据属性的以下 8 个统计属性 -

  • 数数

  • 意思是

  • 标准差

  • 最小值

  • 最大值

  • 25%

  • 中位数即 50%

  • 75%

例子

from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())

输出

(768, 9)
         preg      plas       pres      skin      test        mass       pedi      age      class
count 768.00      768.00    768.00     768.00    768.00     768.00     768.00    768.00    768.00
mean    3.85      120.89     69.11      20.54     79.80      31.99       0.47     33.24      0.35
std     3.37       31.97     19.36      15.95    115.24       7.88       0.33     11.76      0.48
min     0.00        0.00      0.00       0.00      0.00       0.00       0.08     21.00      0.00
25%     1.00       99.00     62.00       0.00      0.00      27.30       0.24     24.00      0.00
50%     3.00      117.00     72.00      23.00     30.50      32.00       0.37     29.00      0.00
75%     6.00      140.25     80.00      32.00    127.25      36.60       0.63     41.00      1.00
max    17.00      199.00    122.00      99.00    846.00      67.10       2.42     81.00      1.00

从上面的输出中,我们可以观察 Pima Indian Diabetes 数据集数据的统计摘要以及数据形状。

审查班级分布

类别分布统计在我们需要了解类别值的平衡的分类问题中非常有用。了解类值分布非常重要,因为如果我们的类分布高度不平衡,即一个类比其他类有更多的观察结果,那么在我们的 ML 项目的数据准备阶段可能需要特殊处理。借助 Pandas DataFrame,我们可以轻松获得 Python 中的类分布。

例子

from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)

输出

Class
0 500
1 268
dtype: int64

从上面的输出可以清楚地看到,类别 0 的观测值数量几乎是类别 1 的观测值数量的两倍。

检查属性之间的相关性

两个变量之间的关系称为相关性。在统计学中,计算相关性最常用的方法是皮尔逊相关系数。它可以具有以下三个值 -

  • 系数值 = 1 - 表示变量之间完全相关。

  • 系数值 = -1 - 它表示变量之间完全相关。

  • 系数值 = 0 - 表示变量之间根本不存在相关性。

在将数据集用于机器学习项目之前,检查数据集中属性的成对相关性总是有好处的,因为如果我们具有高度相关的属性,一些机器学习算法(例如线性回归和逻辑回归)将表现不佳。在Python中,我们可以借助Pandas DataFrame上的corr()函数轻松计算数据集属性的相关矩阵。

例子

from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)

输出

preg     plas     pres     skin     test      mass     pedi       age      class
preg     1.00     0.13     0.14     -0.08     -0.07   0.02     -0.03       0.54   0.22
plas     0.13     1.00     0.15     0.06       0.33   0.22      0.14       0.26   0.47
pres     0.14     0.15     1.00     0.21       0.09   0.28      0.04       0.24   0.07
skin    -0.08     0.06     0.21     1.00       0.44   0.39      0.18      -0.11   0.07
test    -0.07     0.33     0.09     0.44       1.00   0.20      0.19      -0.04   0.13
mass     0.02     0.22     0.28     0.39       0.20   1.00      0.14       0.04   0.29
pedi    -0.03     0.14     0.04     0.18       0.19   0.14      1.00       0.03   0.17
age      0.54     0.26     0.24     -0.11     -0.04   0.04      0.03       1.00   0.24
class    0.22     0.47     0.07     0.07       0.13   0.29      0.17       0.24   1.00

上述输出中的矩阵给出了数据集中所有属性对之间的相关性。

检查属性分布的偏差

偏度可以定义为假设为高斯分布但在一个方向或另一个方向或向左或向右出现扭曲或偏移的分布。由于以下原因,检查属性的偏度是重要的任务之一 -

  • 数据中存在偏度需要在数据准备阶段进行校正,以便我们可以从模型中获得更高的准确性。

  • 大多数机器学习算法假设数据具有高斯分布,即正态分布或钟形曲线数据。

在Python中,我们可以通过使用Pandas DataFrame上的skew()函数轻松计算每个属性的倾斜。

例子

from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
print(data.skew())

输出

preg   0.90
plas   0.17
pres  -1.84
skin   0.11
test   2.27
mass  -0.43
pedi   1.92
age    1.13
class  0.64
dtype: float64

从上面的输出中,可以观察到正偏斜或负偏斜。如果该值接近于零,则表明偏差较小。

ML - 通过可视化理解数据

介绍

在上一章中,我们讨论了数据对于机器学习算法的重要性以及一些通过统计来理解数据的 Python 方法。还有另一种称为可视化的方法来理解数据。

借助数据可视化,我们可以看到数据是什么样子的,以及数据的属性具有什么样的相关性。这是查看特征是否与输出相对应的最快方法。借助以下 Python 食谱,我们可以通过统计来理解 ML 数据。

数据可视化

单变量图:独立理解属性

最简单的可视化类型是单变量或“单变量”可视化。借助单变量可视化,我们可以独立地理解数据集的每个属性。以下是 Python 中实现单变量可视化的一些技术 -

直方图

直方图将数据分组到箱中,是了解数据集中每个属性分布的最快方法。以下是直方图的一些特征 -

  • 它为我们提供了为可视化而创建的每个箱中的观察数量的计数。

  • 从箱的形状,我们可以很容易地观察到分布,即它是高斯分布、偏斜分布还是指数分布。

  • 直方图还可以帮助我们看到可能的异常值。

例子

下面显示的代码是创建 Pima Indian Diabetes 数据集属性直方图的 Python 脚本示例。在这里,我们将在 Pandas DataFrame 上使用 hist() 函数来生成直方图,并使用matplotlib来绘制它们。

from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_