选择特殊符号
选择搜索类型
请输入搜索
麦嘉铭 BIGO公司大数据高级开发工程师。曾先后于中国科学院、新加坡先进数字科学中心访学交流,发表过多篇国际SCI期刊论文,拥有丰富的算法及工程方面的项目开发经验。
第1篇 绪论
第1章 背景 2
1.1 机器学习的概念 2
1.2 机器学习所解决的问题 3
1.3 如何选择机器学习算法 5
1.4 习题 5
第2章 机器学习算法框架概要 7
2.1 算法框架的分层模型 7
2.2 分层模型中各层级的职责 8
2.3 开始搭建框架的准备工作 8
第2篇 代数矩阵运算层
第3章 矩阵运算库 20
3.1 矩阵运算库概述 20
3.2 矩阵基本运算的实现 20
3.3 矩阵的其他操作 27
3.4 习题 32
第4章 矩阵相关函数的实现 33
4.1 常用函数 33
4.2 行列式函数 41
4.3 矩阵求逆函数 43
4.4 矩阵特征值和特征向量函数 44
4.5 矩阵正交化函数 45
4.6 习题 49
第3篇 最优化方法层
第5章 最速下降优化器 52
5.1 最速下降优化方法概述 52
5.2 最速下降优化器的实现 54
5.3 一个目标函数的优化例子 62
5.4 习题 66
第6章 遗传算法优化器 67
6.1 遗传算法概述 67
6.2 遗传算法优化器的实现 71
6.3 一个目标函数的优化例子 82
6.4 习题 85
第4篇 算法模型层
第7章 分类和回归模型 88
7.1 分类和回归模型概述 88
7.2 基础回归模型 89
7.3 分类回归分析的例子 102
7.4 习题 108
第8章 多层神经网络模型 109
8.1 多层神经网络模型概述 109
8.2 多层神经网络模型的实现 115
8.3 多层神经网络模型示例 122
8.4 习题 125
第9章 聚类模型 126
9.1 K-means模型 126
9.2 GMM 134
9.3 习题 147
第10章 时间序列模型 148
10.1 指数平滑模型 148
10.2 Holt-Winters模型 150
10.3 习题 160
第11章 降维和特征提取 161
11.1 降维的目的 161
11.2 主成分分析模型 162
11.3 自动编码机模型 170
11.4 习题 176
第5篇 业务功能层
第12章 时间序列异常检测 178
12.1 时间序列异常检测的应用场景 178
12.2 时间序列异常检测的基本原理 178
12.3 时间序列异常检测功能服务的实现 180
12.4 应用实例:找出数据中的异常记录 182
12.5 习题 183
第13章 离群点检测 184
13.1 离群点检测的应用场景 184
13.2 离群点检测的基本原理 185
13.3 离群点检测功能服务的实现 188
13.4 应用实例:找出数据中的异常记录 191
13.5 习题 193
第14章 趋势线拟合 194
14.1 趋势线拟合的应用场景 194
14.2 趋势线拟合的基本原理 195
14.3 趋势线拟合功能服务的实现 196
14.4 应用实例:对样本数据进行趋势线拟合 201
14.5 习题 203
随着互联网技术的飞速发展,全球逐渐步入大数据时代,智能化的趋势越来越明显,各行各业几乎都喊出了智能化的口号。机器学习作为人工智能的一个重要研究方向,在一定程度上成为IT人才的必要技能。本书以一个自研机器学习算法框架的构建为主线,首先介绍了机器学习的相关概念和背景,然后按照代数矩阵运算层、最优化方法层、算法模型层和业务功能层的分层顺序对算法框架展开讲述,旨在通过理论和实践相结合的方式,帮助广大零算法基础的开发人员了解和掌握一定的算法能力,同时也为算法设计人员提供工程实践中的参考范例。
本书实用性强,适合零算法基础的开发人员阅读,也适合具备一定算法能力且希望在工程实践中有所借鉴的工程技术人员阅读。另外,本书还适合作为算法设计人员及机器学习算法爱好者的参考书。
徐韦华,在台湾很有影响力的著名拼布作家,从事拼布材料包设计多年,经验非常丰富。
将光标置于论文作者名字后,在“插入/引用/脚注和尾注/自定义标记”中,输入“作者简介”四字,点“插入”,在页尾输入介绍内容即可。
钱觉时(JueshiQian),安徽桐城人,1962年生,现为重庆大学教授,材料科学与工程、环境工程专业博士生导师,霍英东教育基金获得者。先后在东南大学、重庆大学、同济大学和美国宾州大学学习。1992...
框架式动力机器荷载探讨
针对冶金行业经常用的大型动力机器(空气压缩机,鼓风机,电机,汽轮机),结合国内外的规范,对国内外厂家的资料进行了研究。讨论了框架式动力机器基础设计荷载取值及组合等问题,解决了基础设计时的一些难题。
随机森林机器学习算法在桥梁检测中的应用
在当下交通运输业的飞速发展,我国公路桥梁的面临着交通负载不断增长的情况.因而需不断更新桥梁检测技术及方法,提高对检测数据的认识,知识转化,从而对桥梁的实际状况有更加深入的理解.监测工作中产生的大规模数据有待利用处理,有效挖掘.文章对福建省三明市、南平市公路桥检测的数据进行了清洗,引入机器学习算法中的随机森林算法,对检测数据进行了人工智能处理,并与专家评测结果进行对比分析,证明了机器学习算法在桥梁检测监控的可行性.
这是一部指导读者如何将软件工程的思想、方法、工具和策略应用到机器学习实践中的著作。
作者融合了自己10年的工程实践经验,以Python为工具,详细阐述机器学习核心概念、原理和实现,并提供了数据分析和处理、特征选择、模型调参和大规模模型上线系统架构等多个高质量源码包和工业应用框架,旨在帮助读者提高代码的设计质量和机器学习项目的工程效率。
全书共16章,分为4个部分:
第一部分 工程基础篇(1~3章)
介绍了机器学习和软件工程的融合,涉及理论、方法、工程化的数据科学环境和数据准备;
第二部分 机器学习基础篇(4、5章)
讲述了机器学习建模流程、核心概念,数据分析方法;
第三部分 特征篇(6~8章)
详细介绍了多种特征离散化方法和实现、特征自动衍生工具和自动化的特征选择原理与实现;
第四部分 模型篇(9~16章)
首先,深入地剖析了线性模型、树模型和集成模型的原理,以及模型调参方法、自动调参、模型性能评估和模型解释等;然后,通过5种工程化的模型上线方法讲解了模型即服务;最后,讲解了模型的稳定性监控的方法与实现,这是机器学习项目的最后一环。
JavaWeb应用开发框架实例
一、 概述
Web 应用架构可以划分为两大子系统:前端子系统和后台子系统。
前端子系统:
1. 基础技术: Html/Java/CSS / Flash
2. 开发框架: jQuery, Extjs , Flex 等;
后台子系统:
1. 基础技术: Java Servlet;
2. 开发框架: Struts, Spring, Hibernate, ibatis 等;
3. 应用服务器: Tomcat / Jetty
编程模型: B/S 模型。 客户端向服务器端发送请求, 服务器经过处理后返回响应, 然后客户端根据响应及需求绘制前端展现。
在用户客户端和实际提供功能的Web 服务器之间还可能存在着代理服务器, 负载均衡服务器, 不过那些属于锦上添花的事物,暂时不在考虑范围内。
客户端应用理念: 客户端承担大量的交互逻辑及渲染工作,服务器端主要是处理请求和返回数据。
前后端系统耦合: 客户端和服务器端各自处理自己内部的子系统耦合;而客户端与服务器端的耦合简化为一个通信与数据通道。该通道用来传输通信请求和返回数据。
请求通信: 采用 Http / Tcp 协议
数据通道: 采用 Json, xml , 文本字符串,字节。 内部系统一般采用 Json 作为数据交换格式;系统间的互操作则采用XML 来规范;文本字符串是最一般的形式, 字节是最底层的形式。
JavaWeb应用开发框架实例
二、 架构演变
最轻的架构: jQuery + Servlet + ajax 在客户端使用 jQuery发送 ajax 请求给Java 服务端的 Servlet 进行处理, Servlet 仅仅返回数据给客户端进行渲染。
该架构有效地分离了前端展示和后台请求处理,同时又保持了最轻的复杂性, 只需要学会编写 Servlet 及使用 jQuery , 就能构建简单的应用。
如果只是做个人创意演示, 可以采用该架构, 快速实现自己的创意功能。 Servlet 是Java web 应用的基础技术,jQuery 则是前端开发的简单易用的利器。
后台架构演变:
1. 逻辑与页面的分离: JSP/Servlet
JSP 实现了页面逻辑与外观的分离,但是, 前端子系统与后台子系统仍然是紧密耦合的; 前端设计人员实际上只需要服务端返回的数据, 就可设计出非常专业的界面显示。
2. MVC 架构:Struts2(含Servlet,MVC) + JDBC
用Servlet 来添加服务器功能是基本的选择,但在web.xml中配置大量的 Servlet 却不是最佳的选择。
Struts2 在服务端实现了更丰富的MVC 模式, 将本来由应用决定的控制器从web容器中分离。
3. SSH 架构: Struts2(含Servlet, MVC) + Spring (Ioc) + Hibernate (ORM,对象-关系映射)
通常, 应用系统中需要预先创建一些单例对象, 比如 Controller, Service, Dao, 线程池等, 可以引入 Spring Ioc 来有效地创建、管理和推送这些对象;使用 Hibernate 来实现关系数据库的行与面向对象的属性之间的映射与联接,以更好地简化和管理应用系统的数据库操作。SSH 可以说是 JavaWeb应用系统开发的三剑客。
4. SI 架构: SpringMVC(含Servlet, Ioc, MVC, Rest) + iBatis (Semi-ORM)
过于复杂的架构会将人搞晕。因此,在适应需求的情况下, 尽量选择简单的架构,是明智之选。 这种架构使用面向资源的理念,着重使用Spring作为MVC及应用基础服务设施, 同时使用 iBatis 来实现更简单灵活的ORM映射, 使之在可以理解和维护的范围内。
前端架构:
1. Flash 架构: Flex + jQuery + JSP
这是一种比较传统的前端架构,采用同步模式, Flex 承担大量的页面渲染工作, 并采用AMF协议与Java端进行通信, 而JSP 则可以用于更快速的页面显示。优点是: 经过考验的结构, 通常是值得信赖的; 缺点是, 由于采用同步模式, 在交互效果上可能不够流畅, 需要进行比较耗时的编译过程;此外, Flex 基于浏览器插件运行,在调试方面有些麻烦。
2. MVC 架构: Extjs + jQuery
这是一种比较现代的前端架构, 采用异步模式, Extjs4 可以实现前端子系统的MVC 分离, 对于可维护性是非常不错的支持;此外, jQuery 可以作为有效的补充。
优点: 异步, 快速, 对于企业内部的后台管理系统是非常好的选择。
缺点: Extjs4 的可定制性、可适应性可能难以适应各种特殊的需求,需要用其它组件来补充, 比如大数据量的绘制。对于互联网应用, 速度可能是致命伤。
三、 架构的选择
不要去询问哪种架构更好,更需要做的是清晰地定位项目目标,根据自己的具体情况来选择和定制架构。反复地尝试、观察和改进,反复磨炼技艺,这样才有助于设计水平的提升。
架构的选择通常有四种关注点:
1. 适用性: 是否适合你的项目需求。 架构有大有小, 小项目用小架构, 大项目用大架构。
2. 可扩展性: 该架构在需要添加新功能时,是否能够以常量的成本添加到现有系统中, 所做的改动在多大程度上会影响现有功能的实现(基本不影响,还是要大面积波及)。
3. 便利性: 使用该架构是否易于开发功能和扩展功能, 学习、开发和测试成本有多大。
4. 复杂性: 使用该架构后,维护起来的成本有多大。你自然希望能够写一条语句做很多事,使用各种成熟的组件是正确的方式,同时,在项目中混杂各种组件,也会提升理解和维护系统的复杂度。便利性和复杂性需要达到较好的平衡。
特殊的关注点:
譬如,应用需要支持高并发的情况, 需要建立一个底层的并发基础设施, 并向上层提供简单易用的接口,屏蔽其复杂性。
四、 架构演进的基本手段
架构并不是一成不变的, 在做出最初的架构之后,随着开发的具体情况和需求的变更, 需要对最初架构做出变更和改进。
架构演进的基本手段:
一致性, 隔离与统一管理, 螺旋式重构改进, 消除重复, 借鉴现有方案。
1. 一致性: 确保使用统一模式来处理相同或相似的功能; 解决一次, 使用多次。
2. 模块化、隔离与统一管理: 对于整体的应用, 分而治之,将其划分为隔离性良好的模块,提供必要的通信耦合;对于特定的功能模块, 采用隔离手段,将其隔离在局部统一管理,避免分散在系统的各处。
3. 不断重构改进, 一旦发现更好的方式, 马上替换掉原有方式。
4. 尽可能重用,消除重复。
5. 尽可能先借鉴系统中已有方案并复用之;如果有更好方案可替换之;
有一条设计准则是: 预先设计, 但不要过早设计。
意思是说, 需要对需求清楚的部分进行仔细的设计, 但是对于未知不清楚的需求,要坚持去理解它,但不要过早地去做出“预测性设计”;设计必须是明确的、清晰的、有效的, 不能针对含糊的东西来设计。可以在后期通过架构演进来获得对后续需求的适应能力。
每当提到机器学习,大家总是被其中的各种各样的算法和方法搞晕,觉得无从下手。确实,机器学习的各种套路确实不少,但是如果掌握了正确的路径和方法,其实还是有迹可循的,这里我推荐SAS的Li Hui的这篇博客,讲述了如何选择机器学习的各种方法。
另外,Scikit-learn 也提供了一幅清晰的路线图给大家选择:
其实机器学习的基本算法都很简单,下面我们就利用二维数据和交互图形来看看机器学习中的一些基本算法以及它们的原理。(另外向Bret Victor致敬,他的 Inventing on principle 深深的影响了我)
所有的代码即演示可以在我的Codepen的这个Collection中找到。
首先,机器学习最大的分支的监督学习和无监督学习,简单说数据已经打好标签的是监督学习,而数据没有标签的是无监督学习。从大的分类上看,降维和聚类被划在无监督学习,回归和分类属于监督学习。
无监督学习
如果你的数据都没有标签,你可以选择花钱请人来标注你的数据,或者使用无监督学习的方法
首先你可以考虑是否要对数据进行降维。
降维
降维顾名思义就是把高维度的数据变成为低维度。常见的降维方法有PCA, LDA, SVD等。
主成分分析 PCA
降维里最经典的方法是主成分分析PCA,也就是找到数据的主要组成成分,抛弃掉不重要的成分。
这里我们先用鼠标随机生成8个数据点,然后绘制出表示主成分的白色直线。这根线就是二维数据降维后的主成分,蓝色的直线是数据点在新的主成分维度上的投影线,也就是垂线。主成分分析的数学意义可以看成是找到这根白色直线,使得投影的蓝色线段的长度的和为最小值。
聚类
因为在非监督学习的环境下,数据没有标签,那么能对数据所做的最好的分析除了降维,就是把具有相同特质的数据归并在一起,也就是聚类。
层级聚类 Hierachical Cluster
该聚类方法用于构建一个拥有层次结构的聚类
如上图所示,层级聚类的算法非常的简单:
1、初始时刻,所有点都自己是一个聚类
2、找到距离最近的两个聚类(刚开始也就是两个点),形成一个聚类
3、两个聚类的距离指的是聚类中最近的两个点之间的距离
4、重复第二步,直到所有的点都被聚集到聚类中。
KMeans
KMeans中文翻译K均值算法,是最常见的聚类算法。
1、随机在图中取K(这里K=3)个中心种子点。
2、然后对图中的所有点求到这K个中心种子点的距离,假如点P离中心点S最近,那么P属于S点的聚类。
3、接下来,我们要移动中心点到属于他的“聚类”的中心。
4、然后重复第2)和第3)步,直到,中心点没有移动,那么算法收敛,找到所有的聚类。
KMeans算法有几个问题:
1.如何决定K值,在上图的例子中,我知道要分三个聚类,所以选择K等于3,然而在实际的应用中,往往并不知道应该分成几个类
2.由于中心点的初始位置是随机的,有可能并不能正确分类,大家可以在我的Codepen中尝试不同的数据
3.如下图,如果数据的分布在空间上有特殊性,KMeans算法并不能有效的分类。中间的点被分别归到了橙色和蓝色,其实都应该是蓝色。
DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)中文是基于密度的聚类算法。
DBSCAN算法基于一个事实:一个聚类可以由其中的任何核心对象唯一确定。
算法的具体聚类过程如下:
1、扫描整个数据集,找到任意一个核心点,对该核心点进行扩充。扩充的方法是寻找从该核心点出发的所有密度相连的数据点(注意是密度相连)。
2、遍历该核心点的邻域内的所有核心点(因为边界点是无法扩充的),寻找与这些数据点密度相连的点,直到没有可以扩充的数据点为止。最后聚类成的簇的边界节点都是非核心数据点。
3、之后就是重新扫描数据集(不包括之前寻找到的簇中的任何数据点),寻找没有被聚类的核心点,再重复上面的步骤,对该核心点进行扩充直到数据集中没有新的核心点为止。数据集中没有包含在任何簇中的数据点就构成异常点。
如上图所示,DBSCAN可以有效的解决KMeans不能正确分类的数据集。并且不需要知道K值。
当然,DBCSAN还是要决定两个参数,如何决定这两个参数是分类效果的关键因素:
1、一个参数是半径(Eps),表示以给定点P为中心的圆形邻域的范围;
2、另一个参数是以点P为中心的邻域内最少点的数量(MinPts)。如果满足:以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点。
监督学习
监督学习中的数据要求具有标签。也就是说针对已有的结果去预测新出现的数据。如果要预测的内容是数值类型,我们称作回归,如果要预测的内容是类别或者是离散的,我们称作分类。
其实回归和分类本质上是类似的,所以很多的算法既可以用作分类,也可以用作回归。
回归
线性回归
线性回归是最经典的回归算法。
在统计学中,线性回归(Linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。
这种函数是一个或多个称为回归系数的模型参数的线性组合。 只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
如上图所示,线性回归就是要找到一条直线,使得所有的点预测的失误最小。也就是图中的蓝色直线段的和最小。这个图很像我们第一个例子中的PCA。仔细观察,分辨它们的区别。
如果对于算法的的准确性要求比较高,推荐的回归算法包括:随机森林,神经网络或者Gradient Boosting Tree。
如果要求速度优先,建议考虑决策树和线性回归。
分类
支持向量机 SVM
如果对于分类的准确性要求比较高,可使用的算法包括Kernel SVM,随机森林,神经网络以及Gradient Boosting Tree。
给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。
SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
如上图所示,SVM算法就是在空间中找到一条直线,能够最好的分割两组数据。使得这两组数据到直线的距离的绝对值的和尽可能的大。
上图示意了不同的核方法的不同分类效果。
决策树
如果要求分类结果是可以解释的,可以考虑决策树或者逻辑回归。
决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。
其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。
使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
决策树可以用于回归或者分类,下图是一个分类的例子。
如上图所示,决策树把空间分割成不同的区域。
逻辑回归
逻辑回归虽然名字是回归,但是却是个分类算法。因为它和SVM类似是一个二分类,数学模型是预测1或者0的概率。所以我说回归和分类其实本质上是一致的。
这里要注意逻辑回归和线性SVM分类的区别
朴素贝叶斯
当数据量相当大的时候,朴素贝叶斯方法是一个很好的选择。
15年我在公司给小伙伴们分享过bayers方法,可惜speaker deck被墙了,如果有兴趣可以自行想办法。
如上图所示,大家可以思考一下左下的绿点对整体分类结果的影响。
KNN
KNN分类可能是所有机器学习算法里最简单的一个了。
如上图所示,K=3,鼠标移动到任何一个点,就找到距离该点最近的K个点,然后,这K个点投票,多数表决获胜。就是这么简单。
总 结
本文利用二维交互图帮助大家理解机器学习的基本算法,希望能增加大家对机器学习的各种方法有所了解。
本文来源:naughty
https://my.oschina.net/taogang/blog/1544709
免责声明
数邦客-大数据价值构建师(www.databanker.cn)除非特别注明,本站所载内容来源于互联网、微信公众号等公开渠道,不代表本站观点,仅供参考、交流之目的。转载的稿件版权归原作者或机构所有,如有侵权,请联系删除。
产品简介