赵走x博客
网站访问量:151449
首页
书籍
软件
工具
古诗词
搜索
登录
Python机器学习基础教程:3、第一个应用:鸢尾花分类
Python机器学习基础教程:2、必要的库和工具
Python机器学习基础教程:1、引言
Python机器学习基础教程:1、引言
资源编号:75697
人工智能
Python机器学习基础教程
热度:93
在机器学习中,这里的每个实体或每一行被称为一个样本 (sample)或数据点,而每一列(用来描述这些实体的属性)则被称为特征 (feature)。
>下一篇文章: # 开篇说明 >本系列文章来自书籍《Python机器学习基础教程》,本人在原有书籍的基础上,进行了部分修改,不涉及商业目的,若发现侵权问题,请与作者留言联系,我会在第一时间下架。 # 第 1 章 引言 机器学习(machine learning)是从数据中提取知识。它是统计学、人工智能和计算机科学交叉的研究领域,也被称为预测分析(predictive analytics)或统计学习(statistical learning)。近年来,机器学习方法已经应用到日常生活的方方面面。从自动推荐看什么电影、点什么食物、买什么商品,到个性化的在线电台和从照片中识别好友,许多现代化网站和设备的核心都是机器学习算法。当你访问像 Facebook、Amazon 或 Netflix 这样的复杂网站时,很可能网站的每一部分都包含多种机器学习模型。 除了商业应用之外,机器学习也对当前数据驱动的研究方法产生了很大影响。本书中介绍的工具均已应用在各种科学问题上,比如研究恒星、寻找遥远的行星、发现新粒子、分析 DNA 序列,以及提供个性化的癌症治疗方案。 不过,如果想受益于机器学习算法,你的应用无需像上面那些例子那样给世界带来重大改变,数据量也用不着那么大。本章将解释机器学习如此流行的原因,并探讨机器学习可以解决哪些类型的问题。然后将向你展示如何构建第一个机器学习模型,同时介绍一些重要的概念。 ## 1.1 为何选择机器学习 在“智能”应用的早期,许多系统使用人为制订的“if”和“else”决策规则来处理数据,或根据用户输入的内容进行调整。想象有一个垃圾邮件过滤器,其任务是酌情将收到的某些邮件移动到垃圾邮件文件夹。你可以创建一个关键词黑名单,所有包含这些关键词的邮件都会被标记为垃圾邮件。这是用专家设计的规则体系来设计“智能”应用的一个示例。人为制订的决策规则对某些应用来说是可行的,特别是人们对其模型处理过程非常熟悉的应用。但是,人为制订决策规则主要有两个缺点。 * 做决策所需要的逻辑只适用于单一领域和单项任务。任务哪怕稍有变化,都可能需要重写整个系统。 * 想要制订规则,需要对人类专家的决策过程有很深刻的理解。 这种人为制订规则的方法并不适用的一个例子就是图像中的人脸检测。如今,每台智能手机都能够检测到图像中的人脸。但直到 2001 年,人脸检测问题才得到解决。其主要问题在于,计算机“感知”像素(像素组成了计算机中的图像)的方式与人类感知面部的方式有非常大的不同。正是由于这种表征差异,人类想要制订出一套好的规则来描述数字图像中的人脸构成,基本上是不可能的。 但有了机器学习算法,仅向程序输入海量人脸图像,就足以让算法确定识别人脸需要哪些特征。 ### 1.1.1 机器学习能够解决的问题 最成功的机器学习算法是能够将决策过程自动化的那些算法,这些决策过程是从已知示例中泛化得出的。在这种叫作监督学习 (supervised learning)的方法中,用户将成对的输入和预期输出提供给算法,算法会找到一种方法,根据给定输入给出预期输出。尤其是在没有人类帮助的情况下,给定前所未见的输入,算法也能够给出相应的输出。回到前面垃圾邮件分类的例子,利用机器学习算法,用户为算法提供大量电子邮件(作为输入),以及这些邮件是否为垃圾邮件的信息(作为预期输出)。给定一封新邮件,算法就能够预测它是否为垃圾邮件。 从输入 / 输出对中进行学习的机器学习算法叫作监督学习算法 (supervised learning algorithm),因为每个用于算法学习的样例都对应一个预期输出,好像有一个“老师”在监督着算法。虽然创建一个包含输入和输出的数据集往往费时又费力,但监督学习算法很好理解,其性能也易于测量。如果你的应用可以表示成一个监督学习问题,并且你能够创建包含预期输出的数据集,那么机器学习很可能可以解决你的问题。 监督机器学习任务的示例如下。 #### 识别信封上手写的邮政编码 这里的输入是扫描的手写数字,预期输出是邮政编码中的实际数字。想要创建用于构建机器学习模型的数据集,你需要收集许多信封。然后你可以自己阅读邮政编码,将数字保存为预期输出。 #### 基于医学影像判断肿瘤是否为良性 这里的输入是影像,输出是肿瘤是否为良性。想要创建用于构建模型的数据集,你需要一个医学影像数据库。你还需要咨询专家的意见,因此医生需要查看所有影像,然后判断哪些肿瘤是良性的,哪些不是良性的。除了影像内容之外,甚至可能还需要做额外的诊断来判断影像中的肿瘤是否为癌变。 #### 检测信用卡交易中的诈骗行为 这里的输入是信用卡交易记录,输出是该交易记录是否可能为诈骗。假设你是信用卡的发行单位,收集数据集意味着需要保存所有的交易,并记录用户是否上报过任何诈骗交易。 在这些例子中需要注意一个有趣的现象,就是虽然输入和输出看起来相当简单,但三个例子中的数据收集过程却大不相同。阅读信封虽然很辛苦,却非常简单,也不用花多少钱。与之相反,获取医学影像和诊断不仅需要昂贵的设备,还需要稀有又昂贵的专家知识,更不要说伦理问题和隐私问题了。在检测信用卡诈骗的例子中,收集数据要容易得多。你的顾客会上报诈骗行为,从而为你提供预期输出。要获取所有欺诈行为和非欺诈行为的输入 / 输出对,你只需等待即可。 本书会讲到的另一类算法是无监督学习算法 (unsupervised learning algorithm)。在无监督学习中,只有输入数据是已知的,没有为算法提供输出数据。虽然这种算法有许多成功的应用,但理解和评估这些算法往往更加困难。 无监督学习的示例如下。 #### 确定一系列博客文章的主题 如果你有许多文本数据,可能想对其进行汇总,并找到其中共同的主题。事先你可能并不知道都有哪些主题,或者可能有多少个主题。所以输出是未知的。 ### 将客户分成具有相似偏好的群组 给定一组客户记录,你可能想要找出哪些客户比较相似,并判断能否根据相似偏好对这些客户进行分组。对于一家购物网站来说,客户分组可能是“父母”“书虫”或“游戏玩家”。由于你事先并不知道可能有哪些分组,甚至不知道有多少组,所以并不知道输出是什么。 #### 检测网站的异常访问模式 想要识别网站的滥用或 bug,找到异常的访问模式往往是很有用的。每种异常访问模式都互不相同,而且你可能没有任何记录在案的异常行为示例。在这个例子中你只是观察流量,并不知道什么是正常访问行为和异常访问行为,所以这是一个无监督学习问题。 无论是监督学习任务还是无监督学习任务,将输入数据表征为计算机可以理解的形式都是十分重要的。通常来说,将数据想象成表格是很有用的。你想要处理的每一个数据点(每一封电子邮件、每一名客户、每一次交易)对应表格中的一行,描述该数据点的每一项属性(比如客户年龄、交易金额或交易地点)对应表格中的一列。你可能会从年龄、性别、账号创建时间、在你的购物网站上的购买频率等方面来描述用户。你可能会用每一个像素的灰度值来描述肿瘤图像,也可能利用肿瘤的大小、形状和颜色进行描述。 在机器学习中,这里的每个实体或每一行被称为一个样本 (sample)或数据点,而每一列(用来描述这些实体的属性)则被称为特征 (feature)。 本书后面会更详细地介绍如何构建良好的数据表征,这被称为 特征提取 (feature extraction)或特征工程 (feature engineering)。但你应该记住,如果没有数据信息的话,所有机器学习算法都无法做出预测。举个例子,如果你只有病人的姓氏这一个特征,那么任何算法都无法预测其性别。这一信息并未包含在数据中。如果你添加另一个特征,里面包含病人的名字,那么你预测正确的可能性就会变大,因为通过一个人的名字往往可以判断其性别。 ### 1.1.2 熟悉任务和数据 在机器学习过程中,最重要的部分很可能是理解你正在处理的数据,以及这些数据与你想要解决的任务之间的关系。随机选择一个算法并将你的数据输入进去,这种做法是不会有什么用的。在开始构建模型之前,你需要理解数据集的内容。每一种算法的输入数据类型和最适合解决的问题都是不一样的。在构建机器学习解决方案的过程中,你应该给出下列问题的答案,或者至少要将这些问题记在脑中。 * 我想要回答的问题是什么?已经收集到的数据能够回答这个问题吗? * 要将我的问题表示成机器学习问题,用哪种方法最好? * 我收集的数据是否足够表达我想要解决的问题? * 我提取了数据的哪些特征?这些特征能否实现正确的预测? * 如何衡量应用是否成功? * 机器学习解决方案与我的研究或商业产品中的其他部分是如何相互影响的? 从更大的层面来看,机器学习算法和方法只是解决特定问题的过程中的一部分,一定要始终牢记整个项目的大局。许多人浪费大量时间构建复杂的机器学习解决方案,最终却发现没有解决正确的问题。 当深入研究机器学习的技术细节时(本书会讲到这些细节),很容易忽视最终目标。我们虽然不会详细讨论上面列出的问题,但仍然鼓励你记住自己在开始构建机器学习模型时做出的假设,无论是明确的还是隐含的假设。 ## 1.2 为何选择Python Python 已经成为许多数据科学应用的通用语言。它既有通用编程语言的强大功能,也有特定领域脚本语言(比如 MATLAB 或 R)的易用性。Python 有用于数据加载、可视化、统计、自然语言处理、图像处理等各种功能的库。这个大型工具箱为数据科学家提供了大量的通用功能和专用功能。使用 Python 的主要优点之一,就是利用终端或其他类似 Jupyter Notebook 的工具能够直接与代码进行交互;我们很快会讲到 Jupyter Notebook。机器学习和数据分析本质上都是迭代过程,由数据驱动分析。这些过程必须要有快速迭代和易于交互的工具。 作为通用编程语言,Python 还可以用来创建复杂的图形用户界面(graphical user interface,GUI)和 Web 服务,也可以集成到现有系统中。 ## 1.3 scikit-learn scikit-learn 是一个开源项目,可以免费使用和分发,任何人都可以轻松获取其源代码来查看其背后的原理。scikit-learn 项目正在不断地开发和改进中,它的用户社区非常活跃。它包含许多目前最先进的机器学习算法,每个算法都有详细的文档([http://scikit-learn.org/stable/documentation](http://scikit-learn.org/stable/documentation) )。scikit-learn 是一个非常流行的工具,也是最有名的 Python 机器学习库。它广泛应用于工业界和学术界,网上有大量的教程和代码片段。scikit-learn 也可以与其他大量 Python 科学计算工具一起使用,本章后面会讲到相关内容。 在阅读本书的过程中,我们建议你同时浏览 scikit-learn 用户指南([http://scikit-learn.org/stable/user_guide.html](http://scikit-learn.org/stable/user_guide.html) )和 API 文档,里面给出了每个算法的更多细节和更多选项。在线文档非常全面,而本书会介绍机器学习的所有必备知识,以便于你深入了解。 ### 安装scikit-learn scikit-learn 依赖于另外两个 Python 包:NumPy 和 SciPy。若想绘图和进行交互式开发,还应该安装 matplotlib 、IPython 和 Jupyter Notebook。我们推荐使用下面三个预先打包的 Python 发行版之一,里面已经装有必要的包。 #### Anaconda ([https://store.continuum.io/cshop/anaconda/](https://store.continuum.io/cshop/anaconda/) ) 用于大规模数据处理、预测分析和科学计算的 Python 发行版。Anaconda 已经预先安装好 NumPy、SciPy、matplotlib 、pandas 、IPython、Jupyter Notebook 和 scikit-learn 。它可以在 Mac OS、Windows 和 Linux 上运行,是一种非常方便的解决方案。对于尚未安装 Python 科学计算包的人,我们建议使用 Anaconda。Anaconda 现在还免费提供商用的 Intel MKL 库。MKL(在安装 Anaconda 时自动安装)可以使 scikit-learn 中许多算法的速度大大提升。 #### Enthought Canopy ([https://www.enthought.com/products/canopy/](https://www.enthought.com/products/canopy/) ) 用于科学计算的另一款 Python 发行版。它已经预先装有 NumPy、SciPy、matplotlib 、pandas 和 IPython,但免费版没有预先安装 scikit-learn 。如果你是能够授予学位的学术机构的成员,可以申请学术许可,免费使用 Enthought Canopy 的付费订阅版。 Enthought Canopy 适用于 Python 2.7.x,可以在 Mac OS、Windows 和 Linux 上运行。 #### Python(x,y) ([http://python-xy.github.io/](http://python-xy.github.io/) ) 专门为 Windows 打造的 Python 科学计算免费发行版。Python(x,y) 已经预先装有 NumPy、SciPy、matplotlib 、pandas 、IPython 和 scikit-learn 。 如果你已经安装了 Python,可以用 pip 安装上述所有包: ``` pip install numpy scipy matplotlib ipython scikit-learn pandas ```