本书分为准备篇、基础篇、统计分析实战篇和机器学习实战篇。准备篇介绍了机器学习的发展及应用前景以及常用科学计算平台。基础篇先对数学基础及其在机器学习领域的应用进行讲述,同时推荐配套学习的数学书籍,然后运用实例说明计算平台的使用。最后,通过大量统计分析和机器学习案例提供实践指南。
为什么要写这本书随着全球第三次工业革命的迅猛发展,机器学习技术异军突起,人类对机器学习技术的研究也开辟出了许多全新的应用领域,这使智能机器的计算能力和可定制性上升到了一个新的层次。到了2015年,人类在机器学习领域取得了一系列重大的突破,这项技术已悄无声息地潜入我们的日常生活,而在未来,机器学习也将拥抱变化,持续发力。如今,它已经在各行各业的技术革新中扮演着日益重要的角色,从各方面影响和改变着我们的生活。
近年来,机器学习技术在国外得到了海量应用和深入发展。2015年11月,谷歌开源了全新的TensorFlow机器学习系统,该系统更快、更智能,也更具有弹性。2015年1月,机器学习平台 GraphLab改名为Dato,并获得了 1850 万美元的新融资(投资方为 Vulcan Capital 、Opus Capital 、New Enterprise Associates、Madrona Venture Group),此前他们曾获得 680 万美元的融资。2015年8月,Facebook推出了“M”,Facebook认为人类不仅会回答人工智能所不能回答的问题,而且从长远来看,人类也会帮助改善人工智能技术,“M”除了能做到回答问题、查阅信息等基本功能外,还可以帮助用户完成如购买商品、餐厅定位、安排旅行计划等操作。在2015年12月召开的“2015年神经信息处理系统”(NIPS)会议上,微软研究人员和工程师公开了20多篇机器学习新研究成果的论文。此外,微软还宣布,机器学习正在成为Windows 10的一部分:Skype翻译可以将口语几乎实时地翻译成其他语言,就像《星际迷航》中的通用翻译器那样,可以做到面对面的交流。Cortana个人数字助理在与用户的互动中不断学习与改进,从而帮助用户管理日历、跟踪快递,甚至能与用户聊天和讲笑话,实现真正的个性化互动体验。Clutter是微软Office 2016的成员,通过学习它可以识别出哪些电子邮件对用户来说重要,并自动将不重要的邮件重定向到一个单独的文件夹中,从而保持用户收件箱的整洁。2015年9月,美军军队医疗中心指挥官少将Steve Jones在美军陆军的一次会议上发言表示,未来可以让智能机器人代替人类上战场运送伤员,美国军方甚至高调宣布:未来战场上机器人救起的可能不是人,而是机器人,因为智能机器人军团将代替人类出征。
在国内,机器学习掀起了技术革新的热潮,智能技术得到了广泛的普及和应用。隶属于中国科学院的新松机器人自动化公司生产了智能复合型机器人,这个安装了眼睛和感知器件的智能机器人,可以在车间里自由地行走并十分精确地完成任务,当其他工位人手不足时,接到指令的他还会主动上前帮忙,马上进入角色并开始工作。百度创造和完善了大规模机器学习的技术,搭建了一个能容纳万亿特征数据的、分钟级别模型更新的、高效训练的点击率预估系统;为进一步深入地发展机器学习技术,百度开始研究如何从“机器学习”到“复制人类大脑”; 此外,百度甚至在2016年提出,百度的产品和服务都靠机器学习等技术来驱动。
随着机器学习技术在国内外的大量应用,机器学习工程师成为炙手可热的职位。现在中国已经悄然兴起了机器学习的学习热潮,掌握了机器学习技术的工程师将成为各大IT巨头疯抢的“香馍馍”,良好的发展势头和较高的职业薪水,吸引着越来越多的软件工程师和数据分析师涌入机器学习的领域。国内知名的公司百度、阿里巴巴、腾讯(俗称BAT)为迎接大数据时代带来的挑战,早已全面引进机器学习方面的人才,并有组织地对机器学习技术展开大规模的、更深入的研究。其他各大公司(包括非IT行业的公司)也提出了引进机器学习研发工程师的渴求。
但是,机器学习的入门门槛较高,尤其是对研究者的数学理解能力有较高的要求,相对于数据结构、算法导论中讲述的计算机算法及系统架构知识来说,机器学习是一个全新的领域,理解机器学习算法往往要从理解它所涉及的数学公式和数学知识开始,打好数学基础是非常有必要的,一旦掌握了数学分析、线性代数、概率与统计、统计学、离散数学、抽象代数、数学建模等数学理论后,理解机器学习算法就会容易很多,不再畏惧那些让人生厌的、麻烦的数学符号和数学公式,说不定还会喜欢上这些数学公式,并亲自推导一番。希望本书能帮助朋友们进入机器学习的精彩世界。
读者对象开发人员。在理解机器学习算法的基础上,调用机器学习的中间库进行开发,将机器学习应用于各种场景,如数据分析、图像识别、文本分类、搜索引擎、中文智能输入法等。
架构师。在理解机器学习算法的基础上,适应现代云计算平台的发展,将机器学习算法应用在大规模的并行计算上。同时,机器学习算法是大数据分析的基础,如神经网络、SVM、相似度分析、统计分析等技术。
机器学习的初、中级读者。人类对机器学习的研究只是一个开始,还远远没有结束。近年来,机器学习一直保持着强劲的发展势头,并拥有美好的发展前景,这点不同于某些软件开发领域中的程序语言或架构知识。掌握机器学习技术有一定的难度,但也意味着,掌握机器学习的技术就能获得更高的薪水和更具前景的职业。
如何阅读本书全书分为准备篇、基础篇、 统计分析实战篇和机器学习实战篇。机器学习算法建立在复杂的计算理论基础之上,并涉及多门数学学科。抽象的理论加上成堆的数学公式,给部分读者带来了极大的挑战,将渴求学习的人们挡在了门外。针对这种情况,本书力求理论联系实际,在介绍理论基础的同时,注重机器学习算法的实际运用,让读者更好地明白其中的原理。
准备篇中首先将介绍机器学习的发展及应用前景,使读者产生浓厚的兴趣,同时也将介绍目前常用的科学计算平台和本书将用到的工程计算平台,使读者消除对机器学习的畏难情绪,这些平台的使用也降低了机器学习软件实现的难度。
基础篇将介绍数学知识基础和计算平台应用实例,介绍计算平台的开发基本知识,并应用这些平台实现计算应用。
后,本书将针对统计分析实战和机器学习实战两个部分帮助读者建立机器学习实战指南,应用计算平台对统计分析及机器学习算法进行实现和应用,同时还会附上效果图,让读者对机器学习的基本应用和理论基础有一个形象的理解。
勘误和支持由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或不准确的地方,不妥之处恳请读者批评指正。如果遇到任何问题,或有更多的宝贵意见,欢迎发送邮件至我的邮箱,很期待能够听到您的真挚反馈。此外,本书的代码及相关资源(包括思考题中涉及的数据等)的下载地址(提取码:65ad)。
致谢首先我要感谢伟大的电影《机械公敌》及其主角威尔?史密斯,这位美国演员主演了《当幸福来敲门》《拳王阿里》《绝地战警》《全民超人汉考克》《黑衣人》《机械公敌》,他曾获奥斯卡奖和金球奖提名。他主演的《当幸福来敲门》让很多人理解到了幸福是什么,而《机械公敌》让我看到了人工智能的未来,我相信《机械公敌》描述的以下场景在将来一定能实现:
公元2035年,智能型机器人已被人类广泛利用,作为好的生产工具和人类伙伴,机器人在各个领域扮演着日益重要的角色。而由于众所周知的机器人“三大安全法则”的限制,人类对这些能够胜任各种工作且毫无怨言的伙伴充满信任,它们中的很多甚至已经成为各个家庭的组成成员。
在此,我衷心地感谢机械工业出版社华章公司的编辑杨福川老师和策划编辑杨绣国老师,由于他们的魄力和远见,让我顺利地完成了全部书稿。后我要感谢家人的大力支持和无私奉献,正因为有他们的关心和照顾,我才有足够的时间和精力来完成本书的撰写工作。
谨以此书,献给热爱机器学习的朋友,以及喜欢威尔·史密斯的影迷。
麦好(Myhaspl)2016年3月于中国广东
荐序
前言
第一部分 准备篇
第1章 机器学习发展及应用前景 2
1.1 机器学习概述 2
1.1.1 什么是机器学习 3
1.1.2 机器学习的发展 3
1.1.3 机器学习的未来 4
1.2 机器学习应用前景 5
1.2.1 数据分析与挖掘 5
1.2.2 模式识别 6
1.2.3 更广阔的领域 6
1.3 小结 7
第2章 科学计算平台 8
2.1 科学计算软件平台概述 9
2.1.1 常用的科学计算软件 9
2.1.2 本书使用的工程计算平台 10
2.2 计算平台的配置 11
2.2.1 Numpy等Python科学计算包的安装与配置 11
2.2.2 OpenCV 安装与配置 14
2.2.3 mlpy 安装与配置 14
2.2.4 BeautifulSoup安装与配置 15
2.2.5 Neurolab安装与配置 15
2.2.6 R安装与配置 16
2.3 小结 16
第二部分 基础篇
第3章 计算平台应用实例 18
3.1 Python计算平台简介及应用实例 18
3.1.1 Python语言基础 18
3.1.2 Numpy库 29
3.1.3 pylab、matplotlib绘图 36
3.1.4 图像基础 38
3.1.5 图像融合与图像镜像 46
3.1.6 图像灰度化与图像加噪 48
3.1.7 声音基础 51
3.1.8 声音音量调节 53
3.1.9 图像信息隐藏 58
3.1.10 声音信息隐藏 62
3.2 R语言基础 68
3.2.1 基本操作 69
3.2.2 向量 71
3.2.3 对象集属性 77
3.2.4 因子和有序因子 78
3.2.5 循环语句 79
3.2.6 条件语句 79
3.3 R语言科学计算 80
3.3.1 分类(组)统计 80
3.3.2 数组与矩阵基础 81
3.3.3 数组运算 84
3.3.4 矩阵运算 85
3.4 R语言计算实例 93
3.4.1 学生数据集读写 93
3.4.2 最小二乘法拟合 94
3.4.3 交叉因子频率分析 96
3.4.4 向量模长计算 97
3.4.5 欧氏距离计算 98
3.5 小结 99
思考题 99
第4章 生产环境基础 100
4.1 Windows Server 2008基础 100
4.1.1 Windows Server 2008 R2概述 101
4.1.2 Windows PowerShell 102
4.2 Linux基础 103
4.2.1 Linux命令 104
4.2.2 Shell基础 114
4.3 Vim编辑器 122
4.3.1 Vim编辑器概述 122
4.3.2 Vim常用命令 123
4.4 虚拟化平台 124
4.4.1 Citrix Xenserver概述 125
4.4.2 Citrix Xenserver部署 126
4.4.3 基于XenCenter的虚拟服务器管理 126
4.5 Linux环境下的NumPy安装 135
4.6 Linux环境下的R运行环境 136
4.7 PyPy编译器 136
4.7.1 PyPy概述 136
4.7.2 PyPy安装与配置 137
4.7.3 PyPy性能 137
4.7.4 PyPy实践之Lempel-Ziv压缩 138
4.8 小结 145
思考题 146
第三部分 统计分析实战篇
第5章 统计分析基础 148
5.1 数据分析概述 148
5.2 数学基础 149
5.3 回归分析 154
5.3.1 单变量线性回归 154
5.3.2 多元线性回归 156
5.3.3 非线性回归 157
5.4 数据分析基础 159
5.4.1 区间频率分布 159
5.4.2 数据直方图 161
5.4.3 数据散点图 162
5.4.4 五分位数 164
5.4.5 累积分布函数 165
5.4.6 核密度估计 166
5.5 数据分布分析 167
5.6 小结 169
思考题 170
第6章 描述性分析案例 171
6.1 数据图形化案例解析 171
6.1.1 点图 171
6.1.2 饼图和条形图 172
6.1.3 茎叶图和箱线图 173
6.2 数据分布趋势案例解析 175
6.2.1 平均值 175
6.2.2 加权平均值 175
6.2.3 数据排序 176
6.2.4 中位数 177
6.2.5 极差、半极差 177
6.2.6 方差 178
6.2.7 标准差 178
6.2.8 变异系数、样本平方和 178
6.2.9 偏度系数、峰度系数 179
6.3 正态分布案例解析 180
6.3.1 正态分布函数 180
6.3.2 峰度系数分析 181
6.3.3 累积分布概率 181
6.3.4 概率密度函数 182
6.3.5 分位点 183
6.3.6 频率直方图 185
6.3.7 核概率密度与正态概率分布图 185
6.3.8 正态检验与分布拟合 186
6.3.9 其他分布及其拟合 188
6.4 多变量分析 189
6.4.1 多变量数据分析 189
6.4.2 多元数据相关性分析 197
6.5 小结 201
思考题 201
第7章 假设检验与回归模型案例 202
7.1 假设检验 202
7.1.1 二项分布假设检验 202
7.1.2 数据分布检验 204
7.1.3 正态总体均值检验 205
7.1.4 列联表 206
7.1.5 符号检测 207
7.1.6 秩相关检验 210
7.1.7 Kendall相关检验 213
7.2 回归模型 214
7.2.1 回归预测与显著性检验 214
7.2.2 回归诊断 216
7.2.3 回归优化 217
7.2.4 主成分回归 219
7.2.5 广义线性模型 221
7.3 小结 226
思考题 226
第四部分 机器学习实战篇
第8章 机器学习算法 230
8.1 神经网络 230
8.1.1 Rosenblatt感知器 232
8.1.2 梯度下降 245
8.1.3 反向传播与多层感知器 251
8.1.4 Python神经网络库 270
8.2 统计算法 272
8.2.1 平均值 272
8.2.2 方差与标准差 274
8.2.3 贝叶斯算法 276
8.3 欧氏距离 279
8.4 余弦相似度 280
8.5 SVM 281
8.5.1 数学原理 281
8.5.2 SMO算法 283
8.5.3 算法应用 283
8.6 回归算法 287
8.6.1 线性代数基础 288
8.6.2 最小二乘法原理 289
8.6.3 线性回归 290
8.6.4 多元非线性回归 292
8.6.5 岭回归方法 294
8.6.6 伪逆方法 295
8.7 PCA降维 296
8.8 关联规则 297
8.8.1 关联规则概述 297
8.8.2 频繁项集算法 298
8.8.3 关联规则生成 301
8.8.4 实例分析 302
8.9 自动分类 306
8.9.1 聚类算法 306
8.9.2 决策树 313
8.9.3 AdaBoost 316
8.9.4 竞争型神经网络 317
8.9.5 Hamming神经网络 323
8.10 小结 325
思考题 325
第9章 数据拟合案例 327
9.1 数据拟合 327
9.1.1 图像分析法 327
9.1.2 神经网络拟合法 338
9.2 线性滤波 352
9.2.1 WAV声音文件 352
9.2.2 线性滤波算法过程 352
9.2.3 滤波Python实现 353
9.3 数据或曲线平滑 358
9.3.1 平滑概述 358
9.3.2 移动平均 359
9.3.3 递归线性过滤 362
9.3.4 指数平滑 364
9.4 小结 368
思考题 368
第10章 图像算法案例 370
10.1 图像边缘算法 370
10.1.1 数字图像基础 370
10.1.2 算法描述 371
10.2 图像匹配 372
10.2.1 差分矩阵求和 373
10.2.2 差分矩阵均值 375
10.2.3 欧氏距离匹配 376
10.3 图像分类 382
10.3.1 余弦相似度 382
10.3.2 PCA图像特征提取算法 388
10.3.3 基于神经网络的图像分类 389
10.3.4 基于SVM的图像分类 394
10.4 高斯噪声生成 397
10.5 二值化 401
10.5.1 threshold 401
10.5.2 adaptiveThreshold 402
10.6 插值与缩放 404
10.7 仿射 405
10.7.1 仿射原理 405
10.7.2 仿射变换实例 405
10.8 透视投影与透视变换 406
10.8.1 透视投影原理 406
10.8.2 透视投影实例 407
10.9 灰度变换与图像增强 409
10.9.1 灰度变换概述 409
10.9.2 对数变换 409
10.9.3 分段线性变换 410
10.9.4 指数变换 411
10.9.5 直方图均衡化 412
10.10 图像滤波与除噪 415
10.10.1 均一化块滤波 415
10.10.2 邻域平均法 420
10.10.3 中值滤波 423
10.10.4 高斯滤波 427
10.10.5 双边滤波 429
10.10.6 卷积滤波 431
10.10.7 边缘检测 433
10.11 小结 435
思考题 435
第11章 机器视觉案例 437
11.1 人脸辨识 437
11.1.1 人脸定位 437
11.1.2 人脸辨识 439
11.2 手写数字识别 446
11.2.1 手写数字识别算法 446
11.2.2 算法的Python实现 447
11.3 运动侦测 449
11.3.1 视频采集 450
11.3.2 差分算法 452
11.3.3 光流法 456
11.4 形状检测 458
11.4.1 KNN算法概述 458
11.4.2 形状特征提取 459
11.4.3 形状分类 459
11.5 小结 462
思考题 462
第12章 文本分类案例 463
12.1 文本分类概述 463
12.2 余弦相似度分类 464
12.2.1 中文分词 465
12.2.2 停用词清理 467
12.2.3 算法实战 468
12.3 朴素贝叶斯分类 473
12.3.1 算法描述 473
12.3.2 先验概率计算 474
12.3.3 最大后验概率 474
12.3.4 算法实现 474
12.4 自然语言处理 480
12.4.1 NLTK简介 480
12.4.2 NLTK与jieba的配置 481
12.4.3 中文分词并标注词性 483
12.4.4 词特征指标分析 484
12.4.5 Web文档分析 499
12.4.6 Web文档的朴素贝叶斯分类 503
12.4.7 语法结构分析 515
12.4.8 Web文档聚类 518
12.5 小结 526
思考题 526