Python机器学习与量化投资(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-05 19:13:07

点击下载

作者:何海群

出版社:电子工业出版社

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

Python机器学习与量化投资

Python机器学习与量化投资试读:

前言

本书特色

本书全程采用黑箱模式和MBA案例模式,结合大量经典案例,介绍sklearn机器学习模块库和常用的机器学习算法,懂Excel就能看懂本书;逆向式课件模式,结合大量案例、图表,层层剖析;三位一体的课件模式:图书+开发平台+成套的教学案例,系统讲解、逐步深入。

本书是《零起点Python机器学习快速入门》的后续之作,为了节省篇幅,省略了Python基础教程,以及sklearn等机器学习方面的入门内容,没有经验的读者,建议先阅读《零起点Python机器学习快速入门》,再阅读本书,这样会收到事半功倍的效果。

本书简单实用,书中配备大量的图表说明,本书特点如下。

· IT零起点:无须任何电脑编程基础,只要会打字、会使用Excel,就能看懂本书,利用本书配套的Python软件包,轻松学会如何利用Python对股票数据进行专业分析和量化投资分析。

· 投资零起点:无须购买任何专业软件,本书配套的zwPython软件包,采用开源模式,提供100%全功能、全免费的工业级数据分析平台。

· 配置零起点:所有软件、数据全部采用“开箱即用”模式,绿色版本,无须安装,解压缩后即可直接运行系统。

· 理财零起点:采用通俗易懂的语言,配合大量专业的图表和实盘操作案例,无须任何专业金融背景,轻松掌握各种量化投资策略。

· 数学零起点:全书没有任何复杂的数学公式,只有最基本的加、减、乘、除,轻轻松松就能看懂全书。

网络资源

本书的案例程序,已经做过优化处理,无须GPU显卡,全部支持单CPU平台,不过为避免版本冲突,请尽量使用zwPython2017m6版本运行本书的案例程序。

使用其他运行环境的读者,如Linux、Mac平台的用户,请尽量使用Python 3版本,自行安装其他所需的模块库,如Numpy、Pandas、Tushare等第三方模块库。

此外需要注意的是,大家运行本书案例得到的结果可能与书中略有差别;甚至多次运行同一案例,结果都有所差异。这属于正常情况,因为很多机器学习函数,内部使用了随机数作为种子数,用于系统变量初始化等操作,每次分析的起点或者中间参数会有所不同。

版本冲突是开源项目常见的问题,为了解决这个问题,本书的源码是独立保存的。此外,我们还特意设计了zwPython教学版。

建议初学者先使用zwPython教学版,有关的课件程序,已经经过版本兼容测试,并且集成了zwDat金融数据集。

本书的读者QQ互动群:QQ 1群的群号是124134140;QQ 2群的群号是650924099;QQ 3群的群号是450853713。

资源下载地址:TopQuant极宽量化网站“资源中心”。

请浏览以下网站,获取最新的网络资源地址:

· TopQuant.vip极宽量化社区

· ziwang.com字王网站

目前两个网站的指向都是一样的。

另外还可以在博文视点网站下载:http://www.broadview.com.cn。

目录设置

为运行本书课件程序,用户需要下载以下三个软件,并设置好目录:

· zwPython,必须放在根目录,是Python开发平台,为避免版本冲突,请尽量使用zwPython2017m6版本。

· kb_demo,本书sklearn机器学习配套课件源码。

· pg_demo,本书Python入门学习配套课件源码。

以上软件、程序最好保存在固态硬盘,这样速度会快很多;目录名称不要使用中文名称,压缩文件当中的中文名称只是为了便于用户下载。

zwPython开发平台必须放在根目录,课件程序可以放在其他自定义目录,建议放在zwPython目录下面,作为二级目录。

致谢

特别感谢电子工业出版社的黄爱萍和陈林编辑在选题策划和稿件整理方面所做的大量工作。

同时,在本书创作过程中,极宽开源量化团队和培训班的全体成员提出很多宝贵的意见,并对部分课件程序做了中文注解。

特别是吴娜、余勤、邢梦来、孙励、王硕几位成员,为TOP极宽开源量化文库和开源软件编写文档,以及在团队成员管理方面做了大量工作,对他们的付出表示感谢。何海群(字王)TOP 极宽量化开源组发起人2018年10月1日第1章Python与机器学习

目前神经网络、深度学习大热,谷歌、脸书、微软、IBM、亚马逊等企业巨头,纷纷投入巨资,各种深度学习的开发平台层出不穷:TensorFlow、PyTorch、CNTK、MXNet、Keras等。

与此同时,Python语言成为人工智能第一开发语言。

在传统的机器学习领域,或者说古典人工智能领域却波澜不惊,scikit-learn始终居于王者般的统治地位。

图1.1是scikit-learn网站首页截图,在网站首页抬头右侧,写着:

Machine Learning in Python(Python中的机器学习)

换句话说:

scikit-learn=Python 机器学习图1.1 scikit-learn网站首页截图1.1 scikit-learn模块库

scikit-learn,简称sklearn,是用Python开发的机器学习模块库,其中包含大量机器学习算法、数据集。

scikit-learn模块库优点很多:简单易用、API接口完善、案例文档丰富等。内置大量经过筛选的、高质量的机器学习模型;模块库覆盖了大多数机器学习任务;系统可扩展至较大的数据规模。

在scikit-learn.org网站首页抬头,scikit-learn官方自我总结的优点如下。

· 简单高效的数据挖掘和数据分析工具。

· 可在各种环境中重复使用。

· 建立在NumPy、SciPy和Matplotlib上。

· 开放源码,可免费商业使用BSD license。

scikit-learn模块库是老牌的开源Python机器学习算法框架,源于2007年谷歌公司的Google Summer of Code项目,最早由数据科学家David Cournapeau发起,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。

scikit-learn模块库是一个简洁、高效的算法库,提供一系列的监督学习和无监督学习的算法,以用于数据挖掘和数据分析。scikit-learn几乎覆盖了机器学习的所有主流算法,这为其在Python开源世界中奠定了江湖地位。

scikit-learn的算法库是建立在SciPy(Scientific Python)之上的,这也是其命名的由来。

SciPy模块库是Python语言的基础科学计算工具包,基于SciPy,目前开发者们针对不同的应用领域,已经发展出了众多的分支版本,SciPy的扩展和模块在传统上被命名为Scikits,即SciPy工具包的意思。

和其他众多的开源项目一样,scikit-learn目前主要由社区成员自发维护。可能是由于维护成本的限制,scikit-learn相比其他项目要显得更为保守。

这种保守主要体现在两个方面。

· scikit-learn从来不做除机器学习领域之外的其他扩展。

· scikit-learn从来不采用未经广泛验证的算法。1.1.1 scikit-learn的缺点

虽然scikit-learn模块库功能强大,目前已经是机器学习最重要的模块库,但是,scikit-learn也有缺点。

scikit-learn模块库的缺点主要包括以下几个方面。

· 不支持深度学习和强化学习。

· 不支持PyPy加速,也不支持GPU加速。

· 不支持除Python之外的其他编程语言。

这些缺点主要是由历史原因造成的,scikit-learn毕竟是2007年的作品,已经有超过十年的历史,其整体架构不适用于目前的GPU编程、神经网络和深度学习。不过这些缺点都不是大问题。

在深度学习、神经网络领域,目前有众多的优秀平台:TensorFlow、MXNet、CNTK、PyTorch等,scikit-learn模块库与这些平台配合,主要用于数据预处理和结果验证。

GPU加速和PyPy优化属于Python底层优化,特别是NumPy基础科学计算库的优化,目前基于GPU的优化版本已经不断涌现,其中MXNet、PyTorch底层模块库,都是基于NumPy的GPU优化版本。

从工程角度而言,scikit-learn的性能表现是非常不错的。

究其原因,一方面是因为其内部算法的实现十分高效,另一方面或许可以归功于Cython编译器:通过Cython在scikit-learn框架内部生成C语言代码的运行方式,scikit-learn消除了大部分的性能瓶颈。

至于最后一个缺点,scikit-learn模块库不支持除Python之外的其他编程语言。这更加不是问题,目前Python已经是人工智能、机器学习领域的标准编程语言,强如Facebook,坚持多年,最终还是把Lua语言开发的Torch项目,全部采用Python改写,并重新命名为PyTorch项目。1.1.2 scikit-learn算法模块

为了方便学习,scikit-learn开发团队还提供了一个scikit-learn算法模块图,如图1.2所示。图1.2 scikit-learn算法模块图

图1.3是scikit-learn算法模块图的汉化版本。

scikit-learn模块库实现了一整套用于数据降维、模型选择、特征提取和归一化的完整算法和模块,并且针对每个算法和模块,底层都进行了高度优化以提升速度,与此同时,模块库提供了丰富的参考案例和详细的说明文档。

这些案例程序,内容覆盖全面,讲解细致,并且很多案例都使用了真实的数据,绝大多数案例还配有Matplotlib绘制的数据图表。图1.3 scikit-learn算法模块图汉化版

据官方的统计,scikit-learn模块库共提供了200多个参考案例程序,包括统计学习、监督学习、模型选择和无监督学习等若干部分。1.1.3 scikit-learn六大功能

scikit-learn机器学习模块库,功能强大,模块繁多。模块库的主要功能包括以下六大类别:分类、回归、聚类、数据降维、模型选择和数据预处理。

需要说明的是,随着近年神经网络、深度学习的崛起,scikit-learn机器学习模块库在最新版本的模型库中增加了MLP多层感知器等最基本的神经网络模型。

不过,scikit-learn本身不支持深度学习,也不支持GPU加速,因此其内置的MLP等模型仅用于教学和小规模数据应用。

图1.4是scikit-learn模块功能图,也是scikit-learn网站首页截图,图1.5是scikit-learn模块功能图的汉化版本。图1.4 scikit-learn模块功能图图1.5 scikit-learn模块功能图汉化版

1.分类

分类是指识别某个对象属于哪个类别,属于监督学习的范畴,最常见的应用场景包括垃圾邮件检测和图像识别等。

目前scikit-learn已经实现的分类算法包括:SVM(支持向量机)、Nearest Neighbors(最近邻)、逻辑回归、Random Forest(随机森林)、决策树,以及多层感知器、MLP神经网络等。

2.回归

回归是指预测与对象相关联的连续值属性,最常见的应用场景包括预测药物反应和股票价格等。

目前scikit-learn已经实现的回归算法包括:SVR(支持向量回归)、Ridge Regression(脊回归)、Lasso回归、Elastic Net(弹性网络)、LARS(最小角回归)、贝叶斯回归,以及各种不同的鲁棒回归算法等。

可以看到,scikit-learn内置的回归算法几乎涵盖了所有开发者的需求,而且更重要的是,scikit-learn针对每种算法都进行了底层优化加速,并且提供了简单明了的参考案例。

3.聚类

聚类是指将相似对象自动分组,也就是自动识别具有相似属性的给定对象,并将其分组为集合,属于无监督学习的范畴,最常见的应用场景包括顾客细分和试验结果分组。

目前scikit-learn已经实现的聚类算法包括:k-Means聚类、Spectral Clustering(谱聚类)、Mean-shift(均值偏移)、分层聚类、DBSCAN聚类等。

4.降维

数据降维是指减少要考虑的随机变量的个数,其主要应用场景包括可视化处理和效率提升。

目前scikit-learn已经实现的降维算法包括:PCA(主成分分析)、NMF(非负矩阵分解)、Feature Selection(特征选择)等降维技术。

5.模型选择

模型选择是指比较、验证、选择参数和模型。对于给定参数和模型进行比较、验证和选择,其主要目的是通过参数调整来提升精度。

目前scikit-learn实现的模型选择算法包括:Grid Search(网格搜索)、Cross Validation(交叉验证)和各种针对预测误差评估的Metrics(度量)函数。

6.预处理

数据预处理是指数据的特征提取和归一化,是机器学习过程中的第一个环节,也是最重要的一个环节。

这里归一化是指将输入数据转换为具有零均值和单位权方差的新变量,但因为大多数时候都做不到精确等于零,因此会设置一个可接受的范围,一般都要求落在0~1之间。而特征提取是指将文本或图像数据转换为可用于机器学习的数字变量。

需要注意的是,数据预处理环节的特征提取与数据降维中提到的特征选择完全不同。

这里的特征选择是指通过去除不变、协变或其他统计上不重要的特征量,来改进机器学习的一种方法。

目前scikit-learn实现的预处理算法包括预处理和特征提取。1.2 开发环境搭建1.2.1 AI领域的标准编程语言:Python

Python是最适合初学者的编程语言,也是目前IT行业入门简单、功能强大的工业级开发平台的语言。

Python已经是机器学习、神经网络等人工智能开发领域的工业标准编程语言。

1.入门简单

任何熟悉JavaScript脚本、Visual Basic、C语言、Delphi的用户,通常一天即可学会Python。

即使是不会编程的设计师、打字员,一周内也能熟练掌握Python,学习难度绝对不会高于Photoshop、五笔输入法,至少笔者和许多程序员一样,也不会使用五笔输入法。

2.功能强大

海量级的Python模块库,提供了IT行业最前沿的开发功能。

· 大数据:pandas已经逐步超越R语言。

· CUDA:高性能计算,Python、C(C++)与Fortran是NVIDIA官方认可的3种编程语言,也是目前唯一适合PC平台的CUDA编程工具。

· 机器学习:scikit-learn、Theano、Pattern是国际上热门的机器学习平台。

· 自然语言:NLTK,全球首选的自然语言处理平台;spaCy,工业级的NLP平台。

· 人脸识别:OpenCV,光流算法、图像匹配、人脸算法,简单优雅。

· 游戏开发:Pygame提供图像、音频、视频、手柄、AI等全套游戏开发模块库。

· 字体设计:Fontforge,是唯一商业级的字体设计开源软件,内置的脚本语言和底层核心的Fonttools,都是基于Python而开发的。

· 电脑设计:blend、GIMP、Inkscape、MAYA、3DS都内置或扩展了Python语言支持。

既然Python如此美好,而且是100%免费的开源软件,学习Python的人越来越多,为什么Python始终还只是一种小众语言呢?

笔者认为,Python的“大众化”之路,存在以下两个瓶颈。

· 配置:软件行业有一句俗话“搞懂了软件配置,就学会了一半”。对于Python和Linux等许多开源项目而言,80%的问题,都出现在配置方面,尤其是模块库的配置。

· OOP(面向对象程序设计):大部分人都认为Python是一种“面向对象”的编程语言,而业界公认OOP的编程风格比较繁杂。

如果能够解决好以上两个问题,Python的学习难度可以降低90%,在应用领域可以瞬间提升数十倍效能,而且这种提升是零成本的。1.2.2 zwPython:难度降低90%,性能提高10倍

笔者在WinPython软件包的基础上,推出了“zwPython”——字王集成式Python开发平台。

· 提出“零配置、零对象”研发理念,绿色软件封装模式,类似Mac开箱即用风格,无须安装,解压即可直接使用,还可以放入U盘,支持Mob-App移动式开发编程。

· 具有“外挂”式“核弹”级开发功能,内置很多功能强大的开发模块库,例如OpenCV视觉、人脸识别、CUDA高性能GPU并行计算(OpenCL)、pandas大数据分析、机器学习、NLTK自然语言处理。

· 便于扩展,用户可以轻松增删相关模块库,全程智能配置,无须用户干预,就好像拷贝文件一样简单,而且支持U盘移动便携模式,真正实现了“一次安装,随处可用”。

· 针对中文开发文档缺乏、零散的不足,内置多部中文版OpenCV、Fontforge和Python入门教材。

· 内置多款中文开源TrueType字库。

· 大量示例脚本源码,涵盖OpenCV、CUDA、OpenCL、Pygame等。

如此种种只是为了便于IT行业外的用户能够“零起步”,快速入门,并且短时间内应用到生产环节当中去。

zwPython前身是zw2015sdk:字王智能字模设计平台,原设计目标是向广大设计师提供一款统一的、可编程的字体设计平台,以便于大家交流。

· 设计师、美工都是文艺青年、IT小白,所以,简单是必需的,开箱即用也必须是标配。

· 由于设计师做设计,所以图像处理PIL、Matplotlib模块是必需的。

· 集成了OpenCV作为图像处理、匹配模块,自然也提供了机器学习功能。

· 字模处理数据量很大,属于大数据范畴,须集成SciPy、NumPy和pandas数据分析模块。

· 由于原生Python速度慢,所以增加了PyCUDA、OpenCL高性能GPU计算模块。

如此一而再,再而三地扩充,发现zwPython已经基本覆盖了目前Python和IT编程90%的应用领域,因此又增加了部分模块,将zwPython扩展成为一个通用的、集成式Python开发平台。1.2.3 “零对象”编程模式

虽然,很多人认为Python是一种“面向对象”的编程语言。

但对于初学者而言,把Python视为一种BASIC风格的、过程式入门语言,学习难度可以降低90%,基本上学习一小时即可动手编写学习代码。

有人说,“面向对象”最大的好处是方便把人脑子搅乱。

Windows、Linux、UNIX、Mac OS X内核都是C语言编写的。有一种系统是C++写的内核,就是诺基亚的塞班系统,据说代码量很大,连他们自己的程序员都无法维护,最后就死掉了。

简而言之,“面向对象”风格的代码:一个字“繁”、两个字“繁繁”、三个字“繁繁繁”。“零对象编程模式,用BASIC的方式学习Python”,是笔者向Python编程语言的入门用户提出的一种全新的学习理论,一家之言,仅供参考。

Talk is cheap,show me the code!大家还是多多动手。

大家很容易理解“零配置”,下面关于“零对象”再补充几点。

· 不写“面向对象”风格的代码不等于不能使用,对于各种采用“对象”模式开发的模块库,我们仍然可以直接调用。

· 将Python视为非“面向对象”语言并非大逆不道,事实上,许多人认为,Python也是一种类似LISP的“函数”编程语言。

· 笔者从事编程十多年,从未用过“面向对象”模式编写过一行“class”(类对象)代码,依然可以应对各种编程工作。

· 目前“面向对象”编程理论在业界仍然争论不休,入门者功力不够,最好避开强者间的火力杀伤。

· “面向对象”过于复杂,与“人生苦短,我用Python”的优雅风格天生不合。1.2.4 开发平台搭建

本节主要讲解Python开发环境和数据包的配置、应用流程方面的知识。

本书所有案例程序均采用纯Python语言开发,除特别指明外,均默认使用Python 3语法,且经过zwPython平台测试。

zwPython是极宽公司推出的一个Python集成版本,功能强大,属于免费开源软件。系统内置了数百种专业的Python模块库,无须安装,解压即用。

本书所有案例程序可用于zwPython平台,以及各种支持Python 3的设备平台,包括Linux操作系统、Mac苹果电脑,以及安卓系统、树莓派。

其他非zwPython用户运行本书程序,如果出现问题,通常是缺少有关的Python模块库,可以根据调试信息安装相关的Python模块库,再运行相关程序。

限于篇幅,关于Python语言和pandas数据分析软件的基本操作,请读者查看有关图书。

zwPython下载地址,请参见TOP极宽量化网站“资源中心”:

http://www.topquant.vip,或http://www.ziwang.com。1.2.5 程序目录结构

本书配套程序的工作目录是zwPython\kb_demo,这个目录也是默认的工作目录,凡是没有标注目录的脚本文件,一般都位于该目录。有关的程序会定时在读者群发布更新,请读者及时下载。

kb_demo目录收录的是本书课件配套代码和所需数据,kb_demo目录也可以复制到其他目录,建议放到zwPython根目录下。

zwPython目录结构中的其他子目录如下。

· \zwPython\doc\:用户文档中心,包括用户手册和部分中文版的模块库资料。

· \zwPython\py36\:Python 3.6版本系统目录,除增加、删除模块库外,一般不需要改动本目录下的文件,以免出错。另外,如果日后Python版本升级,这个目录也会变化,如Python 3.7,会采用py37目录。

· \zwPython\demo\:示例脚本源码。

· \zwPython\zwrk\:zw工作目录,用户编写的脚本代码文件建议放在本目录下。

· \zwPython\TopQuant\:极宽量化系统源码。案例1-1:重点模块版本测试

案例1-1文件名是kb101_ver.py,主要用于重点模块版本号的测试,因为Python发展很快,许多配套的第三方软件模块也更新频繁,有时会出现API接口变化,从而造成版本冲突。

这种版本测试,是工程一线特别是团队项目起步阶段规范开发环境常用的一种手段。

案例1-1源码很简单,需要注意的是源码头部的import模块库导入语句。

import导入常用的模块和模块的缩写。前面的import模块语句都很正常,请注意最后两行语句。

tflearn模块有两种导入方式。严格说来,第二种方式不是标准的模块导入命令,而是一种别名,是长变量名称的缩写。这是因为,tflearn本身是TensorFlow系统内置的第三方模块,目前也有独立版本的tflearn模块,不过两者的源码并非完全同步,笔者在测试TF-GPU 1.2和tflearn 0.31时,就发现有版本冲突问题。

为了程序的兼容性,通常采用以下的模式。

案例1-1的核心代码也很简单,就是输出相关模块的版本号。

以上代码中,需要注意的是使用的版本显示命令。

这个虽然不是标准的Python语法,但已经是一种约定俗成,有时,也被称为魔法语句。

对应的输出信息如下。

以上输出信息中,需要注意的是开头的输出信息。

以上输出信息,表示使用TensorFlow作为后端程序,import导入Keras模块库时自动输出。这条信息只在第一次运行程序时出现,大家可以多运行几次,看看效果。

此外,需要注意的还有最后一条输出信息。

tflearn没有版本号,这是因为tflearn模块不支持相关的版本命令。

这可能是因为tflearn原本是TensorFlow内置的模块,所以没有加入相关的版本语句,即使我们采用import导入独立的tfearn模块,也无法显示相关的版本号。

目前,我们使用的tflearn版本号是0.31,为了避免版本冲突,还是希望tflearn开发团队在未来的更新当中增加相关的版本号信息,

案例1-1介绍了机器学习结合金融工程、量化回溯、数据分析等项目时常用的Python模块。

· TensorFlow是神经网络、深度学习开发平台。

· tflearn、Keras、TensorLayer是TensorFlow的简化接口。

· NLTK是语义分析模块。

· pandas是新一代数据分析工具。

· Plotly是新一代互动型数据可视化绘图工具。

· Arrow是新一代优雅、简洁的时间模块。

· Matplotlib是经典的绘图模块。

· Tushare是国内股票数据的采集模块。

以上模块和对应的版本,我们均已集成在最新版本的zwPython当中。使用其他平台,如Mac、Linux,或者其他Python开发环境的用户,请自行升级安装以上模块,并注意相关的版本号。

升级安装相关模块库时,请注意相关的依赖模块软件,特别是手动升级独立的安装包时。

笔者在升级以上模块库时,就遇到提示说,新版本的pandas缺乏某种属性,无法使用。后来在Stack Overflow这个全球最大的IT答问网站才找到答案。原来是配套的Dash模块也必须升级到最新的Dash 0.14.3版本。1.3 机器学习:从忘却开始

广大初学者面对人工智能、机器学习这些“高大上”的概念,一方面迫切希望能够掌握相关的知识,另外一方面,面对各种层出不穷的概念,往往会眼花缭乱,无所适从。

目前Python已经是人工智能、机器学习的行业标准语言,TensorFlow、Torch在2015年、2016年先后开放了Python语言接口。

scikit-learn是Python语言最重要的人工智能模块库,目前已经收入scikit套件,通常简称为sklearn。

还记得本书开头的那张scikit-learn算法模块图吗?不知道大家的第一感觉是什么,反正笔者看到此图的第一反应是吓呆了,也明白为什么这么多初学者对于人工智能望而生畏了。

笔者始终认为自己是一名软件工程师,或者叫作程序员,也就是网络上常说的“码农”。

对于程序员而言:Talk is cheap,show me the code!

再多的理论,也比不上几件成功的软件作品,笔者虽然谈不上有很多成功的软件作品,但也写过不少专业的程序,例如原生的OCR识别程序和英汉翻译程序。

特别是英语翻译软件,笔者当时(1997年)的语料库直接使用的是美剧字幕,几千万条的语料库,多种语言素材,全部都有时间戳同步,基本无须任何成本,翻译效果也还不错。而当时同期国家项目组的语料库,耗资巨大,也不过几十万条的数据量。

所谓原生程序,就是直接采用C语言、Delphi语言的标准函数库,没有任何第三方AI架构库(如sklearn、TensorFlow等AI模块库)直接编程的程序。其间的难度,做过系统的程序员,或者阅读过Linux、安卓系统、TensorFlow系统源码的程序员就会明白。

这种基于原生的开发,最大的好处就是无论采用何种编程语言,何种理论算法,最终的底层代码结构都是差不多的,就像电脑里面的CPU,算得再快,也不过是个加法器。

明白了这一点,再看sklearn的知识图谱,虽然表面看起来非常烦琐,但仔细梳理,核心还是只有一个:分类。

分好了类,其他的匹配、识别都是简单的问题,只是贴上标签,加上备注而已。

问题最终又回归“一生二、二生三”当中。

国外也有专家认为,所有的人工智能、机器学习,本质上都是二元一次方程的寻优算法。

笔者在博客当中曾经也说过:

简单来说,可以把人工智能、机器学习看成一个巨大的字符串查找算法,只不过这个算法当中的关键词与被查找的字符串的大小非常庞大,趋于无限。

很多初学者面对人工智能、机器学习,往往连系统配置都玩不转,最基本的“Hello程序”都无法运行。

在zwPython用户手册里面,笔者曾经说过,虽然很多人认为Python是面向对象的语言,但实践表明,忘记OOP对象编程的概念,采用传统的BASIC语言(面向过程)模式,学习效率可以提高10倍以上。

所以,学习人工智能,笔者的建议就是从忘却开始,忘却各种乱七八糟的概念。

忘记这些概念之后,大家会发现所谓的人工智能,不过是传统的Python函数调用,而且只有为数不多的几个函数,最简单的案例当中,只需要2~3个函数。

需要说明的是,对于初学者而言,不要左顾右盼,MATLAB、R语言、Torch、TensorFlow、NLTK都想学习,反而什么都学不好。

对于初学者而言,不妨在入门阶段就学sklearn。

sklearn模块库本身就是人工智能、机器学习的行业标准,该有的人工智能、机器学习经典算法全部都有,其他的模块库无非是在局部进行了某些优化。

至于人工智能的进阶课程,大家不要急,在完成sklearn的机器学习课程后,再看TensorFlow、Torch、MXNet就不会有看天书的感觉了。

黑箱大法

在机器学习领域许多概念非常抽象拗口,如果大家无法理解,也属于正常情况。

大部分初学者,即使克服种种困难,独自完成了人工智能、机器学习开发平台的配置,面对这些拗口的算法名称,也会有崩溃的感觉。

这很正常,因为这些算法、名称的背后都有非常专业的理论和模型,其学术价值和专业难度都很高。

不过,正如笔者前面所说,初学者对于人工智能、机器学习,最好从忘却开始。

同样,面对这些眼花缭乱的专业名称术语,我们还是采用忘却的模式,采用黑箱大法,大家无须纠结各种算法背后的理论,只将其看作一个个黑箱函数即可。

函数调用是Python语言的基本功能,能够看到这里的读者,想必对函数的调用、编程都非常熟了。

市场经济,讲究的是结果导向,对于大部分学习者而言,需要的也只是最终的结果数据。

采用这种黑箱模式,有了结果数据,再学习理论和算法,就有了具体的数据支持和更多的感性认识,学习过程也会事半功倍。1.4 学习路线图

要更好地学习本书,掌握相关的配套程序,最好具备以下基础。

· Python编程基础,不懂Python语言的,先花1周时间学习一些Python的基本知识。

· 花几天时间学习pandas数据分析软件的基础操作。

· 要根据代码,学习画流程图,有流程图,就可以把握程序逻辑,特别是策略逻辑。

· 学习过程当中,一定要多提问,特别是在论坛提问,大家都会有收益。

· 若学习中碰到问题难点,就多上网搜索学习。第2章机器学习编程入门

本章我们通过几个经典的、完整的机器学习小型案例,介绍机器学习应用的完整流程,以及机器学习在金融数据、量化分析过程当中的应用场景。2.1 经典机器学习算法

目前,机器学习虽然光彩夺目,但还处于启蒙阶段。在本书的案例中,涉及以下经典的机器学习算法。

· 线性回归,函数名:LinearRegression。

· 朴素贝叶斯算法,函数名:Multinomialnb。

· KNN最近邻算法,函数名:KNeighborsClassifier。

· 逻辑回归算法,函数名:LogisticRegression。

· 随机森林算法,函数名:RandomForestClassifier。

· 决策树算法,函数名:tree.DecisionTreeClassifier。

· 迭代决策树算法,又叫MART(Multiple Additive Regression Tree),函数名:GradientBoostingClassifier。

· SVM算法,函数名:SVC。

以上算法中的函数名,均为sklearn模块库内置的函数名称,所以,笔者说sklearn是初学者学习机器学习的不二选择。2.2 经典爱丽丝

Iris(爱丽丝)数据集是机器学习最经典的数据集,全称是安德森鸢尾花卉数据集,是统计学习的必备数据集,图2.1是爱丽丝数据集的特征分类图。图2.1 爱丽丝数据集的特征分类图

维基百科有专门的词条。

安德森鸢尾花卉数据集(Anderson's Iris data set),也称鸢尾花卉数据集(Iris flower data set)或费雪鸢尾花卉数据集(Fisher's Iris data set),是一类多重变量分析的数据集。它最初是埃德加·安德森从加拿大加斯帕半岛上的鸢尾属花朵中提取的地理变异数据,后由罗纳德·费雪作为判别分析的一个例子,并运用到统计学中。其数据集包含了50个样本,都属于鸢尾属下的三个亚属,分别是山鸢尾、变色鸢尾和维吉尼亚鸢尾。其4个特征被用作样本的定量分析,即花萼和花瓣的长度和宽度。基于这4个特征的集合,费雪发展了线性判别分析以确定其属种。

我们的目的就是通过编程,对这3种不同种类的爱丽丝植物的数据,采用专业的数据分析手段和人工智能算法,让程序自动判断植物的种类。

由于sklearn发布很早,当时还没有pandas等新一代数据分析软件,所以sklearn为了保证运行速度,直接使用NumPy模块库的ndarray多维数组作为数据源和内部的数据格式。

近几年发布的TensorFlow、MXNet等神经网络、深度学习平台,为了提高效率,在数据接口部分也直接使用NumPy模块库的ndarray多维数组格式。

不过NumPy模块库的ndarray多维数组是侧重性能的数据格式,在应用方面非常烦琐。

目前,随着pandas等新一代数据分析软件的普及和推广,以及一线开发人员对效率的考虑,越来越多的项目开始使用pandas的DataFrame数据框架作为数据保存格式,从而方便调试程序,交换数据。

本书的各个案例都是基于pandas优先的模式,尽量直接使用DataFrame数据框架作为程序中间数据,只是在必须使用NumPy模块库的ndarray多维数组格式时,才转换为相应的格式。

有关数据转换的细节,我们会在案例当中具体说明。全程采用pandas学习sklearn人工智能,方便初学者把握数据内部的结构和细节。

传统的sklearn人工智能文档,大部分直接采用NumPy数组模块,而NumPy是为了追求极限性能设计的模块库,很多算法函数非常复杂,不亚于汇编。

从某种程度上讲,绝大部分初学者的人工智能学习之路,在起步阶段就被NumPy这个模块库给吓退了。

本书全部采用现有的pandas命令,从数据源对sklearn进行整合,无须学习额外的语法,更加方便初学者入门。案例2-1:经典爱丽丝

案例2-1的文件名是kb201_iris01.py,程序很简单,秉持着pandas优先的原则,只读取爱丽丝数据集当中的数据,并查看其中数据字段的内容。

第1组代码如下:

第1组代码,运行结果如下:

案例2-1看起来简单,其实做了很多小优化和修改,比如取消了原始的数据列名称,用x1~x4代替。一方面更加通用,另一方面,更加符合人工智能、机器学习的本质。

此外,从输出信息来看,统计命令如下:

在对应的输出信息当中没有xname的数据,因为xname字段是字符串,无法统计分析,需要先对其进行数字化处理,也就是常说的文字信息的矢量化运算。

第2组代码如下:

第2组代码当中的函数如下:

这是调用pandas的value_counts统计函数,用来查看xname数据的具体数据分布情况。

对于植物种类进行了简单的分类统计,共有3种,对应的输出信息如下:

由输出信息可以看出,3种植物名称分别是:山鸢尾(Iris setosa)、变色鸢尾(Iris versicolor)和维吉尼亚鸢尾(Iris virginica)。案例2-2:爱丽丝进化与文本矢量化

案例2-2的文件名是kb202_iris02.py,将根据xname的植物名称,设置一个新的数据字段xid,来完成这个文本信息的矢量化工作。

下面我们分组逐一讲解。

第1组代码,读取Iris数据文件,并保存到df变量:

第2组代码,根据xname字段,按1、2、3分别设置xid字段,完成读取爱丽丝数据名称的矢量化操作。xid格式设置为int整数格式,并保存到文件iris2.csv中。

我们已经将iris2.csv文件复制到dat目录下,在后面的案例中,大家可以直接使用这个文件作为数据源:data/iris2.csv。

第3组代码,输出修改后的df数据信息:

对应的输出信息是:

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载