【作者主页】Francek Chen
【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。
文章目录
- 一、机器学习简介
- (一)机器学习的概念
- (二)机器学习的应用领域
- 二、机器学习通用流程
- (一)目标分析
- (二)数据准备
- (三)特征工程
- (四)模型训练
- (五)性能度量与模型调优
- 三、Python机器学习工具库简介
- (一)数据准备相关工具库
- (二)数据可视化相关工具库
- (三)模型训练与评估相关工具库
一、机器学习简介
机器学习(Machine Learning)是一个研究计算机怎样模拟或实现人类的学习行为,它以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身性能的方向。
机器学习是一门多领域交叉学科,涉及概率论、统计学、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习近年来的发展导致了人工智能的巨大飞跃。机器学习和深度学习需要大量的数据来工作,而这些数据正被数十亿的传感器收集到,总的来说,人工智能为为机器赋予人的智能,机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术。
(一)机器学习的概念
目前关于机器学习的主流定义有以下3种。
(1)机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
(2)机器学习是对能通过经验自动改进的计算机算法的研究。
(3)机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
对于机器学习的概念更为具体的解释为,计算机程序通过学习,将无序的数据转换为有用的信息,进而达成程序能够自行解决实际问题的目的。该学习过程通常不需要人类对计算机程序下达指示,由程序独立完成学习过程。以一个能自动识别鸟类的计算机程序为例,程序通过学习输入的已知种类的鸟类的体重、翼长、是否有脚蹼、喙的颜色和后背颜色等数据,将这些信息转换为模式进行记忆,最终只需要输入未知类型的鸟类的对应的数据,便可自动识别该鸟类的类型。整个学习过程需要人类进行干涉的部分仅有学习时提供的鸟类样本数据,其余部分都由程序自行完成。
(二)机器学习的应用领域
伴随着人工智能技术的发展与普及,作为人工智能核心的机器学习也得到了广泛的应用。机器学习的应用已经涵盖金融、交通、电力、教育、通信、电子商务、制造、医疗和农业等多个领域。机器学习已在不知不觉中影响人们的生产与生活。常见的十个机器学习实际应用如表所示。
应用领域 | 应用方向 | 简介 |
---|---|---|
金融 | 智能投顾 | 在投资个人或者机构提供投资的偏好、收益目标以及承担的风险水平等要求的基础上,进行智能核算和投资组合优化,从而提供最符合用户需求的投资参考 |
风险管控 | 在收集和分析消费者个人相关信息的基础上,使用机器学习技术构建风险预测模型,进而能够确定风险的程度。在贷款业务中,运用机器学习技术,能够在短至几秒的时间内完成审批任务,并得出审批结果 | |
交通 | 智能调度 | 能够智能化集中协调统一管理线网。同时也能进一步提高城市管理的自动化程度,可通过开放数据平台访问按需服务,同时与共享汽车、单车、出租、公交等交通终端并网,可查询实时信息及重大事件 |
智能控制 | 能够模拟人的行为来实施对列车和列车群的管理。通过车载电脑来控制列车辅助和自动驾驶,或者通过调度中心智能工作站对列车进行控制完成行车计划、运营管理和信息服务等功能 | |
电力 | 电力设备状态监测 | 使用机器学习技术,在设备本身运行状态相关的温度、湿度、压力、声音、振动、频率等数据的基础上,对历史数据中的模式进行筛选,构建系统正常运行的数据模型,可以实现设备状态的自动监测 |
电力设备缺陷检测 | 通过采集设备运行过程中的图像信息,然后使用深度学习、图像分类、目标检测相关的算法实现设备缺陷类型识别、设备缺陷位置检测 | |
教育 | 智能教学管理 | 通过智能化教学管理系统,将教学管理要素中的人事、科研、后勤等有机结合,实现共享与动态更新教学管理信息,从而实现智能化管理,保证对突发事件的即时响应 |
个性化辅导 | 通过分析学生的基础信息数据、行为数据和学习数据,智能生成个性化学习路径、提供个性化学习支持服务、推送个性化学习资源以及进行智能测评与及时反馈,帮助学生更好地进行自主学习 | |
通信 | 质量监测 | 目前通信行业已经逐渐将网络运营与维护的相关数据利用机器学习技术和大数据平台进行分析,从而便于更好地掌握网络情况,开展管理工作 |
安全防护 | 将机器学习技术应用于网络防护当中,建立起一个安心的智能防护体系,保护人们的信息安全,对于网络攻击的监测程度会有很大程度的提高。应用了机器学习技术的智能防护体系还能对信息数据进行备份工作,让网络主动进行安全防护,为保护网络信息安全提供一个安心的屏障 | |
电子商务 | 商品智能推荐 | 在算法框架基础之上的一套完整的推荐系统,可以实现海量数据集的深度学习,分析消费者的行为,并且预测哪些产品可能会吸引消费者,从而为他们推荐商品,这有效降低了消费者的选择成本 |
客户分析 | 根据历史合作客户维度、销售数据等进行分析、构建预测模型,为企业自动推荐更精准的客户。随着销售数据库中销售数据的增加,算法的自我学习能力会提升推荐的有效度,帮助企业逐步完善更具竞争力及利润空间的战略地图,更科学、合理地规划来年需要重点攻克的行业及提前洞察客户需求,告别过去传统、简单地根据业绩选择行业的落后销售模式 | |
制造 | 智能测量 | 一般的专用测量装置和系统在处理输入信号时,普遍采用建立确定的数学模型并使用规范的数学算法,但由于算法的复杂性和难度,导致在某些情况下无法对问题进行规范化的说明和表达,如测量结果的有效性验证、特定环境下最适宜量程的自动选择和零点的自动校准等。应用机器学习技术可对当前和历史数据信息进行智能分析与处理,从不同层次上对测量过程进行抽象,提高现有测量系统的性能和效率,扩展传统测量的功能 |
智能管理 | 利用知识库、专家系统和决策支持系统等手段,可以建立智能管理应用平台,综合分析各类内部和外部的动态数据,参考已有的知识与规则,帮助企业管理层提供及时的决策支持,减少因决策失误导致的各种风险与浪费,提高企业综合竞争力 | |
医疗 | 影像识别 | 通过计算机视觉技术对医疗影像进行快速读片和智能诊断,其应用主要包括图像识别和数据训练。首先对影像进行预处理,定位病变位置;其次是图像分割和特征提取,对病变影像进一步量化,提取病变的大小、密度、形态特征等;最后是匹配和聚类,利用深度学习,用特定的学习型算法,将特征向量映射为诊断决策,比如是良性病变还是恶性病变 |
辅助诊断 | 通过计算机学习医疗知识,模拟医生的思维和诊断推理,给出可靠的诊断和治疗方案。辅诊能力基于大数据硬件和神经网络芯片等计算能力,对医疗领域大量数据进行系统训练和优化,运用自然语言处理、认知技术、自动推理、机器学习、信息检索等技术,实现自动问答、挂号、临床决策、诊疗决策等全方位的智能诊疗 | |
农业 | 土壤成分检测分析 | 可对土壤传感器收集到的可溶性盐含量、地表水分蒸发量、土壤湿度等数据通过人工神经网络进行预测分析,决策各类农作物所适宜的最佳土壤,也可预测土壤表层的黏土含量,通过深度加权方法从土壤传感器获取的信号中提取土壤表层地质信息,再使用人工神经网络预测土壤表层的黏土含量 |
农田灌溉用水分析 | 对农作物用水需求量进行分析,可以科学地指导农户灌溉,保证作物有水可依,极大程度减轻洪涝或干旱灾害对作物造成的不良影响。此外,智能灌溉系统与传感器、灌溉设备连接后,可对土壤含水量进行实时监控,据此选择最合适的灌溉模式进行作物灌溉 |
编码 | 企业名称 | 人工智能技术 | 应用领域 | 所属国家 | 成立时间 | 资本市场状态 | 市值/估值/融资额 |
---|---|---|---|---|---|---|---|
1 | Microsoft(微软) | 计算机视觉技术、自然语言处理技术等 | 办公 | 美国 | 1975年 | 上市 | 市值1.21万亿美元 |
2 | Google(谷歌) | 计算机视觉技术、自然语言处理技术等 | 综合 | 美国 | 1998年 | 上市 | 市值9324亿美元 |
3 | Facebook(脸书) | 人脸识别、深度学习等 | 社交 | 美国 | 2004年 | 上市 | 市值5934亿美元 |
4 | 百度 | 计算机视觉技术、自然语言处理技术、知识图谱等 | 综合 | 中国 | 2001年 | 上市 | 市值438亿美元 |
5 | 大疆创新 | 图像识别技术、智能引擎技术等 | 无人机 | 中国 | 2006年 | 战略融资 | 估值210亿美元 |
6 | 商汤科技 | 计算机视觉技术、深度学习 | 安防 | 中国 | 2014年 | D轮融资 | 估值70亿美元 |
7 | 旷视科技 | 计算机视觉技术等 | 安防 | 中国 | 2011年 | D轮融资 | 估值40亿美元 |
8 | 科大讯飞 | 智能语音技术 | 综合 | 中国 | 1999年 | 上市 | 市值108亿美元 |
9 | Automation Anywhere | 自然语言处理技术、非结构化数据认知 | 企业管理 | 美国 | 2003年 | B轮融资 | 估值68亿美元 |
10 | IBM Watson(IBM沃森) | 深度学习、智适应学习技术 | 计算机 | 美国 | 1911年 | 上市 | 市值1198亿美元 |
11 | 松鼠AI 1对1 | 智适应学习技术、机器学习 | 教育 | 中国 | 2015年 | A轮融资 | 估值11亿美元 |
12 | 字节跳动 | 跨媒体分析推理技术、深度学习、自然语言处理、图像识别 | 资讯 | 中国 | 2012年 | Pre-IPO轮融资 | 估值750亿美元 |
13 | Netflix(网飞) | 视频图像优化、剧集封面图片个性化、视频个性化推荐 | 媒体及内容 | 美国 | 1997年 | 上市 | 市值1418亿美元 |
14 | Graphcore | 智能芯片技术、机器学习 | 芯片 | 英国 | 2016年 | D轮融资 | 估值17亿美元 |
15 | NVIDIA(英伟达) | 智能芯片技术 | 芯片 | 美国 | 1993年 | 上市 | 市值1450亿美元 |
16 | Brainco | 脑机接口 | 教育、医疗、智能硬件 | 美国 | 2015年 | 天使轮融资 | 融资额600万美元 |
17 | Waymo | 自动驾驶 | 交通 | 美国 | 2016年 | C轮融资 | 估值1050亿美元 |
18 | ABB Robotics | 机器人及自动化技术 | 机器人 | 瑞士 | 1988年 | 上市 | 市值514亿美元 |
19 | Fanuc(发那科) | 机器人技术 | 制造 | 日本 | 1956年 | 上市 | 市值362亿美元 |
20 | Preferred Networks | 深度学习、机器学习技术 | 物联网 | 日本 | 2016年 | C轮融资 | 估值20亿美元 |
二、机器学习通用流程
一个完整的机器学习模型训练的过程可拆分为诸多个步骤,包括前期的目标分析、数据准备、特征工程,中期的模型训练与调优以及后期的性能度量与模型选择。其中,数据准备和特征工程通常都被归类为机器学习中的数据预处理阶段。机器学习的通用流程如下图所示。
(一)目标分析
目标分析是机器学习前期准备的一个重要步骤,目标分析包含需求分析与类型分析两种。
1. 需求分析
在软件工程中,需求分析是指在创建系统或产品前,确定新系统的目的、范围、定义和功能的步骤。机器学习中的需求分析是指确定机器学习的使用场景,需要解决的业务和技术问题。
机器学习中的需求分析与软件工程的中的需求分析不同点在于,软件工程的需求分析注重实现某一个功能,而机器学习的需求更注重于解决某一个具体问题。
机器学习中的需求分析需要分析想要解决问题需要达成的具体目标,例如,要识别邮件是否是垃圾邮件,需要解决如何区分垃圾邮件与正常邮件的具体问题,需要达成的具体目标就是从一堆未知的邮件中,准确地寻找出其中的垃圾邮件,剩下的便是正常的邮件。同时还需要分析邮件系统可提供的信息,如每封邮件可以提供的信息包含:发件人、发件邮箱地址、邮件标题等等,需要制定一个依据此类信息来解决垃圾邮件识别的初步构想,从而确定需要收集与分析的数据。
2. 类型分析
类型分析是选定机器学习使用的算法种类的重要步骤,为之后的算法选取与模型训练起到铺垫作用。机器学习的类型按训练方式可分为有监督学习、无监督学习和半监督学习。
(1)有监督学习
有监督学习的算法能够从带有标记的训练资料中学习或建立一种知识,依据此知识对新的实例进行推测。垃圾邮件识别是一个典型的有监督学习问题,人们会对以往已经确认是垃圾邮件的邮件打上标记,而机器学习算法将会依赖这些标记进行学习。
有监督学习可细分为分类与回归,分类的目标是预测一批未知类型的对象的类别,典型的分类问题有垃圾邮件识别、恶意软件检测等,这类问题需要识别具体的对象的具体类别。回归则是预测某一事物未来的发展变化状况,典型的回归问题有股票价格预测、未来几天的气温变化预测等,这类问题需要预测对象的未来某一具体数值属性的变化。
(2)无监督学习
无监督学习与有监督学习相反,训练资料中没有预设的标记,需要算法自行从训练资料中建立一种知识。客户分群是一个典型的无监督学习问题,需要分群的客户不具备具体的类别等参考信息,仅可通过相似的特征进行分群,如年龄、性别、消费行为等,按具体的属性的相似度进行分群,并且结果具有不确定性和非唯一性。
(3)半监督学习
半监督学习介于非监督学习和监督学习之间,半监督学习使用部分标记的训练资料进行训练,这些训练资料由少量带有标记的数据和大量不带标记的数据构成。标记数据的成本使得标记全部数据不太现实,而获取未标记的数据相对便宜。在这种情况下,半监督学习可能具有很大的实用价值。许多机器学习研究人员发现,将未标记数据与少量标记数据结合使用可以显著提高学习准确性。
(二)数据准备
数据准备是机器学习中最重要的一个步骤,没有数据,机器学习便无从谈起。数据准备可细分为数据收集、数据探索和数据清洗。
1. 数据收集
数据收集是数据准备最初始的步骤,收集的数据的种类将直接影响模型训练的结果,其中需要特别注意样本数据的偏差状况,实际生产生活中的数据往往并不是均匀分布的,如果无视样本数据分布的偏差而直接使用随机抽样采集数据,那么模型的训练结果将会明显地偏向数量较多的种类。而数据量将影响模型的精确度与训练时间,若数据量越丰富、覆盖越广,则模型的精确度将越高,但同时训练时间也可能会增加。
根据数据来源的不同,数据收集也需要采取不同的方式,与业务系统对接的数据可直接从数据库采集,而网络数据则往往需要爬虫进行爬取。不同类型的数据所需要用到的存储模式也不一样,结构化数据需要存储在结构化的关系型数据库中,如邮件系统中的邮件数据。非结构化数据则需要另行存储,如图片、音频片段等。
2. 数据探索
在数据收集完毕后,为了掌握数据中的基本状况,需要进行数据探索。数据探索分为数据质量校验、数据分布与趋势探查。
(1)数据质量校验
在实际生产环境中的业务数据或网络爬虫爬取的数据,往往掺杂了大量的噪声数据。噪声数据指的是数据中无意义的空值或明显偏离正常水平的异常值,这些噪声数据如果不经处理直接进入模型,那么将会严重影响模型的结果。
数据质量检验包括一致性检验、缺失值检验、异常值检验。一致性检验用于检验数据之间的一致性,包括时间校验、字段校验、粒度校验等;缺失值检验用于检测数据中是否存在空值;异常值检验用于检测数据中是否存在明显偏离正常分布区间或不符合业务逻辑的数据。
(2)数据分布与趋势探查
数据探索的另一个重要目的是探索数据的分布与数据的变化趋势,以图形或统计指标的方式发现数据中的模式和关系。如通过最大最小值、分位数等指标或通过箱型图,探索数据的分布区间和密度。
数据分布与趋势探查常用于将数据分组,识别潜在的模式,发现数据的趋势,或探索不同属性之间的关系。分布与趋势分析通常包括分布分析、对比分析、描述性统计、周期性分析、贡献度分析和相关性分析等,使用可视化图表如条形图、箱线图、时间轴等可以更直观地展示数据的状况。
3. 数据清洗
数据清洗是数据准备中的最后一道工序,数据清洗的结果质量将直接影响到模型结果与最终结论。数据清洗如同它的字面意思一样,将数据中的“脏数据”清洗掉,处理数据中存在的缺失值、异常值与不一致值。
数据清洗需要处理的方面包括:缺失的数据,不规范的数据格式与内容,重复的数据,不合理的异常值,相矛盾的数据等。同时还需要注意具体情况需具体分析,如缺失严重的数据字段可能需要删除,而一些相关性不强的缺失字段可能并不需要插补。
(三)特征工程
特征工程是机器学习中的一个重要的前置步骤,会直接影响机器学习的效果,通常需要大量的时间。特征工程是一个将原始数据中的特征进行缩放、筛选和构造的过程,特征需要能够更好描述原始数据的状况,从而提升模型的训练速度与拟合效果。
特征工程包含特征缩放、特征选择和特征构造等过程。
1. 特征缩放
特征缩放包含数据标准化、独热编码和数据离散化。数据标准化将数据中量纲差异尽可能缩小,最终使得特征的取值范围落入一个更小的区间内。数据中不同特征的取值范围不一样,直接进行分析会对结果的准确性造成影响,因此需要对数据进行标准化处理。
独热编码(One-Hot)将离散型的特征使用N位状态寄存器对特征的N个状态进行编码,每个状态都对应拥有独立的寄存器位,并且在任意时候只有一个编码位有效。将离散型特征进行独热编码后,特征的每个状态变得更为独立,更方便进行距离计算。
离散化将连续型特征按照分割点进行划分,最终转化为离散型的特征。部分分类算法要求输入的数据是离散型的,因此需要将连续型特征离散化之后才能进行模型训练。
2. 特征选择
特征选择按照特征重要性对特征进行排序或依据具体的业务需求,从特征集合中挑选一组最具统计意义的特征子集,从而达到降维的效果。
原始数据集中的特征对于目标类别的作用并不相等,特征选择能够剔除一些与目标无关的或相关性不强的特征,减少进入模型的数据量,提高训练速度。不过需要注意的是,在有时候有些看上去无关或相关性不强的数据中,往往也隐含着有用的信息,因此特征选择需要慎重进行。
3. 特征构造
特征构造在原始数据中原有特征的基础上,构建新的更适合于机器学习算法的特征。特征构造常用于文本分析、图像分析和用户行为分析等领域,文本和图像的原始数据的特征往往难以直接用于机器学习,而且用户的行为特征也常常隐藏在原始数据的特征中,这时需要从原始数据的特征中进行提取,构造出新的满足算法要求的更为显著的特征。
(四)模型训练
在完成目标分析、数据收集、数据探索、数据清洗和特征工程等一系列前期准备后,将进入模型训练的步骤。模型训练包含数据集划分、算法选择与模型训练。
1. 数据集划分
数据集用于有监督学习时,通常需要划分为训练集、验证集与测试集。训练集用于模型训练;验证集可以在训练过程中检验模型的性能和收敛情况,通常用于调整模型参数,根据几组模型验证集上的表现决定哪组参数能使模型拥有最好的性能;测试集用于测试模型对于未知数据的拟合效果,防止模型过度拟合于训练集的数据特征,而没有抽象得出更为通用的规则。
划分数据集时需要注意数据集中样本的分布,往往数据集中的样本类别并不是均匀分布的,划分时需要避免这种不均匀分布造成的偏差。
2. 算法选择与模型训练
模型训练前需要针对问题的类型选择合适的算法,同类算法也需要多准备几个备选用于效果对比。过于复杂的算法往往反而不是最优的选择,算法的复杂度与模型训练时间呈现正相关,算法复杂度越高,模型训练时间往往也越长,而结果的精度可能与简单的算法相差无几。训练时可先使用小批量数据进行试验,避免直接使用大批量数据训练导致的训练时间过长等问题。
(五)性能度量与模型调优
在模型训练完毕后,需要对模型的性能进行评价,选出评价最优的模型。
针对不同类型的机器学习任务,如分类、回归、聚类等,所用的评价指标往往也不同。如分类模型常用的评价方法有准确率(Accuracy)、对数损失函数(Logloss)、AUC等。
同一种评价方法也往往适用于多种类的任务。对于实际的生产环境,模型性能评价的侧重点也不一样,不同的业务场景对模型的性能有不同的要求,如可能造成经济损失的预测结果会要求更高的模型精度。
仅训练一次模型往往无法达到理想的精度与效果,需要进行模型调优迭代,提升模型的效果。
模型调优往往是一个复杂冗长且枯燥的过程,需要多次对模型的参数做出修正,调优的同时需要权衡模型的精度与泛用性,在提高模型精度的同时还需要避免造成过拟合。
在现实生产与生活中,数据的分布会随着时间的推移而改变,有时甚至变化得很急剧,这种现象称为分布漂移(Distribution Drift)。当一个模型随着时间的推移,在新的数据集中的评价不断下降时,意味着这个模型无法适应新的数据的变化,此时模型需要进行重新训练。
三、Python机器学习工具库简介
Python提供多个强大第三方扩展库对机器学习的各个步骤提供支持,包含pandas、NumPy、Matplotlib、scikit-learn和TensorFlow等。
(一)数据准备相关工具库
Python第三方库中的SQLAlchemy提供数据库连接,而NumPy和pandas都是当下非常重要的Python科学运算模块,为数据准备提供良好的支持。
1. SQLAlchemy
https://www.sqlalchemy.org/
SQLAlchemy是一种既支持原生SQL,又支持ORM的工具库,ORM是Python对象与数据库关系表的一种映射关系,可有效提高写代码的速度,同时兼容多种数据库系统,如SQLite、MySQL、PostgreSQL,代价为性能上的一些损失。
SQLAlchemy提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,可通过3种方式操作数据库:使用SQL Expression,通过SQLAlchemy提供的方法编写sql表达式,间接地操作数据库;使用原生SQL,直接书写SQL语句;使用ORM对象映射,将类映射到数据库,通过对象操作数据库。
2. NumPy
https://numpy.org/
NumPy支持多维数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。通常与SciPy和Matplotlib一起使用,支持比Python所支持的种类更多的数值类型。核心功能是被称为ndarray(n-dimensional array,多维数组)的数据结构。这是一个表示多维度、同质并且固定大小的数组对象。由一个与此数组相关系的数据类型对象描述其数组元素的数据格式,例如其字符组顺序、在存储器中占用的字符组数量、整数或者浮点数等。
NumPy的数组包含以下3个特征:通常是由相同种类的元素组成的,即数组中的数据项的类型一致,能快速确定存储数据所需空间的大小;能够运用向量化运算来处理整个数组,速度较快;使用优化过的C语言的API,运算速度较快。
3. Pandas
https://pandas.pydata.org/
Pandas是基于NumPy的一种工具,为解决数据分析任务而生。纳入大量库和一些标准的数据模型,提供高效地操作大型数据集所需的工具及大量能快速便捷处理数据的函数和方法,为时间序列分析提供很好的支持,提供多种数据结构,如Series、Time-Series、DataFrame和Panel。
其中,Series和DataFrame是最常用的数据结构:Series是一个类似一维数组的对象,包含一个数组的数据,该数据可以是任何NumPy的数据类型,和一个被称为索引的与数组关联的数据标签;DataFrame类似日常使用的Excel表格,包含一个经过排序的列表集,每一行数据都可以有不同的类型值(数字、字符串、布尔等),拥有行和列的索引,可以看作是一个每个Series共享一个索引的Series的字典。
(二)数据可视化相关工具库
Python中的可视化库可大致分为基于Matplotlib的可视化库、基于JS的可视化库和基于上述两者或其他组合功能的库。
1. Matplotlib
https://matplotlib.org/
Matplotlib是Python下著名的绘图库,为了方便快速绘图,Matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部,十分适合交互式绘图。只需要调用pyplot模块所提供的函数即可实现快速绘图以及设置图表的各种细节。
能够创建多数类型的图表,包括线图、散点图、等高线图、条形图、柱状图、3D图形、甚至是图形动画等。可通过参数定制图形,调整坐标轴、标题、图例、线条大小颜色等图形参数。
2. Seaborn
https://seaborn.pydata.org/
Seaborn在Matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,跟Matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感,在大多数情况下使用Seaborn就能做出很具有吸引力的图。
提供5个预设好的主题(darkgrid、whitegrid、dark、white和ticks),默认主题为darkgrid。可以绘制多种图形包括散点图、直方图、条形图、热点图、联合分布等。由于Seaborn是Matplotlib的高级接口,所以在使用Seaborn的时候仍然可以调用Matplotlib的函数。
3. Bokeh
https://bokeh.org/
Boken是一个Python交互式可视化库,用于在Web浏览器上进行展示。
优点是能用于制作可交互,可直接用于网络的图表。图表可以输出为JSON对象,HTML文档或者可交互的网络应用。支持数据流和实时数据,采用了分层方法兼顾不同用户的使用需求,并提供了适合不同使用级别的不同编程接口,即控制水平。
Bokeh提供了3种控制水平:最高的控制水平用于快速制图,主要用于制作常用图像;中等控制水平与Matplotlib一样允许开发人员控制图像的基本元素(例如分布图中的点);最低的控制水平主要面向开发人员和软件工程师,在最低的控制水平下没有默认值,需要定义图表的每一个元素。
(三)模型训练与评估相关工具库
目前Python已拥有许多成熟的第三方库,其中整合了大量的算法用于模型训练与评估。
1. SciPy
https://scipy.org/
SciPy是基于NumPy构建的一个集成了多种数学算法和函数的Python模块,能够实现线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等。
其中,stats模块是一个强大的统计工具包,包含了多种概率分布的随机变量,随机变量分为连续型与离散型两类。而cluster模块提供层次聚类,矢量量化与K-Means聚类等功能。
2. Scikit-learn
https://scikit-learn.org/stable/
Scikit-learn是一个基于NumPy和SciPy,专门为机器学习建造的Python模块,提供了大量用于机器学习的工具。
基本功能主要被分为6个部分:分类、回归、聚类、数据降维、模型选择和数据预处理。其算法库中集成大量算法,包括支持向量机、逻辑回归、朴素贝叶斯分类器、随机森林、Gradient Boosting、K-Means聚类和DBSCAN等。
3. Keras
https://keras.io/
Keras是一个高度模块化的神经网络库,使用Python实现,并可以同时运行在TensorFlow和Theano上。Keras专精于深度学习,提供了目前为止最方便的API,用户仅需将高级的模块拼在一起便可设计神经网络,大大降低了构建神经网络的编程成本(code overhead)与理解成本(cognitive overhead)。
同时支持卷积网络和循环网络,支持级联的模型或任意的图结构的模型,从在CPU上计算的模式切换到使用GPU加速无须任何在代码上的改动。简化了编程的复杂度的同时,在性能上丝毫不逊色于TensorFlow和Theano。
Keras的功能分为几大模块,包括优化器(optimizers)、目标函数(objectives)、激活函数(activations)、参数初始化(Initializations)、层(layer)等。
4. TensorFlow
https://tensorflow.google.cn/
TensorFlow是一个相对高阶的机器学习库,也是目前最流行的深度学习库,核心代码使用C++编写并支持自动求导,用户可以方便的设计神经网络结构,不需要亲自编写C++或CUDA代码也无需通过反向传播求解梯度。由于底层使用C++语言编写,使得运行效率得到了保证,并简化了线上部署的复杂度。
除了核心代码的C++接口,TensorFlow还有官方的Python、Go和Java接口,用户可以在一个硬件配置较好的机器中用Python进行实验,并在资源比较紧张的嵌入式环境或需要低延迟的环境中用C++部署模型。
TensorFlow不只局限于神经网络,它具有的特色的数据流图支持非常自由的算法表达,也可以轻松实现深度学习以外的机器学习算法。TensorFlow还支持包含算术操作、张量操作、数据类型转换、矩阵的变形、切片、合并、规约、分割、序列比较与索引提取等常用的Math、Array、matrix相关的操作功能。
5. PyTorch
https://pytorch.org/
PyTorch是一个由Facebook的AI研究团队发布的Python工具包,专门针对GPU加速的深度神经网络(DNN)编程。
PyTorch提供了两个高级特性,可使用GPU加速的张量计算与自动求导机制。PyTorch利用GPU加速的张量计算加速科学计算,提升程序运行效率,例如切片、索引、数学运算、线性代数等。
PyTorch使用基于自动求导的动态神经网络,支持直接修改模型架构,使得PyTorch拥有debug方便,能快速在tensor和NumPy间相互转换,具有程序包小、速度快,程序简洁与易扩展的优点。