《机器学习实战》 | 第1章 机器学习基础

系列文章:《机器学习实战》学习笔记

这是《机器学习实战》的第一章,本章简要介绍了下什么是机器学习、机器学习的主要任务和本书中将要用到的Python语言。现在机器学习(Machine learning)与人工智能(Artificial intelligence)这么火,介绍机器学习的文章网上有很多,有很多已经写得相当好了,比如这篇:从机器学习谈起,值得好好看看。本文肯定不会介绍得那样全,只是讨论《机器学习实战》这本书中提到的一些机器学习基础知识。

机器学习能让我们自数据集中受到启发,换句话说,我们会利用计算机来彰显数据背后的真实含义。它既不是只会徒然模仿的机器人,也不是具有人类感情的仿生人。

现今,机器学习已应用于多个领域,远超出大多数人的想象——

  • 搜索引擎结果排序
  • 垃圾邮件过滤器
  • 商品推荐
  • 手写识别软件
  • 贷款信用判定
  • ……

一、何谓机器学习

简单来说,机器学习是一个从无序数据中提取有用信息的过程。它横跨计算机科学、工程技术和统计学等多个学科,需要多学科的知识。

互联网时代,人们制造、收集了大量的数据,如何从这些数据中抽取出有价值的信息是一个非常值得研究的课题。现在也是个“数据为王”的年代,各个公司都在疯狂得搜集用户数据,个人信息、使用习惯、搜索记录、观看记录甚至电子邮件内容……希望能从中发现用户的喜好,挖掘用户的需求。可谓谁拥有数据,谁就有下一个机会。然而光有这些数据是不够的,海量的数据已经超出了直接计算的可行性,想要从中高效地提取信息就需要专门的学习算法,这就是机器学习的作用所在。我们需要机器学习算法,避免我们“迷失”在数据中,而找到更多的可用信息。

1.机器学习与统计学

顺便说一句,机器学习同统计学有着很深的渊源。在计算机出现以前,统计学家早就做着分析、预测的工作。机器学习可以说是计算机科学同统计学的一个结合点,利用计算机工具将统计学理论转化为代码,应用在了更多领域。而机器学习和统计学现在也有一些区别,这也不单是理论与应用的问题,还有一些不同的关注点和侧重点。关于这方面的讨论也有很多可读的文章:

2.关键术语

书中使用了一个简单的“鸟类分类系统”作为切入点,介绍了机器学习算法中常用到的基本术语。这个系统用到的鸟物种分类表如下:

序号 体重(克) 翼展(厘米) 脚蹼 后背颜色 种属
1 1000.1 125.0 棕色 红尾鵟
2 3000.7 200.0 灰色 鹭鹰
3 3300.0 220.3 灰色 鹭鹰
4 4100.0 136.0 黑色 普通潜鸟
5 3.0 11.0 绿色 瑰丽蜂鸟
6 570.0 75.0 黑色 象牙喙啄木鸟

我们称其为一个专家系统,因为它可以像一个研究鸟类的专家一样识别鸟类的种属。表中使用了四种不同的属性值来区分不同鸟类。现实中,你可能会想测量更多的值。通常的做法是测量所有可测属性,而后再挑选出重要部分。我们称使用的这四种属性为特征。 表中的每一行都是一个具有相关特征的实例或称样本

  1. 特征数值的类型

    表中的前两种特征是连续型数值型)的,即它的取值是连续的实数;第三种特征是二值型的,只可以取是或否;第四种特征是基于有限颜色范围的枚举型。我们称二值型、枚举型这样只可以取有限个值的特征为离散型标称型)的。

  2. 机器学习的任务——分类

    鸟类分类系统完成的是一个分类任务。这很好理解,因为这个系统要做的事是分给未知的(鸟类)样本一个已知的种类。

  3. 机器学习算法的流程

    我们首先要做的是算法训练,即学习如何分类。即为算法输入大量已分类数据作为算法的训练集。训练集是用于训练机器学习算法的数据样本集合。表中即包含六个训练样本的训练集。每个训练样本有若干个特征(本例为4个)和一个目标变量(表示样本所属的类别)。目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型的。我们通常将分类问题中的目标变量称为类别,并假定分类问题只存在有限个数的类别。

    为了测试机器学习算法的效果,通常将现有数据分为两套独立的数据集:训练数据和测试数据。当机器学习程序开始运行时,使用训练样本作为算法的输入,训练完成之后输入测试样本。输入测试样本时并不提供测试样本的目标变量,而是由程序决定样本的类别。通过比较程序预测的样本类别与实际样本类别(目标变量)之间的差异,就可以得出算法的实际精确度。

    我们称算法输出的结果为模型。经过训练、测试准确率良好的模型就可以被保存下来,用于对未知的鸟类样本分类。

废了半天话,是时候祭出这张经典的流程图了(图自李航《统计学习方法》):

  1. 机器学习的其他任务

    机器学习的另一项任务是回归,它主要用于预测数值型数据。一个很经典的例子就是统计学中的数据拟合曲线:给定数据点,计算最优拟合曲线,目标变量即这条曲线的参数。

    分类和回归均属于监督学习Supervised learning),即这类算法知道预测什么(存在目标变量)。

    与之对应的是无监督学习Unsupervised learning),此时数据没有类别信息,也不会给定目标值。在无监督学习中,将数据集合分成由类似的对象组成的多个类的过程被称为聚类;将寻找描述数据统计值的过程称之为密度估计。此外,还包括减少数据特征的维度的算法,被称为降维

二、寻找合适的机器学习算法

为一个实际问题应用机器学习算法时,可以从如下方面分别考虑:

  1. 使用机器学习算法的目的(目标任务)。如果已有部分样本和目标变量,想要预测未知样本的目标变量的值,则可以选择监督学习算法——根据目标变量的类型可以进一步分为分类算法(对离散型目标变量)和回归算法(对连续型目标变量)。如果没有或不存在样本类型信息,则可以选择无监督学习算法——使用聚类算法将数据划分为若干类;使用密度估计算法估计数据与每个分类的相似度(匹配度)。

  2. 其次需要考虑的是数据问题。我们应该充分了解数据的特性,没有统一的学习算法,(任何问题)都需要根据具体的数据做相应处理。需要考虑的问题有——数据的特征数量,特征值是离线型变量还是连续型变量,特征值的取值范围,特征值的分布(是否分布不均、有些值很少出现),特征值中是否存在缺失的值,造成缺失的原因,数据中是否存在异常的值(数据是否完全可信),等等。

  3. 多次试验。一般并不存在最好的算法,尝试不同算法的执行效果,比较其准确率、计算时间,综合决定最终使用的机器学习算法。

三、开发机器学习应用程序的步骤

  1. 收集数据。有很多方法收集样本数据,如:制作网络爬虫从网站上抽取数据、从API中得到信息、设备传感器发来的实测数据等等。
  2. 准备输入数据。将数据转换为计算机可处理的格式,如将离散数据转换为整数值、填充缺失数据为特定的值。
  3. 分析输入数据。如果数据的特征值低于三维,可以将这些数据点绘制出来,人工分析数据的特征,看是否有明显的分布模式、是否存在明显的异常值。对于大于三维的数据,可以使用降维的方法压缩到三维以下,方便我们图形化展示数据。这一步的主要作用是确保没有垃圾数据,否则将降低算法性能。
  4. 训练算法。机器学习算法从这一步才真正开始学习。对于无监督学习,因为不存在目标变量值,故不需要训练算法,所有的算法集中在第五步。
  5. 测试算法。对于监督学习,在测试的步骤使用测试数据检测算法的准确率(性能);对于无监督学习,运行机器学习算法,并使用其它方式检验算法性能。
  6. 使用算法。将机器学习算法转换为应用程序,执行实际任务,以检验上述步骤是否可以在实际环境中正常工作。

四、使用Python语言实现机器学习算法

本书中使用Python语言编写实际代码。Python语言具有很多优点(清晰的语法结构、可读性、丰富的函数库、高级的语法特性……),使其很适合用来实现机器学习算法。但是性能问题始终是Python语言最大的问题。由于它是一门解释性语言,始终过不了性能这道坎儿。对此,可以使用PyPy这类带有JIT的Python发行版,但是追求性能的场合终究还是逃不掉C和C++的。

——没关系,把Python作为机器学习的教学语言还是足够的。

书中的附录部分有简单介绍Python的语法,在本文中再写这些就没意思了。Python的入门门槛很低,网上有很多优秀的教程可供参考(比如这个:简明Python教程)。

书中广泛使用了Python的一个函数库:NumPy,这个可谓Python做线性代数运算的必备函数库,广泛应用于不仅机器学习的各个数学计算领域。

在这里假设已经安装了Python开发环境和NumPy函数库。

在Python shell中输入下列命令,将NumPy函数库中的所有模块导入当前的命名空间:

from numpy import *

生成一个4x4的随机数组(array):

random.rand(4,4)

可见其数据类型为array,这是NumPy中的两大主要类型之一。

将数组转换为矩阵:

randMat = mat(random.rand(4,4))

可见其数据类型为mat,这是NumPy中的另一个主要类型。

矩阵求逆:

invRandMat = randMat.I

矩阵乘法:

randMat * invRandMat

获得一个4x4单位矩阵:

myEye = eye(4)

\[QAQ \]


学习资源汇总

博客文章:《从机器学习谈起》《Brief History of Machine Learning》

书籍:李航《统计学习方法》

在线学习资源:Coursera公开课 - Machine LearningCoursera公开课 - 機器學習基石 (Machine Learning Foundations)(中文的哦),这两个课程的老师分别是Andrew Ng和林軒田,也都是这个领域的大牛。

Python在线学习资源:简明Python教程

以及隆重推荐这位大神的博客:

http://blog.csdn.net/stdcoutzyx

posted @ 2021-10-31 12:44  RioTian  阅读(166)  评论(0编辑  收藏  举报