Python机器学习算法(txt+pdf+epub+mobi电子书下载)


发布时间:2020-11-06 10:50:00

点击下载

作者:赵志勇

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python机器学习算法

Python机器学习算法试读:

前言

起源

在读研究生期间,我就对机器学习算法萌生了很浓的兴趣,并对机器学习中的常用算法进行了学习,利用 MATLAB 对每一个算法进行了实践。在此过程中,每当遇到不懂的概念或者算法时,就会在网上查找相关的资料。也看到很多人在博客中分享算法的学习心得及算法的具体过程,其中有不少内容让我受益匪浅,但是有的内容仅仅是算法的描述,缺少实践的具体过程。

注意到这一点之后,我决定开始在博客中分享自己学习每一个机器学习算法的点点滴滴,为了让更多的初学者能够理解算法的具体过程并从中受益,我计划从三个方面出发,第一是算法过程的简单描述,第二是算法理论的详细推导,第三是算法的具体实践。2014年1月10日,我在CSDN上写下了第一篇博客。当时涉及的方向主要是优化算法和简单易学的机器学习算法。

随着学习的深入,博客的内容越来越多,同时,在写作过程中,博客的质量也在慢慢提高,这期间也是机器学习快速发展的阶段,在行业内出现了很多优秀的算法库,如Java版本的weka、Python版本的sklearn,以及其他的一些开源程序,通过对这些算法库的学习,我丰富了很多算法的知识,同时,我将学习到的心得记录在简单易学的机器学习算法中。工作之后,越发觉得这些基础知识对于算法的理解很有帮助,积累的这些算法学习材料成了我宝贵的财富。

2016年,电子工业出版社博文视点的符隆美编辑联系到我,询问我是否有意向将这些博文汇总写一本书。能够写一本书是很多人的梦想,我也不例外。于是在 2016年9月,我开始了对本书的构思,从选择算法开始,选择出使用较多的一些机器学习算法。在选择好算法后,从算法原理和算法实现两个方面对算法进行描述,希望本书能够在内容上既能照顾到初学者,又能使具有一定机器学习基础的读者从中受益。

在写作的过程中,我重新查阅了资料,力求保证知识的准确性,同时,在实践的环节中,我使用了目前比较流行的Python语言实现每一个算法,使得读者能够更容易理解算法的过程,在介绍深度学习的部分时,使用到了目前最热门的TensorFlow框架。为了帮助读者理解机器学习算法在实际工作中的具体应用,本书专门有一章介绍项目实践的部分,综合前面各种机器学习算法,介绍每一类算法在实际工作中的具体应用。

内容组织

本书开篇介绍机器学习的基本概念,包括监督学习、无监督学习和深度学习的基本概念。

第一部分介绍分类算法。分类算法是机器学习中最常用的算法。在分类算法中着重介绍Logistic回归、Softmax Regression、Factorization Machine、支持向量机、随机森林和BP神经网络等算法。

第二部分介绍回归算法。与分类算法不同的是,在回归算法中其目标值是连续的值,而在分类算法中,其目标值是离散的值。在回归算法中着重介绍线性回归、岭回归和CART树回归。

第三部分介绍聚类算法。聚类是将具有某种相同属性的数据聚成一个类别。在聚类算法中着重介绍K-Means算法、Mean Shift算法、DBSCAN算法和Label Propagation算法。

第四部分介绍推荐算法。推荐算法是一类基于具体应用场景的算法的总称。在推荐算法中着重介绍基于协同过滤的推荐、基于矩阵分解的推荐和基于图的推荐。

第五部分介绍深度学习。深度学习是近年来研究最为火热的方向。深度学习的网络模型和算法有很多种,在本书中,主要介绍最基本的两种算法:AutoEncoder 和卷积神经网络。

第六部分介绍以上这些算法在具体项目中的实践。通过具体的例子,可以清晰地看到每一类算法的应用场景。

附录介绍在实践中使用到的Python语言、numpy库及TensorFlow框架的具体使用方法。

小结

本书试图从算法原理和实践两个方面来介绍机器学习中的常用算法,对每一类机器学习算法,精心挑选了具有代表性的算法,从理论出发,并配以详细的代码,本书的所有示例代码使用 Python 语言作为开发语言,读者可以从 https://github.com/zhaozhiyong19890102/Python-Machine-Learning-Algorithm中下载本书的全部示例代码。

由于时间仓促,书中难免存在错误,欢迎广大读者和专家批评、指正,同时,欢迎大家提供意见和反馈。本书作者的电子邮箱:zhaozhiyong1989@126.com。

致谢

首先,我要感谢陶辉和孙永生这两位良师益友,在本书的写作过程中,为我提供了很多意见和建议,包括全书的组织架构。感谢陶辉抽出宝贵的时间帮我写序,感谢孙永生帮我检查程序。

其次,我要感谢符隆美编辑和董雪编辑在写作和审稿的过程中对我的鼓励和悉心指导。

再次,我要感谢姜贵彬、易慧民、潘文彬,感谢他们能够抽出宝贵的时间帮本书写推荐语,感谢他们在读完本书后给出的宝贵意见和建议。

然后,我要感谢July在本书的写作过程中对本书提出的宝贵意见,感谢张俊林、王斌在读完本书初稿后对本书的指点。

最后,感谢我的亲人和朋友,是你们的鼓励才使得本书能够顺利完成。赵志勇2017年6月6日于北京

读者服务

轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。

• 提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。

• 交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。

页面入口:http://www.broadview.com.cn/31319

三步加入“人工智能交流群”,实时获取资源共享,并有机会与大咖实时交流。

•扫码添加小编为微信好友。

•申请验证时输入“AI”。

•小编带你加入“人工智能交流群”。0绪论

从计算机被发明后,实现人工智能(Artificial Intelligence,AI)成了一代代科学家和技术工作者的奋斗目标,在寻求解决方案的过程中,人们遇到了很多的难题,同时为克服这些难题做了很多的尝试。

随着时代的发展,大量的网络应用出现在人们的生活中,各种智能设备的出现使数据的收集变成现实,同时,计算机的计算能力得到了很大的提高,如何从大量数据中提取出有价值的信息成了非常重要的课题,机器学习就是这样一种能够从无序的数据中提取出有用信息的工具。0.1机器学习基础0.1.1 机器学习的概念

机器学习能够从无序的数据中提取出有用的信息,那么什么是机器学习呢?以垃圾邮件的检测为例,垃圾邮件的检测是指能够对邮件做出判断,判断其为垃圾邮件还是正常邮件。

在人工智能技术发展的初期,人们尝试通过手写规则来解决许多问题。例如,在垃圾邮件的检测中,当邮件中出现事先指定的一些可能为垃圾邮件的词时,这条邮件很可能是垃圾邮件,同时,当邮件里出现链接时,它也很可能是垃圾邮件。这些规则在一定程度上对垃圾邮件的检测起到了一些作用,但是随着规则越来越多,这样的检测系统也变得越来越复杂。这时候,人们发现解决这种问题的根本途径是如何自动地从数据的某些特征中学习他们之间的关系,并且随着对数据的不断学习,提升垃圾检测的性能。

机器学习是从数据中学习和提取有用的信息,不断提升机器的性能。那么,对于一个具体的机器学习的问题,很重要的一部分是对数据的收集,我们称这部分数据为训练数据。机器学习的基本工作是从这些数据中学习规则,利用学习到的规则来预测新的数据。0.1.2 机器学习算法的分类

在机器学习中,根据任务的不同,可以分为监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)、半监督学习(Semi-Supervised Learning)和增强学习(Reinforcement Learning)。

监督学习(Supervised Learning)的训练数据包含了类别信息,如在垃圾邮件检测中,其训练样本包含了邮件的类别信息:垃圾邮件和非垃圾邮件。在监督学习中,典型的问题是分类(Classification)和回归(Regression),典型的算法有Logistic Regression、BP神经网络算法和线性回归算法。

与监督学习不同的是,无监督学习(Unsupervised Learning)的训练数据中不包含任何类别信息。在无监督学习中,其典型的问题为聚类(Clustering)问题,代表算法有K-Means算法、DBSCAN算法等。

半监督学习(Semi-Supervised Learning)的训练数据中有一部分数据包含类别信息,同时有一部分数据不包含类别信息,是监督学习和无监督学习的融合。在半监督学习中,其算法一般是在监督学习的算法上进行扩展,使之可以对未标注数据建模。

监督学习和无监督学习是使用较多的两种学习方法,而半监督学习是监督学习和无监督学习的融合,在本书中,我们着重介绍监督学习和非监督学习。0.2监督学习0.2.1 监督学习

前边简单介绍了监督学习(Supervised Learning)的概念,监督学习是机器学习算法中的一种重要的学习方法,在监督学习中,其训练样本中同时包含有特征和标签信息。在监督学习中,分类(Classification)算法和回归(Regression)算法是两类最重要的算法,两者之间最主要的区别是分类算法中的标签是离散的值,如广告点击问题中的标签为{+1,-1},分别表示广告的点击和未点击,而回归算法中的标签值是连续的值,如通过人的身高、性别、体重等信息+预测人的年龄,因为年龄是连续的正整数,因此标签为y∈N,且y∈[1,80]。0.2.2 监督学习的流程

监督学习流程的具体过程如图0.1所示。图0.1 监督学习流程

对于具体的监督学习任务,首先是获取到带有属性值的样本,假(1)(1)(2)(2)设有m个训练样本{(X ,y ),(X ,y ),…,(X (m)(m),y )},然后对样本进行预处理,过滤数据中的杂质,保留其中有用的信息,这个过程称为特征处理或者特征提取。

通过监督学习算法习得样本特征到样本标签之间的假设函数。监督学习通过从样本数据中习得假设函数,并用其对新的数据进行预测。0.2.3 监督学习算法

分类问题(Classification)是指通过训练数据学习一个从观测样本到离散的标签的映射,分类问题是一个监督学习问题。典型的问题有:①垃圾邮件的分类(Spam Classification):训练样本是邮件中的文本,标签是每个邮件是否是垃圾邮件({+1,-1},+1表示是垃圾邮件,-1表示不是垃圾邮件),目标是根据这些带标签的样本,预测一个新的邮件是否是垃圾邮件;②点击率预测(Click-through Rate Prediction):训练样本是用户、广告和广告主的信息,标签是是否被点击({+1,-1},+1表示点击,-1表示未点击)。目标是在广告主发布广告后,预测指定的用户是否会点击,上述两种问题都是二分类的问题;③手写字识别,即识别是{0,1,…,9}中的哪个数字,这是一个多分类的问题。

与分类问题不同的是,回归问题(Regression)是指通过训练数据学习一个从观测样本到连续的标签的映射,在回归问题中的标签是一系列连续的值。典型的回归问题有:①股票价格的预测,即利用股票的历史价格预测未来的股票价格;②房屋价格的预测,即利用房屋的数据,如房屋的面积、位置等信息预测房屋的价格。0.3无监督学习0.3.1 无监督学习

无监督学习(Unsupervised Learning)是另一种机器学习算法,与监督学习不同的是,在无监督学习中,其样本中只含有特征,不包含标签信息。与监督学习(Supervised Learning)不同的是,由于无监督学习不包含标签信息,在学习时并不知道其分类结果是否正确。0.3.2 无监督学习的流程

无监督学习流程的具体过程如图0.2所示。图0.2 无监督学习流程

对于具体的无监督学习任务,首先是获取到带有特征值的样本,(1)(2)(m)假设有m个训练数据{X ,X ,…,X},对这m个样本进行处理,得到样本中有用的信息,这个过程称为特征处理或者特征提取,最后是通过无监督学习算法处理这些样本,如利用聚类算法对这些样本进行聚类。0.3.3 无监督学习算法

聚类算法是无监督学习算法中最典型的一种学习算法。聚类算法利用样本的特征,将具有相似特征的样本划分到同一个类别中,而不关心这个类别具体是什么。如表0-1所示的聚类问题:表0-1 聚类问题

在表0-1所示的聚类问题中,通过分别比较特征1(是否有翅膀)和特征2(是否有鳍),对上述的样本进行聚类。从表0-1中的数据可以看出,样本1和样本2较为相似,样本3和样本4较为相似,因此,可以将样本1和样本2划分到同一个类别中,将样本3和样本4划分到另一个类别中,而不用去关心样本1和样本2所属的类别具体是什么。

除了聚类算法,在无监督学习中,还有一类重要的算法是降维的算法,数据降维基本原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间,从而获得一个关于原数据集紧致的低维表示。在本书中,主要介绍聚类算法。0.4推荐系统和深度学习

在机器学习算法中,除了按照上述的分类将算法分成监督学习和无监督学习外,还有其他的一些分类方法,如按照算法的功能,将算法分成分类算法、回归算法、聚类算法和降维算法等。随着机器学习领域的不断发展,出现了很多新的研究方向,推荐算法和深度学习是近年来研究较多的方向。0.4.1 推荐系统

随着信息量的急剧扩大,信息过载的问题变得尤为突出,当用户无明确的信息需求时,用户无法从大量的信息中获取到感兴趣的信息,同时,信息量的急剧上升也导致了大量的信息被埋没,无法触达一些潜在用户。推荐系统(Recommendation System,RS)的出现被称为连接用户与信息的桥梁,一方面帮助用户从海量数据中找到感兴趣的信息,另一方面将有价值的信息传递给潜在用户。

在推荐系统中,推荐算法起着重要的作用,常用的推荐算法主要有:协同过滤算法、基于矩阵分解的推荐算法和基于图的推荐算法。0.4.2 深度学习

传统的机器学习算法都是利用浅层的结构,这些结构一般包含最多一到两层的非线性特征变换,浅层结构在解决很多简单的问题上效果较为明显,但是在处理一些更加复杂的与自然信号的问题时,就会遇到很多问题。

随着计算机的不断发展,人们尝试使用深层的结构来处理这些更加复杂的问题,但是,同样也遇到了很多的困难,直到2006年,Hinton等人提出了逐层训练的概念,深度学习又一次进入了人们的视野,数据量的不断扩大以及计算机计算能力的增强,使得深度学习技术成为可能。在深度学习中,常用的几种模型包括:①自编码器模型,通过堆叠自编码器构建深层网络;②卷积神经网络模型,通过卷积层与采样层的不断交替构建深层网络;③循环神经网络。0.5Python和机器学习算法实践

在本书中,选择Python作为机器学习算法实践的语言,主要是因为Python语言的天然优势,同时,在机器学习算法中,涉及大量的与线性代数相关的知识,Python中有Numpy函数库可以专门用于处理各种线性代数的问题。

Python语言有很多优势,如:①Python社区有庞大的库,几乎可以解决大部分问题;②Python被称为胶水语言,可以以混合编译的方式使用C/C++/Java等语言的库;③Python语法简单,同时易于操作。

然而,对于 Python 语言来说,其唯一不足就是性能问题,Python 程序的运行效率不如Java或者C语言,但是,在Python中提供了调用Java和C语言的方法,因此,对于计算要求比较高的部分,可以使用 C 语言或者 Java 实现,这样就能同时利用Python的简单易用性和C语言的高效性。Python语言性能不是本书考虑的重点,因此不会在本书中提及Python性能相关的问题。

对于Python语言的各种操作以及对numpy的各种详细操作,可以参见附录A。参考文献

[1] Peter Harrington.机器学习实战[M].王斌,译.北京:人民邮电出版社.2013.

[2] Wesley J.Chun.Python核心编程(第二版)[M].宋吉广,译.北京:人民邮电出版社.-2008.

[3] 李航.统计学习方法[M].北京:清华大学出版社.2012.

[4] 周志华.机器学习[M].北京:清华大学出版社.2016.第一部分分类算法

分类算法是指根据样本的特征,将样本划分到指定的类别中。分类算法是一种监督的学习算法,在分类算法中,根据训练样本训练得到样本特征到样本标签之间的映射,利用该映射得到新的样本的标签,达到将新的样本划分到不同类别的目的。

第1章介绍最基本的分类算法Logistic Regression算法,基本的Logistic Regression算法是一个二分类的线性分类算法,由于其简单的特点,得到了广泛的应用;第2章介绍 Logistic Regression 算法的推广形式——Softmax Regression 算法,Softmax Regression算法用于处理多分类问题;第3章介绍Logistic Regression算法的另一种推广形式——Factorization Machine算法,该算法在Logistic Regression算法的基础上增加了交叉项;第4章介绍支持向量机SVM分类器,SVM分类算法是被公认的比较优秀的分类算法;第5章介绍一种集成的分类方法——随机森林,在集成方法中,通过组合多个分类器求解复杂的分类问题;第6章介绍BP神经网络算法,该算法可以有效解决线性不可分的问题,同时,BP神经网络是深度学习中算法的基础。1Logistic Regression

分类算法是典型的监督学习,其训练样本中包含样本的特征和标签信息。在二分类中,标签为离散值,如{+1,-1},分别表示正类和负类。分类算法通过对训练样本的学习,得到从样本特征到样本的标签之间的映射关系,也被称为假设函数,之后可利用该假设函数对新数据进行分类。

Logistic Regression算法是一种被广泛使用的分类算法,通过训练数据中的正负样本,学习样本特征到样本标签之间的假设函数,Logistic Regression算法是典型的线性分类器,由于算法的复杂度低、容易实现等特点,在工业界得到了广泛的应用,如:利用Logistic Regression算法实现广告的点击率预估。1.1 Logistic Regression模型1.1.1 线性可分VS线性不可分

对于一个分类问题,通常可以分为线性可分与线性不可分两种。如果一个分类问题可以使用线性判别函数正确分类,则称该问题为线性可分,如图1.1所示;否则为线性不可分问题,如图1.2所示。图1.1 线性可分图1.2 线性不可分1.1.2 Logistic Regression模型

Logistic Regression 模型是广义线性模型的一种,属于线性的分类模型。对于图1.1 所示的线性可分的问题,需要找到一条直线,能够将两个不同的类区分开,如图1.1所示,这条直线也称为超平面。

对于上述的超平面,可以使用如下的线性函数表示:

其中W 为权重,b为偏置。若在多维的情况下,权重W 和偏置b均为向量。在Logistic Regression算法中,通过对训练样本的学习,最终得到该超平面,将数据分成正负两个类别。此时,可以使用阈值函数,将样本映射到不同的类别中,常见的阈值函数有Sigmoid函数,其形式如下所示:

Sigmoid函数的图像如图1.3所示。图1.3 Sigmoid函数

从Sigmoid函数的图像可以看出,其函数的值域为(0,1),在0附近的变化比较明显。其导函数 f′(x)为:

现在,让我们利用Python实现Sigmoid函数,为了能够使用numpy中的函数,我们首先需要导入numpy:

import numpy as np

Sigmoid函数的具体实现过程如程序清单1-1所示。

程序清单1-1 S igmoid函数

在程序清单1-1中,Sigmoid函数的输出为Simoid值。对于输入向量X,其属于正例的概率为:

其中,σ表示的是Sigmoid函数。那么,对于输入向量X,其属于负例的概率为:

对于Logistic Regression算法来说,需要求解的分隔超平面中的参数,即为权重矩阵W 和偏置向量b,那么,这些参数该如何求解呢?为了求解模型的两个参数,首先必须定义损失函数。1.1.3 损失函数

对于上述的Logistic Regression算法,其属于类别y的概率为:

要求上述问题中的参数W 和b,可以使用极大似然法对其进行估(1)(1)(2)计。假设训练数据集有m个训练样本{(X ,y ),(X ,(2)(m)(m)y ),…,(X ,y )},则其似然函数为:(i)

其中,假设函数h(X)为:W,b

对于似然函数的极大值的求解,通常使用Log似然函数,在Logistic Regression算法中,通常是将负的Log似然函数作为其损失函数,即the negative log-likelihood (NLL)作为其损失函数,此时,需要计算的是NLL的极小值。损失函数l为:W,b

此时,我们需要求解的问题为:

为了求得损失函数l的最小值,可以使用基于梯度的方法进W,b行求解。1.2 梯度下降法

在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数l,接下来便是通过优化算法对损失函数l进行优化,以便寻找到最优的参数W。在求解机器学习参数W 的优化算法时,使用较多的是基于梯度下降的优化算法(Gradient Descent,GD)。

梯度下降法有很多优点,其中,在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的成本比较小,这使得梯度下降法能在很多大规模数据集上得到应用。梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点,并从当前点移动到新的迭代点继续寻找新的迭代点,直到找到最优解。1.2.1 梯度下降法的流程

梯度下降法是一种迭代型的优化算法,根据初始点在每一次迭代的过程中选择下降法方向,进而改变需要修改的参数,对于优化问题min f (w),梯度下降法的详细过程如下所示。

• 随机选择一个初始点w0

• 重复以下过程

○ 决定梯度下降的方向:

○ 选择步长α

○ 更新:w=w+α· d i+1ii

• 直到满足终止条件

具体过程如图1.4所示。图1.4 梯度下降的过程

在初始时,在点w处,选择下降的方向d ,选择步长α,更新w00的值,此时到达w处,判断是否满足终止的条件,发现并未到达最1∗∗优解w,重复上述的过程,直至到达w。1.2.2 凸优化与非凸优化

简单来讲,凸优化问题是指只存在一个最优解的优化问题,即任何一个局部最优解即全局最优解,如图1.5所示。图1.5 凸函数

非凸优化是指在解空间中存在多个局部最优解,而全局最优解是其中的某一个局部最优解,如图1.6所示。图1.6 非凸函数

最小二乘(Least Squares)、岭回归(Ridge Regression)和Logistic回归(Logistic Regression)的损失函数都是凸优化问题。1.2.3 利用梯度下降法训练Logistic Regression模型

对于上述的Logistic Regression算法的损失函数可以通过梯度下降法对其进行求解,其梯度为:(i)

其中,表示的是样本X 的第 j个分量。取w =b,且将偏0置项的变量x设置为1,则可以将上述的梯度合并为:0

根据梯度下降法,得到如下的更新公式:

利用上述的 Logistic Regression 中权重的更新公式,我们可以实现 Logistic Regression模型的训练,利用梯度下降法训练模型的具体过程,如程序清单1-2所示。

程序清单1-2 Logistic Regression模型的训练

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载