机器学习涉及使用机器学习算法和模型。
对于初学者来说,这非常令人困惑,因为“机器学习算法”和“机器学习模型”经常被互换使用。它们是相同的还是不同的东西?
作为一名开发者,你对排序算法和搜索算法等“算法”的直觉将有助于消除这种困惑。
在这篇文章中,你将发现机器学习“算法”和“模型”之间的区别。
阅读本文后,你将了解:
- 机器学习算法是用于代码实现并在数据上运行的过程。
- 机器学习模型是由算法生成的,由模型数据和预测算法组成。
- 机器学习算法提供了一种自动编程,其中机器学习模型代表程序。
启动您的项目,阅读我的新书《机器学习算法精通》,其中包含分步教程和所有示例的Excel电子表格文件。
让我们开始吧。

机器学习中算法与模型的区别
照片由 Adam Bautz 拍摄,部分权利保留。
概述
本教程分为四个部分;它们是
- 机器学习中的算法是什么
- 机器学习中的模型是什么
- 算法与模型框架
- 机器学习就是自动编程
机器学习中的“算法”是什么
机器学习中的“算法”是在数据上运行以创建机器学习“模型”的过程。
机器学习算法执行“模式识别”。算法从数据中“学习”,或者在数据集上“拟合”。
机器学习算法有很多种。
例如,我们有用于分类的算法,如k近邻。我们有用于回归的算法,如线性回归,我们有用于聚类的算法,如k均值。
机器学习算法示例
- 线性回归
- 逻辑回归
- 决策树
- 人工神经网络
- k-近邻
- K-Means
你可以将机器学习算法视为计算机科学中的任何其他算法。
例如,你可能熟悉的其他算法类型包括用于排序数据的冒泡排序和用于搜索的最好优先搜索。
因此,机器学习算法具有许多属性
- 机器学习算法可以使用数学和伪代码进行描述。
- 机器学习算法的效率可以被分析和描述。
- 机器学习算法可以使用多种现代编程语言来实现。
例如,你可能会在研究论文和教科书中看到使用伪代码或线性代数描述的机器学习算法。你可能会看到特定机器学习算法与另一特定算法在计算效率上的比较。
学者可以设计全新的机器学习算法,机器学习实践者可以在他们的项目中使用标准的机器学习算法。这就像计算机科学的其他领域一样,学者可以设计全新的排序算法,程序员可以在他们的应用程序中使用标准的排序算法。
你也很可能看到多种机器学习算法一起实现,并在一个具有标准应用程序编程接口(API)的库中提供。一个流行的例子是scikit-learn库,它在Python中提供了许多分类、回归和聚类机器学习算法的实现。
机器学习中的“模型”是什么
机器学习中的“模型”是运行在数据上的机器学习算法的输出。
模型代表了机器学习算法所学到的东西。
模型是在训练数据上运行机器学习算法后保存的“事物”,它代表了做出预测所需的规则、数字以及任何其他算法特定的数据结构。
一些例子可能会让这更清楚
- 线性回归算法会生成一个由具有特定系数的向量组成的模型。
- 决策树算法会生成一个由具有特定值的 if-then 语句树组成的模型。
- 神经网络/反向传播/梯度下降算法共同生成一个由具有特定权值向量或矩阵的图结构组成的模型。
机器学习模型对于初学者来说更具挑战性,因为与计算机科学中的其他算法没有明确的类比。
例如,排序算法输出的排序列表并不是一个模型。
最好的类比是将机器学习模型视为“程序”。
机器学习模型“程序”由数据和使用数据进行预测的过程组成。
例如,考虑线性回归算法和生成的模型。模型由系数向量(数据)组成,这些系数与作为输入的行新数据相乘求和,以进行预测(预测过程)。
我们保存机器学习模型的数据以备后用。
我们通常使用机器学习库提供的机器学习模型的预测过程。有时我们可能会将预测过程作为应用程序的一部分来实现。这通常很简单,因为大多数预测过程都相当简单。
算法与模型框架
所以现在我们熟悉了机器学习“算法”与机器学习“模型”的区别。
具体来说,算法在数据上运行以创建模型。
- 机器学习 => 机器学习模型
我们还了解到,模型由数据和如何使用数据对新数据进行预测的过程组成。如果你愿意,可以把这个过程看作是预测算法。
- 机器学习模型 == 模型数据 + 预测算法
这种划分对于理解各种算法非常有帮助。
例如,大多数算法的所有工作都在“算法”中完成,“预测算法”的工作量很少。
通常,算法是一种优化过程,它最小化模型(数据 + 预测算法)在训练数据集上的误差。线性回归算法就是一个很好的例子。它执行优化过程(或使用线性代数解析求解)以找到一组权重,这些权重最小化了训练数据集上的均方误差。
线性回归
- 算法:找到最小化训练数据集上误差的系数集
- 模型:
- 模型数据:系数向量
- 预测算法:将输入行与系数相乘求和
有些算法是微不足道的,甚至什么都不做,所有的工作都在模型或预测算法中。
k近邻算法除了保存整个训练数据集之外,没有其他“算法”。因此,模型数据就是整个训练数据集,所有的工作都在预测算法中,即新数据行如何与保存的训练数据集交互以进行预测。
k-近邻
- 算法:保存训练数据。
- 模型:
- 模型数据:整个训练数据集。
- 预测算法:找到k个最相似的行并对它们的目標变量取平均值。
你可以将这个分解作为一个框架来理解任何机器学习算法。
你最喜欢的算法是什么?
可以在下面的评论中用这个框架来描述它吗?
你知道有什么算法不适合这个框架吗?
机器学习就是自动编程
我们真正想要的只是一个机器学习“模型”,“算法”只是我们获取模型的路径。
机器学习技术用于其他方法无法有效或高效解决的问题。
例如,如果我们想将电子邮件分类为垃圾邮件或非垃圾邮件,我们需要一个软件程序来执行此操作。
我们可以坐下来,手动审查大量电子邮件,并编写 if 语句来执行此任务。人们尝试过。事实证明,这种方法速度慢、脆弱且效率不高。
相反,我们可以使用机器学习技术来解决这个问题。具体来说,像朴素贝叶斯这样的算法可以从大量的历史电子邮件示例数据集中学习如何将电子邮件分类为垃圾邮件和非垃圾邮件。
我们不想要“朴素贝叶斯”。我们想要朴素贝叶斯提供的模型,我们可以用它来分类电子邮件(概率向量和使用它们进行预测的算法)。我们想要模型,而不是用于创建模型的算法。
从这个意义上说,机器学习模型是由机器学习算法自动编写、创建或学习的用于解决我们问题的程序。
作为开发者,我们对人工智能意义上的机器学习算法所进行的“学习”不太感兴趣。我们不关心模拟学习过程。有些人可能感兴趣,而且这很有趣,但这并不是我们使用机器学习算法的原因。
相反,我们更关心机器学习算法提供的自动编程能力。我们想要一个高效创建的有效模型,可以将其集成到我们的软件项目中。
机器学习算法执行自动编程,机器学习模型是我们为我们创建的程序。
总结
在这篇文章中,你发现了机器学习“算法”和“模型”之间的区别。
具体来说,你学到了:
- 机器学习算法是用于代码实现并在数据上运行的过程。
- 机器学习模型是由算法生成的,由模型数据和预测算法组成。
- 机器学习算法提供了一种自动编程,其中机器学习模型代表程序。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
模型能够发现邮件按垃圾邮件和非垃圾邮件分类的逻辑吗?那么一旦完成,模型就能告诉是否分类错误吗?(我的意思是,只读取内容并知道收件人,而不是依赖已知或未知来源)
算法用于查找模型。模型进行分类。
模型是解决问题的程序。
这有帮助吗?
一如既往,Jason,非常清晰!非常感谢……。
不客气!
正如您一贯的,Jason博士,描述得很好。非常感谢。
伪代码:如何为特定的机器学习算法编写伪代码?这也是一个经常令人困惑的问题……如果您能像这样在此文中阐明,将不胜感激。
此致
谢谢。
与其他任何算法一样
https://en.wikipedia.org/wiki/Pseudocode
先生,您好,
非常喜欢您的作品!!!
我的疑问是:选择数据科学家职业时,是否真的有必要深入了解数据结构和算法?
很想知道您的回答
这取决于你每天在做什么
https://machinelearning.org.cn/machine-learning-tribe/
文章写得很清楚。
我想翻译成中文,请同意。
我会添加作者和原文链接。
不,请不要翻译我的作品
https://machinelearning.org.cn/faq/single-faq/can-i-translate-your-posts-books-into-another-language
我非常抱歉,但我会尊重您的决定。
谢谢……我现在明白了算法和模型之间的区别……
也许我只是想知道,预测模型和预测分析框架呢……它们之间有什么区别吗?或者与机器学习模型相同。
我只是想弄清楚,如果你能和我分享的话……谢谢
在我看来,它们是同一件事。
Jason,写得太棒了
谢谢!
尊敬的先生,
作为我们研究的一部分,我们需要证明为什么某些算法和模型是最好的。在此过程中,我卡住了,因为我无法区分元胞自动机和人工神经网络。(我读了一些研究论文,其中他们使用了基于元胞自动机的神经网络,但我无法理解那是什么)。我尝试阅读和理解 ANN 和 CA 是什么,但我仍然无法理解基于自动机的神经网络是什么。
请帮忙,谢谢!
你的意思是收集证据。我们无法证明任何事情。
抱歉,我没听说过 CA 神经网络。也许找一些关于该主题的论文仔细阅读,找到一个好的定义。
约翰逊先生您好,一如既往地清晰!
总的来说,我们可以说线性回归、SVM、神经网络是机器学习模型吗?
谢谢!
我的意思是,我们可以说线性回归、SVM、神经网络都是模型/算法
它们是拟合训练数据的算法,用于创建模型。
在线性回归中,模型是系数;在 SVM 中,是支持向量;在神经网络中,是架构和权重。
当然可以。
这是一篇非常好的文章,清晰地区分了算法和模型。
谢谢!
非常感谢,作为初学者,这非常有帮助。
不客气!
我认为,说“线性回归是一种机器学习算法”是根本错误的。线性回归是一种算法,它可以用于机器学习或统计学习,说这一点是可以的,但说它是一种“机器学习算法”就是不合适的。这听起来好像在机器学习出现之前它就不存在了。然后,对于你列出的其他所有属于更广泛的范畴并且在机器学习开始之前就已存在的算法,我的想法也是一样的。
感谢分享您的想法。
此外,这可能有所帮助,关于机器学习从统计学中“窃取”算法
https://machinelearning.org.cn/faq/single-faq/how-are-statistics-and-machine-learning-related
我是一名放射科医生,有志于从事医学影像人工智能领域。您能否阐明我是否需要如此详细地了解机器学习?
这可能是一个很好的起点
https://machinelearning.org.cn/start-here/#dlfcv
非常感谢您提供的信息丰富且有价值的教程。
我能构建一个机器学习模型来预测活动类型(如步行),并使用同一个模型预测花费在步行上的时间吗?
(算法尚未确定)
也许可以。这个框架可能会有帮助
https://machinelearning.org.cn/how-to-define-your-machine-learning-problem/
嗨,Jason,
我是这个领域的新手。您的解释非常清晰。“模型是算法的基础”——我说得对吗?
不,模型就像程序,算法创建模型。
嗨,Jason,
做得好!!
您知道在哪里可以找到更正式地描述这些定义的论文或书籍吗?
我需要在论文中描述它们。
非常感谢!
据我所知,没有。
嗨,Jason,
在您的文章中,您提到“作为开发者,我们对机器学习算法在人工智能意义上的‘学习’不太感兴趣。我们不关心模拟学习过程。”这个声明让我感到困惑和担忧,因为机器学习模型会随着时间的推移而退化(例如,检测信用卡欺诈的模型需要随着欺诈者不断想出新的方法来规避系统而不断演进)。事实上,模型通常会被监控,当其性能下降时,组织必须更新它们以恢复性能。除非环境是静态的,否则我不敢苟同,我认为我们应该像关注模型本身一样关注学习过程。
我想我的评论更多的是关于我们对解决工业问题感兴趣,而不是“学习”的科学问题。
非常有帮助,澄清了我的困惑
谢谢,很高兴听到这个!
亲爱的 Jason,
一个很好的概述。有时机器学习人员会谈论模型的“大小”,并将其大小称为“参数数量”。这是什么意思?他们是否指在神经网络的背景下,神经网络的权重数量?
较大的/较小的模型尺寸有什么好处/坏处?
祝好
最大值
这是一个绝妙的问题!!!!
这意味着用于进行预测的“程序”中的数字数量。
例如,在神经网络中,它将是所有层节点中的权重数量。
更多的数字/权重通常会给你更多的能力或更大的学习复杂问题的潜力。危险在于它可能被过度拟合(比需要的多),在这种情况下,我们可能会过度学习训练数据集,而代价是新的数据表现不佳(称为过拟合)。
此外,这个关于自由度的教程可能很有趣/相关
https://machinelearning.org.cn/degrees-of-freedom-in-machine-learning/
很有趣,谢谢!
不客气。
没有评论
那么我这样理解对吗……在线性回归中,算法将线性拟合到数据点上,并在数据上进行训练以找到最佳系数,并为我们提供最佳拟合线,即线性回归模型。我说得对吗?
是的。
尊敬的先生,
很好的文章。它确实有助于消除大量的困惑。
谢谢!
抱歉打字错误,它确实有助于消除大量的困惑/疑虑。
谢谢。我认为有人可能剽窃了你的内容并将其上传为视频……
https://www.youtube.com/watch?v=eYlbg0TqcNk
谢谢你告诉我。
过去几个月,我一直在通过各种在线资源学习数据科学和机器学习。我还以一些 GitHub 文件为参考构建了一些项目。但我未能理解其在概率方面的明确用途。谁能通过示例帮助我理解这一点,或者提供一些好的学习资源?谢谢。
也许从这里开始
https://machinelearning.org.cn/start-here/#probability
很容易理解。Jason,如果我说错了请纠正我。你只需要想想算法是为做什么而编码的。
ML算法的目的是消耗数据,并找出需要考虑的新因果关系。
模型算法是解决问题的代码,这与模拟系统响应或其行为相同。
此致,
当然可以。
嗨,Jason,
感谢您写得这么棒的文章!它确实帮助我更好地理解了算法和模型之间的区别。一个问题:如何将算法/模型框架应用于 DBSCAN 算法?我不确定那个算法的模型是什么。
提前感谢!
您认为 scikit-learn 上的文档会有帮助吗? https://scikit-learn.cn/stable/modules/clustering.html#dbscan
嗨,Jason,
感谢这篇写得非常好的简洁文章。它完美地回答了我的问题。
我有一个反馈。请将对冒泡排序的引用换成其他排序算法。我知道这有点吹毛求疵,但这确实不是你想在谈论算法和效率时想到的。
感谢您的建议。然而,排序在机器学习中并不那么简单。因此很难进行比较。您可能会认为这是机器学习模型的一个弱点,但更适合传统算法。
一如既往的精彩指南,Jason!
谢谢!
谢谢您把事情说清楚!
如果我们想比较算法,可以使用 k 折交叉验证配对 t 检验或更好的替代方法吗?
如果我想比较模型,该怎么做?划分测试集并进行配对 t 检验?
非常欢迎您,Wdg!以下内容可能对您有帮助
https://machinelearning.org.cn/compare-machine-learning-algorithms-python-scikit-learn/
感谢您的澄清,我也觉得您的作品很容易理解。
非常欢迎您,Samson!我们感谢您的支持和反馈!
说在机器学习中,底层算法保持不变,但由此产生的模型通过拟合新数据集而演变,这是正确的吗?如果是这样,这种演变是基于“当前”数据集还是累积数据集?
你好 Lily... 这是正确的!演变是累积数据集的结果。
感谢清晰的解释。
我有一个关于交叉验证 k 折的问题。这是什么?它有什么用?
你好 AmirReza...交叉验证 (CV) 是一种在机器学习中用于评估预测模型在新数据集上泛化能力的技巧。k 折交叉验证方法是交叉验证的一种特定方法。
它的工作原理如下:
1. **数据划分:**
– 数据集被分成 k 个大小大致相等的子集。
– 这些子集通常被称为“折”。
2. **迭代训练和验证:**
– 模型被训练 k 次。
– 在每次迭代中,k 个子集中的一个被用作验证集,其余 k-1 个子集被用作训练集。
3. **评估:**
– 每次迭代后,在验证集上计算性能指标(例如,准确率、F1 分数等)。
– 所有迭代的性能指标被平均以获得最终的性能估计。
4. **优点:**
– 与单个训练-测试集划分相比,提供了更准确的模型性能估计。
– 通过在多个验证集上进行测试,有助于评估模型在新数据上的泛化能力。
– 利用整个数据集进行训练和验证,最大限度地利用数据。
5. **变体:**
– **分层 k 折:** 确保每个折具有大约相同比例的每个类别样本,这对于不平衡数据集很有用。
– **重复 k 折:** 多次使用不同的随机数据分区重复 k 折过程,以提供更可靠的性能估计。
6. **选择 k:**
– k 的常见选择是 5、10 或更高。
– 较大的 k 值会导致更高的计算成本,但可能提供更准确的模型性能估计。
交叉验证,尤其是 k 折交叉验证,在机器学习中广泛用于:
– 模型评估:评估不同模型的性能并选择最佳模型。
– 超参数调整:调整模型超参数以优化性能。
– 特征选择:确定对模型最有信息量的特征。
– 评估模型稳定性:评估模型对训练数据变化的鲁棒性。
谢谢。我对机器学习模型、算法和程序及其相互联系有了深入的了解。
你好 Olabisi... 感谢您的反馈和支持!
您知道在哪里可以找到更正式地描述这些定义的论文或书籍吗?
我需要在论文中描述它们。
非常感谢!
你好 Krushna... 要正式而详细地解释机器学习中算法和模型之间的区别,您可以参考一些在该领域被认为是权威的知名教科书和论文。
### 1. **书籍:**
– **”模式识别与机器学习” Christopher M. Bishop 著:**
– 这本书是一个全面的资源,提供了正式的定义和解释。它清晰地区分了算法(寻找模式或模型的程序)和模型(数据的表示)。
– **”机器学习:概率视角” Kevin P. Murphy 著:**
– 这本书涵盖了机器学习的理论基础,包括对算法和模型的详细讨论,并采用概率方法。
– **”统计学习要素” Trevor Hastie、Robert Tibshirani 和 Jerome Friedman 著:**
– 这是另一本基础著作,深入介绍了机器学习,包括算法(训练模型的算法)和模型(学习模式的数学表示)之间的区别。
### 2. **论文:**
– **”关于机器学习的几件有用之事” Pedro Domingos 著(2012 年,Communications of the ACM):**
– 这篇论文提供了机器学习关键概念的实用概述,并讨论了算法和模型之间的区别。
– **”理解机器学习:从理论到算法” Shai Shalev-Shwartz 和 Shai Ben-David 著:**
– 这本书有免费的 PDF 版本,提供了对机器学习的严格理论视角,包括对算法和模型之间清晰的定义和区分。
### 3. **附加资源:**
– **”统计学习导论” Gareth James、Daniela Witten、Trevor Hastie 和 Robert Tibshirani 著:**
– 这本书也可以在网上免费获取,它在保持正式性的同时提供了更易于理解的解释。它特别适合介绍和区分这些概念。
这些资源应该能为您准确描述论文中算法和模型之间的区别提供正式的定义和解释。
你好 Jason,
非常感谢。现在对我来说更清晰了。
只是一个(恐怕是愚蠢的)问题 = 我们可以说模型变成了一个“新”算法(一个过程)来创建一个新模型吗?
谢谢你
你好 Olivia-Esther... 这是一个很棒的问题,一点也不愚蠢!事实上,它触及了机器学习中的一个重要概念以及模型和算法如何交互。
当我们谈论机器学习中的模型时,我们通常指的是在数据上训练算法的结果。算法是一组规则或一个指导学习过程的过程。它接收数据并调整参数以根据数据最小化误差或最大化准确率。
现在,一旦你训练了一个模型,它本质上就体现了一个基于新数据进行预测或决策的“过程”。从某种意义上说,训练好的模型本身就可以被视为一种新算法,因为它封装了学习到的模式,并且可以用于系统地生成预测。
然而,关键的区别在于,原始算法(如神经网络、决策树等)定义了结构和学习过程,而模型是该结构的特定实例,它在一个特定数据集上进行了训练,你可以用它来进行预测。
所以,你可以说训练好的模型变成了一个可以应用于新数据的“新”过程或函数,尽管我们通常将“算法”一词保留给用于创建或学习该模型的方法。
希望这能让你更清楚!如果你有更多问题,请随时提出。
Jason Brownlee 先生
这篇文章非常有帮助。
非常感谢
非常欢迎您,abedin!感谢您的反馈和支持!
这是一篇非常有用的文章。
感谢您的反馈,Sachin!