机器学习的算法和普通《算法导论》里的算法有什么本质上的异同?

本人非计算机专业出身,对这些方向感兴趣,所以有此一问。曾经问过一些人,说是机器学习全是数学,是用数学的方式试图去描述和理解我们的世界,而《算法导论》里的这些算法主要是如何用计算机的思维去处理一些实际的问题。我似懂非懂,还是没能抓住最根源上的东西。希望能有一些专业的,通俗的回答,谢谢了

SS Wang
machine learning

182 人赞同了该回答

区别不大。算法的目的都是一样的:定一个目标,加一些约束,求一个比较好的结果

  • 相同点:算法是用来求解优化模型,《算法导论》和机器学习在这一点上是一回事
  • 区别《算法导论》里几乎都是组合优化而机器学习里主要是连续的问题,凸优化较多,也有很多非凸优化。机器学习算法自然大都是梯度下降、坐标下降、蒙特卡洛 这样的算法,与《算法导论》里的算法长得很不像。
  • 是机器学习里也有组合优化,比如聚类、比如概率图模型。在这一点上,跟算法导论区别不大。

为什么《算法导论》里大多是组合优化?我拿排序问题举个栗子。

  • 排序问题就是个组合优化。给定n个实数,要求按降序排列。
  • 目标函数:常数(没有目标函数)
  • 可行域是n维空间一个子集,集合的元素都是向量a,满足:.
  • 为了求解这样一个组合优化模型,可以有很多算法,比如快排、堆排、冒泡。

如果你能理解排序是个组合优化问题,你肯定能理解 网络流、最短路 等等问题都是组合优化。

拿机器学习里常用的最小二乘回归对比一下。

  • 最小二乘是个凸优化问题。
  • 目标函数:
  • 可行域:整个空间
  • 为了求解这个凸优化模型,可以用梯度下降、共轭梯度、坐标下降等算法。
  • 你也可以用概率模型描述这个问题:y是的线性函数 + 高斯噪声。然后可以用蒙特卡洛算法来求

机器学习里也有组合优化,比如k-means。

  • k-means要求把集合{1, ..., n}划分成k个子集,使得对应的向量离cluster中心的平均距离最短。
  • k-means有具体的组合优化模型,我不写了。对应的组合优化模型被证明是NP hard。
  • 有很多近似算法求解k-means,最常用的是Lloyd Algorithm。

==========

注意,method和algorithm是两个东西。例如,

  • k-means是method,有几种优化问题model,有很多求解的algorithms。你们最常用的那种迭代算法是Lloyd Algorithm。
  • LDA是method也是model(这种method就一种model),这个model的求解是个NP Hard的问题(我记得Arora文章里证明过)。有很多种算法求解LDA,比如variational inference、MCMC、tensor decomposition。
  • word2vec是method,用来解决NLP的一些问题;有很多models,比如skip-gram、深度学习;每种model都有很多算法求解。

把method和algorithm混为一谈是典型的“野路子”从业人员的特征。比如,很多人喜欢把Lloyd算法称为kmeans。

经提醒,method和model有区别,但是界限不明,很多时候可以混用。但是algorithm和method绝对不能混用。

五大常用算法之一:分治算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html

五大常用算法之二:动态规划算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html

五大常用算法之三:贪心算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741375.html

http://blog.csdn.net/qq_32400847/article/details/51336300

https://baike.baidu.com/item/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/5411800?fr=aladdin

五大常用算法之四:回溯法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html

五大常用算法之五:分支限界法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741378.html

机器学习的算法和普通《算法导论》里的算法有什么本质上的异同相关推荐

  1. 克鲁斯卡尔算法(Kruskai)和普里姆算法(Prim)

    动画参考视频:最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示_哔哩哔哩_bilibili 克鲁斯卡尔算法(Kruskai) 克鲁斯卡尔算法,从边的角度求网的最小生成树,时间 ...

  2. 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

    一.基础知识   有向图   无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...

  3. JAVA-数据结构与算法-修路问题(普里姆算法)和公交站问题(克鲁斯卡尔算法)

    修路问题(普里姆算法) 最小生成树,给定一个带权的无向连通图,如何选择一颗生成树,使树上所有边上权的总和为最小:N个顶点,N-1条边 普里姆算法,在包含n个顶点的连通图中,找出只有n-1条边,包含所有 ...

  4. 最小生成树普里姆算法c语言代码,普里姆算法生成最小生成树-C语言描述.doc

    PAGE JIN JINGCHU UNIVERSITY OF TECHNOLOGY <数据结构(C语言描述)> 课程设计 学 院 计算机工程学院 班 级 12级软件技术1班 学 号 201 ...

  5. 最小生成树(普里姆算法【Prim】与克鲁斯卡尔算法【Kruskal】)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  6. Java用普里姆算法(prim)解决修路最短路径问题

    14.6 普里姆算法 14.6.1 应用场景-修路问题 看一个应用场景和问题: 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通 各个村庄的距离用边线 ...

  7. 最小生成树(详解普里姆算法)

    首先,我们来看一下图的一些基本知识点: 图:图 G=(V,E) 由顶点集 V 和边集 E 组成.每条边对应一个点对 (v,w),其中 v,w 属于 V .如果图中的点对是有序的,那么该图就是有向图,反 ...

  8. (数据结构)图的最小生成树 普里姆算法(Prim)

    假设要在n个城市之间建立通信联络网,每两个城市之间建立线路都需要花费不同大小的经费,则连通n个城市只需要n-1个条线路,最小生成树解决的问题就是:如何在最节省经费的前提下建立这个通信网 也可以理解为: ...

  9. 机器学习(八)——在线学习、K-Means算法、混合高斯模型和EM算法

    http://antkillerfarm.github.io/ 贝叶斯统计和规则化(续) p(θ|S)p(\theta\vert S)可由前面的公式得到. 假若我们要求期望值的话,那么套用求期望的公式 ...

最新文章

  1. JMH和Arthas定位问题的案例分享
  2. hihocoder1718 最长一次上升子序列
  3. OpenCV 使用方向梯度直方图估计图像旋转角度
  4. ios 如何在cell中去掉_经典问题:代码中如何去掉烦人的“!=nullquot;判空语句
  5. 前端参数无法转为后端实体内部类_Spring Boot返回前端Long型丢失精度
  6. 用C#快速往Excel写数据
  7. 软件工程之四则运算开发感悟与收获
  8. 数据库-聚合函数-count-sum
  9. 华为手机的分类有何区别_“鸿蒙”系统能不能玩安卓游戏?如果能,它跟安卓系统有何区别?...
  10. Tomcat映射虚拟路径到指定磁盘(eclipse)
  11. (转)编码剖析Spring管理Bean的原理
  12. 学习Python的利器:内置函数dir()和help()
  13. WampServer2.0的Apache的service无法启动的解决方法
  14. 页面404?找不到页面咋整?
  15. 广播BroadcastReceiver(2)
  16. java gzip 文件夹_Java GZip 基于磁盘实现压缩和解压的方法
  17. spring awre的理解
  18. php2.3.2,自动加载 - ThinkPHP3.2完全开发手册
  19. 台式计算机硬盘的安装位置,如何在台式机机箱中安装硬盘
  20. 系统对接方案_劳务实名制管理系统解决用工问题

热门文章

  1. JS编程建议——32:使用制表
  2. asp.net mvc 应用Bundle(捆绑和微小)压缩技术 启用 BundleConfig 配置web.config
  3. http://ftp.gnu.org/gnu/ http://ftp.gnu.org/gnu/libc/
  4. TryCatchFinallyProcessHelper
  5. 基于Spring安全角色的访问授权示例
  6. 如何使用 IntelliJ IDEA 2017 配置PHP开发环境 及项目搭建
  7. 如何从Debian 9 Stretch 升级到 Debian 10 Buster(升级Debian9图文教程)
  8. 【转载翻译】Debian配置Networking 和 apt-get 源信息 开启root远程登录权限
  9. 用python代替人脑运算24点游戏
  10. 【C语言】(指针) 将两个数排序