你应该知道的 10 种机器学习算法(进阶篇)
suiw9 2024-11-13 14:43 18 浏览 0 评论
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
毫无疑问,机器学习/人工智能领域在将来是越来越受欢迎。由于大数据是目前科技行业最热门的趋势,机器学习非常强大,可以根据大量数据做出预测或计算建议。使用大量数据训练的深度学习算法,构建出一个能够理解人类语言并自动生成语言的模型。ChatGPT、文心一言等等,都是机器学习的伟大产物。
机器学习中大模型那么智能当然离不开伟大的机器学习算法,下面主要讲一下常见机器学习算法的基础知识。
机器学习算法可以分为三大类——监督学习、无监督学习和强化学习。 当某个属性(标签)可用于某个数据集(训练集),但属性(标签)缺失且需要针对其他实例进行预测时,监督学习非常有用。当挑战是发现给定未标记数据集中的隐式关系(项目未预先分配)时,无监督学习非常有用。强化学习介于这两个极端之间——每个预测步骤或动作都有某种形式的反馈,但没有精确的标签或错误消息。
1. 主成分分析(PCA)/SVD
PCA 是一种无监督方法,用于了解由向量组成的数据集的全局属性。此处分析数据点的协方差矩阵,以了解哪些维度(大多数)/数据点(有时)更重要(即它们之间的方差较高,但与其他维度的协方差较低)。考虑矩阵的顶级 PC 的一种方法是考虑具有最高特征值的特征向量。SVD 本质上也是一种计算有序分量的方法,但不需要获取点的协方差矩阵即可获得它。
2.1.最小二乘法和多项式拟合
大学时学习的数值分析,曾经将直线和曲线拟合到点来得到方程。可以使用它们来拟合机器学习中低维度的小型数据集的曲线。(对于大数据或具有多个维度的数据集,可能最终会严重过度拟合,所以不必担心)。OLS 具有封闭式解决方案,因此无需使用复杂的优化技术。
显而易见,使用该算法来拟合简单曲线/回归
2.2.约束线性回归
最小二乘法可能会与数据中的异常值、杂散场和噪声混淆。因此,我们需要约束来减少我们在数据集上拟合的线的方差。正确的方法是拟合线性回归模型,这将确保权重不会出现异常行为。模型可以具有 L1 范数 (LASSO) 或 L2(岭回归)或两者(弹性回归)。均方损失已优化。
使用这些算法来拟合带有约束的回归线,避免过度拟合并掩盖模型中的噪声维度。
3. K表示聚类
他是无监督聚类算法。给定一组向量形式的数据点,我们可以根据它们之间的距离来形成点簇。这是一种期望最大化算法,它迭代地移动聚类中心,然后将点与每个聚类中心结合在一起。算法采用的输入是要生成的簇的数量以及它将尝试收敛簇的迭代次数。
从名称中可以明显看出,可以使用该算法在数据集中创建 K 个簇
4.逻辑回归
Logistic 回归是在应用权重后应用非线性(主要使用 sigmoid 函数,也可以使用 tanh)的约束线性回归,因此将输出限制为接近 +/- 类(在 sigmoid 情况下为 1 和 0)。交叉熵损失函数使用梯度下降进行优化。初学者注意:逻辑回归用于分类,而不是回归。还可以将逻辑回归视为单层神经网络。逻辑回归使用梯度下降或 L-BFGS 等优化方法进行训练。NLP 人们经常将其与最大熵分类器的名称一起使用。
这就是 Sigmoid 的样子:
使用 LR 训练简单但非常强大的分类器。
5.SVM(支持向量机)
SVM 是一种常用的监督学习算法,是像线性/逻辑回归一样的线性模型,不同之处在于它的核心思想是将数据映射到高维特征空间,并在该空间中寻找一个最优的超平面来进行分类。超平面是一个 n-1 维的线性子空间,其中 n 是特征的维数。SVM 在特征空间中选择具有最大间隔(Margin)的超平面作为最优分类边界,以提高分类的鲁棒性。
SVM 适用于二分类和多分类问题。它通过最大化间隔来寻找最优分类超平面,并具有在高维空间中处理非线性问题的能力。在实践中,选择合适的核函数和参数设置对于 SVM 的性能至关重要。
6.前馈神经网络
这些基本上是多层逻辑回归分类器。由非线性(sigmoid、tanh、relu + softmax 和很酷的新 selu)分隔的许多权重层。它们的另一个流行名称是多层感知器。FFNN 可作为自动编码器用于分类和无监督特征学习。
FFNN 可用于训练分类器或提取特征作为自动编码器
7. 卷积神经网络(Convnets)
当今世界上几乎所有最先进的基于视觉的机器学习结果都是使用卷积神经网络实现的。它们可用于图像分类、对象检测甚至图像分割。卷积网络由 Yann Lecun 在 80 年代末至 90 年代初发明,其特征是卷积层充当分层特征提取器。也可以在文本(甚至图表)中使用它们。
使用卷积网络进行最先进的图像和文本分类、对象检测、图像分割。
8. 循环神经网络(RNN):
RNN 通过在时间 t 的聚合器状态和时间 t 的输入上递归应用同一组权重来对序列进行建模(假设序列在时间 0..t..T 具有输入,并且在每个时间 t 有一个隐藏状态)这是 RNN t-1 步骤的输出)。纯 RNN 现在很少使用,但其对应的 LSTM 和 GRU 在大多数序列建模任务中都是最先进的。
RNN(如果这里是一个密集连接的单元和一个非线性,那么现在 f 通常是 LSTM 或 GRU)。LSTM 单元用于代替纯 RNN 中的普通密集层。
将 RNN 用于任何序列建模任务,特别是文本分类、机器翻译、语言建模
9. 条件随机场(CRF)
CRF 可能是概率图模型 (PGM) 系列中最常用的模型。它们用于像 RNN 一样的序列建模,也可以与 RNN 结合使用。在神经机器翻译系统出现之前,条件随机场是最先进的,在许多小数据集的序列标记任务中,它们仍然比需要大量数据才能泛化的 RNN 学得更好。它们还可以用于其他结构化预测任务,例如图像分割等。CRF 对序列的每个元素(例如句子)进行建模,以便邻居影响序列中组件的标签,而不是所有标签彼此独立。
使用 CRF 来标记序列(文本、图像、时间序列、DNA 等)
10.决策树
它是一种基于树结构的分类和回归算法。它通过对特征进行分割来构建一个树形模型,每个内部节点表示一个特征,每个叶节点表示一个类别或一个数值。决策树通过对特征进行逐层的判断和分割,以最终得到一个预测结果。
举一个简单的例子来解释决策树的工作原理。假设我们有一个二分类问题,要根据一个人的性别、年龄和教育水平来预测他们是否购买某个产品。首先,我们从根节点开始,选择一个特征进行分割,比如选择性别作为第一个分割点。我们可以根据性别将数据分为男性和女性两个分支。然后,我们进一步选择一个特征进行分割,比如选择年龄。在男性分支中,我们可以将数据分为年龄小于等于30岁和大于30岁的两个子分支;在女性分支中,我们也可以进行类似的分割。接着,我们再选择一个特征进行分割,比如选择教育水平。在每个年龄分支中,我们可以将数据进一步分为高教育水平和低教育水平两个子分支。
这样不断进行特征的选择和分割,直到满足停止条件。停止条件可以是达到预定的树的深度、节点中的样本数小于某个阈值或不再有可分割的特征。
最终,我们得到了一棵决策树,每个叶节点表示一个类别。对于新的未知样本,我们可以沿着树的分支进行判断,最终到达一个叶节点,并根据叶节点的类别进行预测
目前使用的两种常见决策树算法是随机森林(Random Forests)和提升树(Boosting trees),前者在属性的随机子集上构建不同的分类器,并将它们组合起来进行输出。
决策树可用于对数据点进行分类(甚至回归)
TD 算法(时间差分法)
如果仍然想知道上述方法如何解决像 DeepMind 那样击败围棋世界冠军这样的任务,那么它们不能。上面讨论的所有 10 种算法都是模式识别,而不是策略学习器。为了学习解决多步骤问题的策略,例如阿尔法GO赢得一场国际象棋比赛、ChatGPT语音机器人。这种类型的机器学习称为强化学习。该领域最近取得的许多(不是全部)成功都是将卷积网络或 LSTM 的感知能力与一组称为时间差分学习的算法相结合的结果。其中包括 Q-Learning、SARSA 、DQN等等其他一些变体。
总结
这些是 10 种机器学习算法,先作为入门的一些了解,心里有大模型算法这个概念。后面会针对每种算法进行深入分析研究。
相关推荐
- 设置文件的默认打开方式(如何设定文件的默认打开方式)
-
在操作系统中,设置文件的默认打开方式可以让特定类型的文件始终使用你选择的程序打开。以下是Windows和macOS系统中设置默认打开方式的详细步骤:Windows系统方法1:通过文件属性设置右键点...
- 电脑怎么设置默认浏览器(电脑怎么设置默认浏览器?)
-
在电脑上设置默认浏览器的步骤因操作系统不同而有所差异。以下是Windows和Mac系统的设置方法:Windows系统方法1:通过系统设置打开“设置”:...
- Java接口默认方法:灵活与约束并存
-
Java接口默认方法:灵活与约束并存在Java编程的世界里,接口作为定义行为规范的重要工具,一直扮演着举足轻重的角色。然而,在Java8引入了默认方法之后,接口的设计和使用方式发生了微妙的变化。今天...
- Java8新特性之默认方法:为接口注入灵魂
-
Java8新特性之默认方法:为接口注入灵魂Java8发布时,它带来的最大创新之一就是接口的默认方法。这就像给一个传统的木偶注入了生命,让它不仅能动还能说话了。今天我们就来聊聊这个让Java开发者欢呼雀...
- CentOS系统在不重启的情况下为虚拟机添加新硬盘
-
一、概述用过虚拟机的都知道,如果在系统运行的时候去给虚拟机添加一块新设备,比如说硬盘,系统是读取不到这个新硬盘的,因为系统在启动的时候会去检测硬件设备。但是我们也可能会遇到这样的情况,比如正在运行比较...
- [常用工具] 基于psutil和GPUtil获取系统状态信息
-
本文主要介绍在Python3中利用psutil库获取系统状态,利用GPUtil获取gpu状态。psutil(processandsystemutilities)(进程和系统实用程序)是一个跨平...
- Docker容器内执行宿主机指令(docker执行宿主机shell)
-
一背景最近项目有个需求,需要程序配置服务器IP并且可以重启服务器。如果程序直接部署在服务器,相信大家都会操作。但是程序是用docker运行的,在docker中执行指令就很麻烦了。...
- 容器网络调试怎么办?一条命令就搞定!
-
nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于util-linux包中。用途...
- linux自动化巡检脚本集(linux服务器巡检内容以及标准)
-
以下是一个自动化巡检脚本集的制作方案,包含常见系统检查项和可扩展框架,使用Python和Shell脚本实现:...
-
- 麒麟KOS|统信UOS系统添加新数据盘
-
原文链接:麒麟KOS|统信UOS系统添加新数据盘...
-
2025-03-26 16:57 suiw9
- Linux CentOS 7 根目录扩容(linux扩展根目录磁盘空间)
-
一、现状描述现有一台CentOS7的虚拟机,硬盘容量为30GB通过lsblk命令查看分区容量,当前根目录容量为27.5GB左右二、扩容需求...
- 从Linux底层分析Docker原理(linux docker-compose)
-
写在前面如果你觉得本人对你有帮助,请你记得评论,点赞,关注;如果你觉得文章还不错请记得收藏,点赞。如果你觉得文章非常的好可以私信我,我会在第一时间回复你。...
- CentOS新增硬盘的使用步骤(centos扩展硬盘)
-
一、查看机器所挂硬盘个数及分区情况,新增硬盘为/dev/sdb...
- Python之psutil库简介(python3 pil库)
-
psutil(pythonsystemandprocessutilities)是一个跨平台的第三方库,能够轻松实现获取系统运行的进程和系统利用率(包扩CPU、内存、磁盘、网络等)信息。它主...
- 运维,你还不会查看Linux系统cpu信息?
-
CPU也称为微处理器或简称为处理器。就像大脑如何控制人体一样,CPU控制着计算机的所有部分。因此CPU被认为是计算机的大脑。那我们怎么在Linux系统中查看如IntelCorei3、i5、AM...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)