从软件project的角度写机器学习3——主要监督学习算法的project性分析

主要机器学习算法的project适用性分析

前段时间AlphaGo跟李世石的大战及相关的深度学习的新闻刷了一遍又一遍的朋友圈。只是这件事情,也仅仅是在机器学习的深度上进一步拓展,而机器学习的广度(也即project化实践)上,仍然没有什么突破性的理论或实践,用的领域继续用,不用的领域依旧不用。

project性分析的作用

project上的琐事

机器学习的使命是使计算机强大的运算能力和存储能力转化为推演能力。能转化是一方面。转化的效率则是还有一方面。科研性质的AlphaGo,拥有近乎无限的计算资源。不用太考虑这方面的问题。但在我们实际的project应用中,时时刻刻要考虑到实现难度、内存、效率、能耗、稳定性等琐碎的问题。

下图列了机器学习在实际project应用中会碰到的一系列问题。本篇呢,仅仅讨论各类算法的时空复杂度及可并行性。

评估标准

机器学习算法的应用,通常是离线训练出模型后。放到线上预測。对于server集群而言。有可能训练和预測发生在同一种设备上。但很多其它的情况下。尤其是做client开发时,我们训练出来的模型是在放到一个计算资源比训练环境少得多的设备上去执行的。

离线训练在计算资源上没有太多限制,也不须要非常实时,但假设确实数据量非常大并且训练时间非常长时,也希望能通过加机器解决这个问题(scale out)。

线上预測则会有实时性的要求,假设是移动设备,还有功耗的要求。

离线(训练)

离线训练过程,主要考虑下面因素

算法实现难度

project上使用机器学习,尽管非常多情况下是用现成的代码库,但算法的实现难度影响了可用的代码库的多少与好坏。并且,随着计算机硬件和软件架构的不断发展。始终是须要算法的实现代码与时俱进的(分布式、硬件加速等)。这时候算法实现难度也决定了它更新的难易。

另外,对于“有理想、有追求”的公司来说,掌控一个project的所有流程是必需的,真正做深做精,必须自己实现机器学习算法,參考文章http://www.infoq.com/cn/news/2015/12/manual-machine-algorithm-reason

这时,算法实现难度就是非常现实的问题了。

算法使用难度

这里的算法使用难度也包含算法本身的健壮性,是project上最须要好好考虑的地方。

一方面是对脏数据是否敏感。需不须要做复杂的数据清洗;还有一方面是须要设定多少參数,參数本身对算法结果影响是否显著。

算法使用难度高,须要专业人士去使用,project的人力成本会显著提升。

使用难度高的还有一后果则是结果不可预估,须要重复尝试。造成额外的时间和人力耗费。

训练所需资源与并行性

对大公司而言。机器比人廉价,动辄几百台的server,计算资源不愁,但对小公司来说。则非常可能是人比机器廉价,训练算法的时间复杂度和空间复杂度太高。则不一定承受得起。

算法的并行性一方面决定算法能不能scale up(加机器),还有一方面决定它能不能使用GPU加速(使用GPU加速后所须要资源和能耗可大大减少)。

在线(预測)

模型文件大小

监督学习算法训练数据之后。将得到一个模型文件。以供做兴许预測。这个模型文件的大小决定它是否可迁移到其它设备上执行。

模型文件的大小也是评估学习算法是否过拟合的一个指标。

预測速度

预測速度不仅仅是实时性的问题,也是功耗的问题。速度快的通常是因为运算量少。功耗也会低。

在移动设备上,这是非常重要的考量因素。

算法评价

支持向量机SVM

训练时的时间复杂度为内积计算+核函数映射+梯度下降/SMO,核函数计算相对于内积计算能够忽略,因此线性SVM和非线性SVM的训练时间复杂度是几乎相同的。

但假设要考虑到非线性SVM的參数调优,其复杂度就须要乘寻优迭代数(网格寻优RBF核函数。粒度为100时就是10000倍。

内积计算是能够做数据并行的,在海量数据下,二次规划的解法用SMO或梯度下降,尽管SMO的算法复杂度低,可是不easy并行实现,因此在大数据量下,还是用梯度下降。

SVM的数据并行原理上不难,实施起来因为SVM本身算法就复杂,还是比較麻烦的。

预測时线性SVM和非线性SVM有非常大区别:

SVM完毕训练之后。终于权值不为0的样本留下,作为支持向量。

非线性SVM必须保留所有支持向量。在预測时让所有支持向量与目标向量作一次内积计算。因此。支持向量数决定了模型的大小和预測的时间复杂度。(在海量数据之下,这个支持向量数非常可能也是海量的)。

线性SVM能够对所有支持向量作合并,成为一个超平面方程,这样仅仅就是维度量级的一组參数。

另外,支持向量机因为天然仅仅支持二分类,在处理多分类问题时必须用一套组合逻辑把二分类器扩展为多分类器。

參考:

http://blog.sina.com.cn/s/blog_5eef0840010147pa.html

这也会将减少预測的速度。

除了那些有名的机器学习工具包之外,svm有一个专门的工具libsvm去实现,能够适用于数据量不太大的情形。这个工具包基本上能够无脑训练模型,仅仅是做预測时要集成一下代码。

逻辑回归(Logistic回归)

逻辑回归是改变了损失函数计算方式的线性回归。使用梯度下降算法去求解系数。系数个数就是特征个数。

鉴于使用梯度下降算法去求解系数。不断计算导数和偏移会有一些运算量。但运算量明显地比SVM少。且十分easy拓展到大数量的应用。

逻辑回归训练出来的结果大部分情况下都是欠拟合。少数情况下。特征实在取得太多,也会有过拟合出现。

朴素贝叶斯

朴素贝叶斯的训练过程就是一个统计数据频率的过程,非常迅速,得出的是一系列概率值,在预測时计算所有类别的概率取最高者就可。

作为一个简单暴力的算法,project上应用非常广。

决策树

C4,5决策树

决策树的训练是一个不断寻找最优分划点的过程。选取分划点时,每一个可能选择都要过一次。但不断分划过程中,数据量也不断减少,整体训练速度还是非常快的。

决策树出来的模型是比較简单的,也能够配參数控制。这使得它非常easy集成。

因为它在训练过程中会做特征的选择,因此有少量无效特征对它影响不大。但当树深比較大时,会过拟合。

普通情况它的训练速度快于逻辑回归。也比較准确,但在大数据量下。因为决策树的分划点计算过程须要遍历所有数据。效率不一定比使用了随机梯度下降的逻辑回归高。

随机森林

随机森林对数据进行若干次随机採样。生成若干个决策树,使用

训练时。尽量每次数据是採样一部分,但因为要生成多个子树,其复杂度整体而言比决策树高。

预測时,则因为原先的一个决策树变成了多个(通常是几十个),预測的复杂度明显变高。

近期邻算法KNN

KNN属于惰性学习,训练过程不做不论什么处理,仅仅是在预測时查询近期的n个数据作推断。

它因为保存了所有训练数据,其模型文件无疑是非常巨大的,因此这样的算法仅限于server上使用。

用一张表概括一下:

训练用的矩阵输入为 n X m ,n为数据量,m为维度(特征数)。一般来说m 远小n。
此外记几个预计系数:
t:10量级
p:100量级
k:1000量级
q:10000量级
f:0~1之间的实数
预測准确率是依据曾经做数据的经验预计的,随便看看就好。

算法 训练时间 训练内存占用 模型文件大小 预測时间 算法实现难度 算法使用难度 预測准确率
非线性SVM 长O(p*m*n*n)+O(p*k*n*n) 多 O(n*n) O(m*n^f) 较慢 中等
线性SVM 较长O(m*n*n)+O(k*n*n) 同非线性SVM O(m) 一般 一般
逻辑回归 一般O(k*n*m) 少 O(m) O(m) 一般
朴素贝叶斯 少O(n*m) 少 O(m) O(m*t)
C4,5决策树 较少O(t*n*m) 少 O(m) O(m*m) 一般 一般
随机森林 一般 O(t*t*n*m) 少 O(m) O(m*m*t) 较快 较低
BP神经网络 一般 O(p*q*n*m) 一般 O(m*p) O(m*p) 中等 一般 中等 一般
KNN O(m*n) 一般

深度学习

上一篇已经说明。深度学习是由一系列无监督+监督学习算法组合而成的。因此也不能简单地判定其时空复杂度。

深度学习的模型參数一般而言是与数据量级无关的,但一方面因为它相对于浅层学习而言对输入没那么挑,输入向量的维度较大,还有一方面能够尽情叠加模型。因此其參数量级非常大。

因为深度学习的几个基本算法(卷积神经网络CNN、深信度网络DBN等)都是天然数据并行的算法,作硬件加速也比較easy,加以能够横行于海量数据之上的随机梯度下降算法SGD。使其能够在海量数据之下进行不是太慢的训练。

神经网络类算法的模型參数较多。预測时所须要的内存和时间都比較长,因此在非server环境下还是非常难使用。

原文地址:https://www.cnblogs.com/llguanli/p/8337301.html

时间: 2024-10-06 12:57:25

从软件project的角度写机器学习3——主要监督学习算法的project性分析的相关文章

从软件工程的角度写机器学习3——主要监督学习算法的工程性分析

主要机器学习算法的工程适用性分析 前段时间AlphaGo跟李世石的大战及相关的深度学习的新闻刷了一遍又一遍的朋友圈.不过这件事情,也只是在机器学习的深度上进一步拓展,而机器学习的广度(也即工程化实践)上,仍然没有什么突破性的理论或实践,用的领域继续用,不用的领域依然不用. 工程性分析的作用 工程上的琐事 机器学习的使命是使计算机强大的运算能力和存储能力转化为推演能力,能转化是一方面,转化的效率则是另一方面.科研性质的AlphaGo,拥有近乎无限的计算资源,不用太考虑这方面的问题,但在我们实际的工

从软件工程的角度写机器学习6——深度学习之卷积神经网络(CNN)实现

卷积神经网络(CNN)实现 背景 卷积神经网络广泛用于图像检测,它的实现原理与传统神经网络基本上是一样的,因此将普遍意义的神经网络和卷积神经网络的实现合成一篇. 神经网络实现思路 "扔掉神经元" 尽管所有教程在介绍神经网络时都会把一大堆神经元画出来,并且以输入节点--神经元--输出结点连线,但是,在编程实现时,基于神经元去编程是低效的.典型如这篇经典文章里面的代码: http://blog.csdn.net/zzwu/article/details/575125. 比较合适的方法是将神

从软件工程的角度写机器学习4——-C4.5决策树的工程实现

C4.5决策树的工程实现 这篇文章开始,将讲述一系列机器学习算法的工程实现方案.出于常用且简单的考虑,选择了C4.5决策树作为第一个算法. 工程框架 鉴于本篇是第一个算法实现,应此需要把整个工程框架介绍一下. 出于最优性能考虑,本框架是为C/C++语言设计的.不过即使用其他语言,也可以按这个框架实现,模块还可以再精简. 本工程定位: 1.无脑版机器学习算法库,使用者基本不需要了解任何算法细节,也不需要了解配置的算法参数含义. 2.可分离的算法库,算法库输出的模型文件可以方便地被其他工程解析使用.

从软件工程的角度写机器学习5——SVM(支持向量机)实现

SVM实现 SVM在浅层学习时代是主流监督学习算法,在深度学习时代也往往作为最后一个预测层使用(说深度学习击败了SVM的纯属扯淡). SVM算法总体流程 本系列文章旨在讲解机器学习算法的工程实现方法,不在于推导数学原理.因此想深入了解原理的请移步去看<支持向量机通俗导论(理解SVM的三层境界)>: http://www.cnblogs.com/v-July-v/archive/2012/06/01/2539022.html 对于急于求成的小伙伴,建议就看下面描述的基本过程,知其然,不必知其所以

从软件工程师的角度看MacBook Air的几个设计亮点

我多年从事软件开发和运营工作,从未跟“设计”间断过.现在在设计一个全新saas产品:超级表格(www.domypp.com).最近买了台苹果最新款的笔记本电脑MacBook Air,从该产品功能设计和用户体验得到很深的体会.我想,软件设计不应该这样吗? 先说说第一印象.刚刚打开MacBook Air的包装,打开精致的包装盒,取出了小巧玲珑的MacBook Air.我开始想从现在起我需要花多长时间琢磨才能“开始”使用这台电脑.打开翻盖,一眼看到右上角的电源按钮,按下(会不会需要先充电?我想如果需要

FPGA机器学习之机器学习的n中算法总结2

前面已经说了很多的算法了.比如说退火算法,蚂蚁算法,文化算法,禁忌算法等等.接下来要写一些其他的机器学习算法.迁移学习,集成算法,向量机,在线学习等算法. 我毛华望QQ849886241.技术博客http://blog.csdn.net/my_share 迁移学习算法:大概理解一下就是,机器学习了一些知识后,可以更容易学会其他的知识,举个例子,学会桌子的人,更容易学会认识椅子.学会下象棋的人,更容易学围棋.基于boosting的迁移学习算法.http://wenku.baidu.com/link

轻松看懂机器学习十大常用算法

轻松看懂机器学习十大常用算法 通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普. 以后有时间再对单个算法做深入地解析. 今天的算法如下: 决策树 随机森林算法 逻辑回归 SVM 朴素贝叶斯 K最近邻算法 K均值算法 Adaboost 算法 神经网络 马尔可夫 1. 决策树 根据一些 feature 进行分类,每个节点提一个问题,通过

机器学习十大常用算法

机器学习十大常用算法小结 机器学习十大常用算法小结 通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普.以后有时间再对单个算法做深入地解析. 今天的算法如下: 决策树 随机森林算法 逻辑回归 SVM 朴素贝叶斯 K最近邻算法 K均值算法 Adaboost 算法 神经网络 马尔可夫 1. 决策树 根据一些 feature 进行分类,每个

机器学习定义及常用算法

转载自:http://www.cnblogs.com/shishanyuan/p/4747761.html?utm_source=tuicool 1 . 机器学习概念 1.1   机器学习的定义 在维基百科上对机器学习提出以下几种定义: l “ 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能 ” . l “ 机器学习是对能通过经验自动改进的计算机算法的研究 ” . l “ 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准. ” 一