零起点Python机器学习快速入门【1.1】
1.4 机器学习经典案例
目前人工智能、机器学习正处于黄金时期,各种应用随处可见,以下是一些常见的机器学习应用案例。
机器人客服:当你拨打移动、银行等公司的服务热线时,大部分都是通过人工智能技术合成的电脑客服在和你沟通,只有遇到电脑客服无法处理的问题,才会转给人工处理。
语音助理:苹果的 Siri 和微软的小娜,就是采用人工智能开发的语音助手,两者会自动识别你的语音命令。
垃圾邮件检测:根据邮箱中的邮件,识别哪些是垃圾邮件,哪些不是。这样的模型可以使用程序帮助归类垃圾邮件和非垃圾邮件。
信用卡欺诈检测:根据用户的信用卡交易记录,识别哪些交易是该用户操作的,哪些不是。
数字识别:根据信封上手写的邮编,识别出每一个手写字符所代表的数字。这样的模型可以帮助程序阅读和理解手写邮编,并根据地理位置分类信件。
人脸识别:根据相册中的众多数码照片,识别出包含某一个人的照片,根据人脸管理照片。
产品推荐:根据用户的购物记录和冗长的收藏清单,识别出这其中哪些是该用户真正感兴趣,并且愿意购买的产品。京东、淘宝都有大量这样的案例。
医学分析:根据病人的症状和病人资料数据库,预测该病人可能患了什么病。
股票交易:这个就是目前非常火热的智能投顾技术,根据股票现在和以往的价格波动,判断这支股票是应该建仓、持仓还是减仓。
客户细分:根据用户在产品试用期的行为模式和所有用户过去的行为,识别出哪些用户会转变成该产品的付款用户,哪些不会。
形状鉴定:根据用户在触摸屏幕上的手绘和一个已知的形状资料库,判断用户想描绘的形状。
艺术作品鉴别:艺术作品的鉴别是极其复杂的,专家通常会判断它所属的类型、流派、作者和时代。新泽西州罗格斯大学的专家使用人工智能技术,鉴别画作的流派和作者。
婚恋匹配:国内外的婚恋交友网站经常通过性格测试来提取数据,然后通过人工智能分析,进行婚恋匹配。
第 2 章 开发环境
2.1 数据分析首选Python
Python 人工智能和机器学习在本质上底层都是数据分析,而对于数据分析,行业首选的编程工具就是 Python 语言。
经常有网友认为,自己投资失败或者量化策略失效是因为 Python 开发环境不好,希望自己重新设计一个,甚至希望用 C、 Java 来重新开发量化软件。
对于提出这类问题的网友,笔者曾经这样答复:“量化的核心是策略,至于量化软件的运行速度、用户 GUI 界面都是程序员的事情。大家是做金融操盘手,只要会写策略就行。就像会计,如果觉得 Excel、用友或金蝶财务软件的某些功能不好用,另外再选一套财务软件就好,完全没必要自己也去写一套财务软件。 ”
在软件工程领域有一句著名的格言: “ Don't Reinvent the Wheel”——不要重复发明轮子。
这句话说得非常经典,也非常有道理。
至于为什么选择 Python 语言作为数据分析和量化分析的首选开发平台,大家可以参考 Top 极宽量化社区的介绍: 《 zwPython 史前故事》。
金融股票、足彩分析。机器学习等量化分析系统,本质上都是数据分析,如果大家有兴趣,还可以浏览笔者的博客内容《大数据, why Python》: http://ziwang.com/forum. php?mod=viewthread&tid=58。
1. 入门简单,功能强大
Python 是最适合初学者的编程语言,也是目前 IT 行业唯一的入门简单、功能强大的工业级开发平台。
事实上, Python 已经超越普通编程语言,成为 IT 行业的万能开发平台。
( 1)入门简单
任何熟悉 JavaScript 脚本、 Visual Basic、 C 语言、 Delphi 的用户,通常一天即可学会 Python。
即使是不会编程的美工设计师、打字员,一周内也能熟练掌握 Python,学习难度绝对不会高于 Photoshop、五笔,至少笔者和许多程序员一样,现在还不会使用五笔字型。
zwPython 原本就是面向美工设计的,最早的用户手册名字就叫《设计师学编程》。
( 2)功能强大
海量级的 Python 模块库,提供了 IT 行业最前沿的开发功能。
大数据: Pandas 已经逐步碾压 R 语言。
CUDA:高性能计算, Python、与 C( C++)、 Fortran 是 NVIDIA 公
司官方认可的 3 种编程语言,也是目前唯一适合大众用户的 CUDA编程工具。
机器学习: TensorFlow、 PyTorch、 Scikit-learn、 Theano 都是国际上热门的机器学习平台。
自然语言: NLTK,全球首选的自然语言处理平台; SpaCy,工业级NLP 平台。
人脸识别: OpenCV,光流算法、图像匹配、人脸算法,简单优雅。
游戏开发: Pygame 提供图像、音频、视频、手柄、 AI 等全套游戏开发模块库。
字体设计: Fontforge,是唯一商业级的字体设计开源软件,内置的脚本语言和底层核心的 Fonttools,都是基于 Python。
电脑设计: blend、 GIMP、 inkscape、 MAYA、 3DS 都内置或扩展了Python 语言支持。
上述 Pandas、 CUDA、 TensorFlow、 PyTorch、 Scikit-learn、 Theano 为Python 模块库或 IT 行业术语。
目前热门的 iOS、 安卓等手机 APP 应用开发,也可以使用 Python 开发,但基本都是商业收费模块,因此未集成到 zwPython 软件包,大家可以自行搜索。
既然 Python 如此美好,而且是 100%免费的开源软件,学习 Python 的人也越来越多,为什么 Python 相对于 C#、 JavaScript、 Visual Basic、 C 语言,始终还只是一种小众语言呢?
笔者认为, Python 的“大众化”之路,存在以下两个瓶颈。
配置:软件行业有一句俗话“搞懂了软件配置,就学会了一半”。对于 Python 和 Linux 等许多开源项目而言, 80%的问题都出现在配置方面,尤其是模块库的配置。
OOP(面向对象程序设计):大部分人都认为 Python 是一种“面向对象”的编程语言,而 OOP 的编程风格,业界公认比较繁杂。
如果能够解决好以上两个问题, Python 的学习难度可以降低 90%,而在应用领域和开发效率方面,则可以瞬间提升数十倍效能,而且这种提升是零成本的。
2. 难度降低,性能提高
笔者在 WinPython 软件包的基础上,推出了“ zwPython”——字王集成式 Python 开发平台。
业界首次提出“零配置、零对象”的研发理念,绿色软件封装模式,类似 MAC 开箱即用风格,无须安装,解压即可直接使用,还可以放入 U 盘,支持 Mob-APP 移动式开发编程。
“外挂”式“核弹”级开发功能,内置很多功能强大、 IT 前沿的开发模块库,例如 OpenCV 视觉、人脸识别、 CUDA 高性能 GPU 并行计算( Opencl)、 Pandas 大数据分析、 TensorFlow、 PyTorch 机器学习、NLTK 自然语言处理。
便于扩展,用户可以轻松增删相关模块库,全程智能配置,无须用户干预,就好像拷贝文件一样简单,而且支持 U 盘移动便携模式,真正实现了“一次安装,随处可用”。
针对中文开发文档缺乏、零散的不足,内置多部中文版 Opencv、Fontforge 和 Python 入门教材。
大量示例脚本源码,涵盖 OpenCV、 CUDA、 Opencl、 Pygame 等。
如此种种只是为了便于 IT 行业外的用户能够“零起步”、快速入门,并且短时间内应用到生产环节当中去。
zwPython 前身是 zw2015sdk:字王智能字模设计平台,原设计目标是向广大美工设计师提供一款统一的、可编程的字体设计平台,以便于大家交流。
美工设计师、美工都是文艺青年、 IT 小白,所以,简单是必需的,
开箱即用也必须是标配。
做设计,图像处理 PIL、 Matplotlib 模块是必需的。
集成了 Opencv 作为图像处理、匹配模块,自然也提供了机器学习功能。
字模处理数据量很大,属于大数据范畴,须集成 SciPy、 NumPy 和Pandas 数据分析模块。
由于原生 Python 速度慢,所以增加了 Pycuda、 Opencl 高性能 GPU计算模块。
如此一而再、再而三地扩充,发现 zwPython 已经基本覆盖了目前 Python和 IT 编程 90%的应用领域,因此又增加了部分模块,将 zwPython 扩展成为一个通用的、集成式 Python 开发平台。
3.“零对象”编程模式
虽然很多人认为 Python 是一种“面向对象”的编程语言。
但对于初学者而言,把 Python 视为一种 Basic 风格的、过程式入门语言,学习难度可以降低 90%,基本上学习一小时即可动手编写学习代码。
有人说,“面向对象”最大的好处是方便把人脑子搅乱。
Windows、 Linux、 UNIX、 Mac OSX 内核都是使用 C 语言、汇编写的。有一种系统是 C++写的内核,就是诺基亚的塞班系统,据说代码量比Windows XP 还大,连他们自己的程序员都无法维护,最后就死掉了。
简而言之,“面向对象”的代码风格:一个字“繁”、两个字“繁繁”、三个字“繁繁繁”。
“零对象编程模式,用 Basic 的方式学习 Python”,是笔者向 Python 等编程语言的入门用户提出的一种全新的学习理论,一家之言,仅供参考。
Talk is cheap,Show me the code!大家还是多多动手。
大家很容易理解“零配置”,下面关于“零对象”再补充几点。
不写“面向对象”风格的代码不等于不能使用,对于各种采用“对象”模式开发的模块库,我们仍然可以直接调用。
将 Python 视为非“面向对象”语言并非大逆不道,事实上,许多人认为, Python 也是一种类似 LISP 的“函数”编程语言。
笔者从事编程十多年,从未用过“面向对象”模式编写过一行“ class”(类对象)代码,依然可以应对各种编程工作。
目前“面向对象”编程理论,在业界仍然争论不休,入门者功力不够,最好避开强者之间的火力杀伤。
“面向对象”的鼻祖 C++ 11 标准,直到 2015 年依然处于推广阶段,而且争议纷纷。
“面向对象”过于复杂,与“人生苦短,我用 Python”的优雅风格天生不合。
2.2 用户运行平台
本节主要讲解 Python 开发环境和数据包的配置、应用流程方面的知识。
本书所有案例程序均采用纯 Python 语言开发,除特别指明外,均默认使用 Python 3 语法,且经过 zwPython 平台测试。
zwPython 是 TopQuant 极宽公司推出的一个 Python 集成版本,功能强大,属于免费开源软件。系统内置了数百种专业的 Python 模块库,无须安装,解压即用。有关 zwPython 的使用,可参考软件自带的《 zwPython 用户手册》。
本书所有案例程序可用于 zwPython 平台, 以及各种支持 Python 3 的设备平台,包括 Linux 操作系统、 Mac 苹果电脑,以及安卓系统、树莓派。
其他非 zwPython 用户运行本书程序时,如果出现问题,通常是缺少有关的 Python 模块库,可以根据调试信息安装相关的 Python 模块库,再运行相关程序。
zwPython 及本书配套下载地址,请参见 Top 极宽量化社区“下载中心”: http://topquant.vip 或 http: //ziwang.com。
2.3 程序目录结构
本书配套程序的工作目录是 zwPython\py_demo,这也是本书默认的工作目录,凡是没有特别标注目录的脚本文件,一般都位于该目录。有关的程序会定时在读者群发布更新,请读者及时下载。
相比普通的 Python 版本,本书配套的教学版的 zwPython 目录中多了一个 py_demo 目录。
py_demo 目录收录了相关培训课程的配套代码和所需数据, py_demo目录也可以复制到其他目录,建议放到 zwPython 根目录下。
zwPython 目录结构中的其他子目录如下。
\zwPython\doc\:用户文档中心,包括用户手册和部分中文版的模块库资料。
\zwPython\py35\: Python 3.5 版本系统目录,除增加、删除模块库外,一
般不需要改动本目录下的文件,以免出错。另外,如果日后 Python 版本升级,这个目录也会变化,如 Python 3.6,会采用 py36 作为目录。
\zwPython\demo\:示例脚本源码。
\zwPython\zwrk\: zw 工作目录,用户编写的脚本代码文件建议放在本目录下。
\zwPython\TFB\: Top Football,又称 Top Quant for Football,简称TFB,极宽足彩量化分析系统(快速学习版无此目录)。
足彩版本,配套的 TFB 极宽足彩量化分析系统,与 zwPython 进行了集成处理,可直接输入使用,支持 Python 3.x。移植时或使用其他 Python环境时,可以把 TFB 目录下的脚本文件全部复制到自己的代码工作目录,注意代码里面有关数据文件目录的设置。
2.4 Spyder编辑器界面设置
1. 开发环境界面设置
在设置界面之前,可随意把一个 Python 源码文件,用鼠标拖到 Python编程语言编辑器 Spyder 的编辑框中,如图 2-1 所示。
Spyder 编辑器的界面设计非常合理,参考了 MATLAB,特别适合量化分析,国际投行一般都选择用这种布局作为标配。
通常需要优化的只有 Outline(导航)面板,又称函数列表面板,类似Delphi 语言的 Struct 函数列表面板。
在 Spyder 编辑器默认配置中, Outline 面板是不显示的,单击菜单 View→ Panes→Outlines,如图 2-2 所示,将显示 Outline 面板。
Outline 面板显示后,它的默认位置在代码编辑器和右侧窗口的中间。
建议单击 Outline 面板左上角的“窗口缩放”按钮,拖动面板到右上方,将其与 Var(变量)面板、 File(文件)面板等合并。
Outline 面板的作用是对代码中的函数、类、变量进行快速导航定位。单击 Outline 面板的函数、类、变量名称后,左侧代码编辑器就会自动移动到相关代码,如图 2-3 所示。对于大型项目而言,使用 Outline 面板可以提高效率。
需要注意的是,由于 Spyder 软件未来版本升级,具体操作界面和细节可能会有所不同,本书其他软件和模块也是如此,这个属于正常情况,大家无须担心。
2. 代码配色技巧
zwPython 的 IDE 代码编辑器是 Spyder,默认配色是 Spyder 模式,采用白底黑字,与传统的 IDE 环境差别很大,如图 2-4 所示。
如图 2-5 所示是最新的 delphi-xe10 的编辑器配色模式( Twilight 模式)。
这种黑底模式也是微软 VS 等开发平台标准的代码编辑器配色模式。幸运的是, Spyder 编辑器内置的配色模式里也有类似的模式。
运行 Spyder 编辑器,单击菜单 Tools→Preferences,打开 Preferences对话框。在左侧的列表框中选择 Editor(编辑器),在右侧 Display(显示)面板的 Syntax color scheme(语法配色方案)下拉列表框中选择 Spyder/ Dark(暗调)模式即可。如图 2-6 所示。不同版本的 Spyder 编辑器调整细节会有所不同,请读者注意。
