打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
机器学习中的概念区分:模型vs算法

文章目录

  • 1. 刷题里的算法
  • 2. 机器学习里的算法
    • 2.1 理解1:比较浅显,靠近常规认知
    • 2.2 理解2:比较复杂,有点矛盾
    • 2.3 我的理解
      • 2.3.1 目标函数 vs 损失函数

以前没有注意过这个问题,大概知道,
  • 算法就是一些规则或者数学方程,
  • 模型就是算法+数据最后产出的东西,

比较肤浅。搜了一圈之后似乎不同的领域(数学专业,搞算法理论的和搞机器学习实战的)理解似乎也都不太一样,我就站在机器学习领域,偏向应用的算法类的角度找了一些答疑解惑的内容。

1. 刷题里的算法

刷题,leetcode中的算法,比如说什么

  • 贪婪算法,(例如:梯度下降)
  • 动态规划算法,
  • 分治算法,(例如:快速排序)
  • 回溯算法,
  • 分支限界算法
  • 穷举法(一般不多见)

这里的算法更接近一种思想或者说策略,可以用语言描述出每个步骤,并不通过训练数据得到结果,只是这种算法思想会体现在代码解题的过程中。

2. 机器学习里的算法

2.1 理解1:比较浅显,靠近常规认知

参考 知乎专栏文章:模型与算法


通俗来讲,模型指代的是目标函数算法则是求解该目标函数的方法

Decision Tree里,其模型二叉树模型(暂不讨论多叉树情况)

如果写成目标函数,那么则是一个分段函数,
如果是二分类问题,那么这个分段函数取值为0,1。
那么有了这个目标函数,怎么求解呢?

两种算法
1.将训练集中的1样本全部归为左叶子,0样本归为右叶子,但是我们都知道这样长出来的决策树不具备预测能力。
2.贪心算法,或者叫启发式算法,从根开始,采取一定的分裂原则进行分裂,这个分裂原则有信息增益最大化,Gini系数,方差最小。

那么是不是第二种算法长出来的树就是最优的?当然不是,启发式算法的核心思想是当前最优,所以一定存在一棵决策树要比这样生长出来的树是要好的,比如第一种树就一定比第二种树好。

再举个例子。

XGBoost里,什么是模型,什么是算法?

XGBoost里面,它采用的是加性模型解这个加性模型的算法是启发式算法或者叫贪心算法,因为同时寻找K个基决策树来降低损失函数是不可能做到的,所以它的想法就是添加一棵树,使得损失下降即可。但是我们要注意,XGBoost采用贪心算法只解出来的决策树的最优叶子值,它没办法一步解决树的结构问题,也即树该长什么样

XGB说只要你的树有这么多个叶子,每个叶子里有哪些样本,那我就可以告诉你,这些叶子的叶子值应该取多少,但是XGB也说,虽然我可以告诉你叶子值是多少,但是你怎么长的我现在还解决不了。

那XGB在长决策树的过程中,采用的还是传统决策树的启发式算法,采用从根开始的启发式分裂算法,只不过XGB由于已经知道了对于任意形态的决策树,它都能计算出这个形态的决策树的最优Loss,那么生长原则便从信息增益最大,变成它自己的那一套Gain最大化。

所以,决策树这个东西,到目前为止,这么多年的发展,其根本采用的方式仍然是启发式分裂,无论是后续的Bagging,Boosting,随机森林,深度森林,它本质上都没改变这些基础算法,只是大家采用的模型在变化而已

2.2 理解2:比较复杂,有点矛盾

参考知乎专栏文章:机器学习中算法与模型的区别

上面这个文章其实是:
Difference Between Algorithm and Model in Machine Learning
这个英文博客文章的翻译


机器学习中的"算法"

机器学习中的“算法”是在数据上运行以创建机器学习“模型”的过程。

机器学习算法执行“模式识别”。算法从数据中“学习”,或者对数据集进行“拟合”。

机器学习算法具有许多特性(这些特性就和以前大学学的算法课的概念很像):

  • 机器学习算法可以用数学和伪代码来描述
  • 可以对机器学习算法的效率进行分析和描述
  • 机器学习算法可以用任何一种现代编程语言来实现

学者可以设计出全新的排序算法,程序员可以在应用程序中使用标准的排序算法。


机器学习中的“模型”

机器学习中的“模型”是运行在数据上的机器学习算法的输出。

模型表示 机器学习算法 所学到的内容。

模型是在训练数据上运行 机器学习算法 后保存的“东西”,它表示用于进行预测所需的规则、数字和任何其他特定于算法的数据结构。

2.3 我的理解

参考搜到的东西

以最简单的线性回归算法为例,可以表示为
y = a x + b h = f ( x ) ε = y − f ( x ) y=ax+b \\ h=f(x) \\ \varepsilon=y-f(x) y=ax+bh=f(x)ε=yf(x)

  1. 对问题进行建模,使用带有不确定参数的公式对问题进行描述的,就是目标函数。模型就是目标函数

  2. 模型的重点就是目标函数,比如线性回归算法,待确定的参数就是a
    和b,解这个目标函数需要的步骤或者一系列规则就是算法求解这个目标函数中的待确定参数的方法或者步骤就是算法

  3. 此外,目标函数得到解之后的东西(参数确定之后的目标函数)也是模型。

  4. 不能总认为目标函数就是一个简单的公式(不是那个最小化损失函数,目标函数≠深度学习中的损失函数,概念也比较模糊)

  5. 所有问题都可以有多种建模的方法,比如分类问题可以用SVM或者NB来做,但它们的目标函数不同

    • 对于SVM,求解分离超平面问题可以等价为求解相应的凸二次规划问题,参考SVM求解过程

    • 或者查看周志华老师《机器学习》这本书中关于替代损失函数的部分,可以看到,当原来的损失函数因为某种原因无法求解时,可以去寻找近似的损失函数,对于这个模型,可以采用不同的算法去求解。
      在“阅读材料”中,可以看到,

      求解通常是借助于凸优化技术,
      对于线型核:有基于割平面法的,有基于随机梯度下降的,还有坐标下降法的。
      对于非线型核:有基于采样的CVM,基于低秩逼近的Nystrom,基于随机傅里叶特征的方法等。

    • 对于NB,一般会采用极大似然估计的方法来求解(概率模型的训练过程就是参数估计过程)

  6. 有些时候,目标函数不同,但是可以采取相同的算法求解。

    比如深度学习中的模型优化算法,其实就是求解参数的算法(基于梯度的搜索是使用最为广泛的参数寻优方法,除此之外,模拟退火技术,遗传算法也可以用来求解)。
    参考:
    深度学习优化算法总结——从SGD到Adam
    第3讲:深度学习优化算法之从SGD到Adam
    深度学习最全优化方法总结比较(SGD,SGDM,Adam,Adagrad,Adadelta,Adam)
    可知,Adam是SGD的一种变种,本质上都是随机梯度下降SGD,SGDM,Adam,Adagrad,Adadelta,Adam这些优化方法/参数寻优方法都是基于梯度的搜索方法

2.3.1 目标函数 vs 损失函数

可以再去参考知乎问题:机器学习中的目标函数、损失函数、代价函数有什么区别?:解释的也是乱糟糟的,这个是个清华大学的人的回答,还是不一样的,大意就是:

目标函数就是要找的拟合函数,就是上面的
h = f ( x ) h=f(x) h=f(x)
损失函数就是评估目标函数准确与否的一个函数,如何评估呢,预测值和真实值进行比较就可以,也就是
ε = y − f ( x ) \varepsilon=y-f(x) ε=yf(x)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
非梯度优化算法的原理、分类和应用
谷歌机器学习白皮书全解析 43条黄金法则(一)
Constr. Build. Mater.:基于机器学习和元启发式算法的混凝土配合比多目标优化
谷歌机器学习43条规则:机器学习工程的最佳实践经验
算法与模型的浅析
机器学习知识框架
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服