机器学习经过漫长的发展,算法的数量与类型也比较繁杂.这篇文章用于记载机器学习总共有哪些算法,并进行粗略的简介,随着复习进度,会不断的补充没写上的算法。而博主会针对 NLP 与 推荐方向比较常用的机器学习算法进行深入讲解

关于机器学习的分类,其实有些算法比较难以定义,例如决策树算法可以分类也可以回归,所以在分类上,大家就不必太过于纠结

classification (分类),

 regression (回归), 

 clustering (聚类), 

 dimensionality reduction (降维)。

关于类别的详细介绍

分类,聚类及其回归的区别

零 集成算法

集成算法中的 GDBT ,XGBoost 等对于推荐方向和 NLP 方向有着广泛的应用,因此为此特分一个专题

集成算法简介

知乎代码示例

1. boosting 算法

关于boosting(提升算法)的概念,上文有简单介绍过,提升算法(这是一类算法族的称呼,不是指某种具体算法)是通过改变训练样本的权重(如果基分类器不支持则通过调整采样的方式改变基分类器的训练样本分布),学习多个分类器,并将这些分类器进行线性组合,提高分类的性能

1.1 Adaboost(自适应增强算法

在 boosting 中有两个问题,第一:如何调整每次训练样本权重,第二:如何将得到的 M 个学习器组合成最终学习器

而在 Adaboost 中,选择了以下策略,第一:提高上一轮被错误分类的样本的权值,降低正确分类的样本权值

第二:线性加权求和,误差率小的基学习器有较大的权值,误差率大的基学习器有较小的权值

AdaBoost 算法详解

1.2 梯度下降树 GDBT(GDBT 实际上包含 XGBoost 算法,它是 GDBT 的一个变种,为了区分,GDBT 一般指只用了一阶导数信息的 GDBT 算法)

GDBT 是以 CART 树(回归树)作为基分类器的 boosting 算法。GDBT 算法主要是通过残差拟合目标,也就是根据第一个模型的预估值与真实值的误差,再新建一个分类器,对误差进行拟合

GDBT 算法详解

1.3 XGBoost

如果把xgboost对gbdt的所有改进细节列出来,那牵扯的point有点多,所以选择几个点进行阐述。

为了用最容易理解的思路,我们就假设不知道xgboost算法,先去思考GBDT的过程中有哪些点可以改进:

1、基学习器的选择。

GBDT使用CART(回归树)作为基学习器,我们还可以考虑支持其他的基学习器,所以xgboost也支持线性学习器

2、损失函数的选择。

GBDT大多数情况下采用平方误差和作为损失函数,我们还可以考虑更优秀的损失函数,所以xgboost实现了自己的损失函数。

3、特征分裂点及特征选择。

GBDT采用CART树的特征分裂点及特征选择方式,具体为串行遍历所有的特征分裂点和特征,选择平方误差和最小的特征及特征分裂点;

这个过程中,我们注意到各特征及分割点的损失函数的计算可以并行执行,而且如果对样本按照特征排序的结果在全局可以复用,可大大提高计算效率,而xgboost也是这样做的。

另外,GBDT的每棵树的特征选择策略都是相同的,方差较小,多样性不足,我们可以借鉴随机森林中列抽样(随机变量选择)的思想,xgboost也实现了这一点。

4、不同的树对于残差的拟合策略

GBDT采用残差的一阶导数代替残差进行拟合(这里需要说明,许多资料说用一阶导代替残差的原因是残差难以获得,这好扯淡啊,拟合一阶导的优点明明是为了更快地进行拟合,而且当损失函数为平方误差和时,一阶导就等于残差),发散一下我们就想到了梯度下降和牛顿法,那我们能不能使用二阶导来拟合残差呢,答案是肯定的,且xgboost也是这样做的,而且通过二阶导拟合策略计算出了xgboost的损失函数(见步骤2)。损失函数不仅考虑到了经验风险,也考虑到了结构风险,通过结构风险正则化,使得xgboost泛化性能更佳,更不容易过拟合。

1.4 LightGBM

LightGBM 在精度,运行效率,内存消耗上都有提升于 XGBoost

1、boosting过程中,最耗时的就是特征选择及连续特征分裂点选取的问题,xgboost已经通过pre-sorted预排序的方法进行了优化,但是如果样本对应的特征枚举值过多,还是会导致耗时过长的问题。所以我们可以考虑HistoGram(直方图)算法,通过预先对样本的特征进行分桶(bin)的方式,在选择分裂点的时候遍历各个桶,就可以有效地提高运行效率,虽然会稍微损失一点精度,但是可以通过其它的优化进行弥补。

2、结点的分裂策略。GBDT和xgboost在树的分裂过程中,都采用level-wise(类似层序遍历)的分裂方式,这种方式平等地对待了分裂贡献可能相差很大的同一层的不同子结点。lightGBM采用leaf-wise(类似深度优先遍历)分裂策略,每一步都选择最深的贡献最大的子结点进行分裂。

3、采样方法。无论是GBDT还是xgboost,我们都是在不停地训练基学习器去拟合残差,当残差小于某个阈值时停止训练,可能存在这样一种情况,对于大多数样本来讲,其梯度已经较小,而小部分样本的梯度仍较大,所以我们想到可以在每次训练新的基学习器时,保留梯度较大的样本,减少梯度较小的样本数量(随机采样),这便是GOSS方法(Gradient-based One-Side Sampling)。

一 监督学习

1. 监督学习

1.1 分类算法

① 支持向量机 SVM (SMO 序列最小优化算法:解决二次优化问题的算法,可用于优化 SVM 算法)

(这里稍微提一句,感知机算法 是 SVM 和神经网络算法的基础,但因为年代比较久远,想稍微了解下,可转传送门: 感知机)

优点:泛化错误率低,结果易解释。

缺点:对大规模训练样本难以实施,解决多分类问题存在困难,对参数调节和核函数的选择敏感。

应用场景:文本分类、人像识别、医学诊断等。

② 决策树(DT)

信息增益(ID3)、信息增益率(C4.5)、基尼系数(CART)等等。

优点:易于理解和解释,可以可视化分析,容易提取出规则;能够处理不相关的特征。

缺点:对缺失数据处理比较困难。

应用场景:在决策过程应用较多。

③ 朴素贝叶斯(NBC)

p(A|B)= p(B|A)*p(A/p(B)

优点:在数据较少的情况下仍然有效,可以处理多类别问题。

缺点:对输入数据的准备方式较为敏感。

应用场景:文本分类、人脸识别、欺诈检测。

④ K-近邻(K-NN)

优点:简单、易于理解、易于实现,无需估计参数。此外,与朴素贝叶斯之类的算法比,无数据输入假定、准确度高、对异常数据值不敏感。

缺点:对于训练数据依赖程度比较大,并且缺少训练阶段,无法应对多样本。

应用场景:字符识别、文本分类、图像识别等领域。

⑤ 随机森林 Random Forest

⑥ 逻辑回归 (LR)-logistics regression

⑦ 线性回归 (LR)-Linear Regression

1.2 回归算法

① GDBT(梯度下降树)

梯度下降树

GDBT 与 随机森林的区别

1、组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成

2、组成随机森林的树可以并行生成;而GBDT只能是串行生成

3、对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来

4、随机森林对异常值不敏感,GBDT对异常值非常敏感

5、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成

6、随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能

二 非监督学习

2.1 数据降维

① 主成分分析(PCA)

N 维向量降维到 k 维上,优先选取方差最大的地方,

优点:降低数据的复杂性,识别最重要的多个特征。

缺点:主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强;有可能损失有用的信息。

应用场景:语音、图像、通信的分析处理。

② 奇异值分解(SVD)

将复杂矩阵用更小更简单的子矩阵相乘表示,这些矩阵描述的是大矩阵的重要特性

优点:简化数据,去除噪声点,提高算法的结果。

缺点:数据的转换可能难以理解。

应用场景:推荐系统、图片压缩等

③ 文档主题生成模型(LDA)

LDA 文档主题生成模型

④ MDS 降维算法

保证降维后距离最近

2.2 聚类算法

① K-均值聚类(K-Means)

迭代求解的聚类分析算法,采用距离作为相似度指标。

优点:算法简单容易实现。

缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢。

应用场景:图像处理、数据分析以及市场研究等

② DBSCAN 聚类算法

③ SOM 聚类算法

④ LVQ 聚类算法

三 强化学习

① Q-learning

基于值的强化学习算法,根据动作值函数评估应该选择哪个动作,这个函数决定了处于某一个特定状态以及在该状态下采取特定动作的奖励期望值。

优点:可以接收更广的数据范围。

缺点:缺乏通用性。

应用场景:游戏开发

四 其他算法

4.1 偏数类算法

① GMM

高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)

应用场景:图像前景分析

4.2 似然估计算法

① EM 算法(期望最大化算法)【 EM 算法是计算极大似然估计(MLE)的一种特殊算法:含有隐变量的MLE】

是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。

详情:EM 算法

② MLE 算法(极大似然估计)

我写过一篇博文里有介绍,可以切过去

MLE 算法

③ MAP (最大后验概率)

MAP 算法

④ 隐马尔科夫(HMM)

用于描述含有隐藏变量的马尔科夫过程

详情

4.3 梯度下降算法

(梯度下降是机器学习中最常用的算法,但本身不是机器学习算法,而是一种求解最优化的算法,主要解决求最小值的问题)

十种常用的梯度下降算法

① 批量梯度下降(Batch gradient descent)

批量梯度下降又分为小批量梯度下降和批量梯度下降,小批量 是才取少量的数据,一次一次的训练模型

② 随机梯度下降(SGD)

最原始的随机梯度下降算法主要依据当前梯度∂L/∂w乘上一个系数学习率α来更新模型权重w的。

机器学习算法原理 (一)机器学习算法汇总相关推荐

  1. java排序算法原理_排序算法原理与实现(java)

    排序算法原理与实现(java) Java程序员必知的8大排序 [来源:本站 | 日期:2012年12月24日 | 浏览173 次] 字体:[大 中 小] 8种排序之间的关系: 1, 直接插入排序 (1 ...

  2. 神经网络算法原理图解,神经网络算法原理图集

    神经网络算法原理 一共有四种算法及原理,如下所示:1.自适应谐振理论(ART)网络自适应谐振理论(ART)网络具有不同的方案.一个ART-1网络含有两层一个输入层和一个输出层. 这两层完全互连,该连接 ...

  3. 海外某音x-gorgon算法原理分析及算法源码公布

    算法源码见附件 分享一个去年逆的一个海外版某音 1474版本 x-gorgon算法,这里简单介绍一下算法原理,首先malloc出来一个0x1A大小的空间,然后截取用户传入的byte数组中的参数,截取开 ...

  4. RF(随机森林)算法原理及其派生算法

    1.前言 集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Ba ...

  5. 模糊神经网络算法原理,模糊神经网络算法代码

    用matlab做模糊神经网络,步骤是什么? 我知道模糊控制包括:模糊化,模糊推理,清晰化等步骤 20 谷歌人工智能写作项目:神经网络伪原创 求matlab大神帮帮忙,做模糊神经网络预测 用matlab ...

  6. svm算法原理_机器学习——分类算法(1)

    一. K近邻 KNN算法的基本思想就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是 ...

  7. 人工神经网络的算法原理,深度神经网络算法原理

    1.人工智能的工作原理是什么? 人工智能的工作原理是:计算机会通过传感器(或人工输入的方式)来收集关于某个情景的事实.计算机将此信息与已存储的信息进行比较,以确定它的含义.计算机会根据收集来的信息计算 ...

  8. 轮盘赌算法原理(ACO算法概率选择方法)

    蚁群算法作为一种启发式算法,在进行路径选择的过程中,当选择下一目标时,通过轮盘赌概率选择的方式完成,这也保证了每次循环都能随机的命中概率较大的目标.其算法思路如下: 设P(i),其中i=1..n, ...

  9. php选择排序算法原理_PHP排序算法之选择排序

    二.选择排序 原理: 在一列数字中,选出最小数与第一个位置的数交换.然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止.(以下都是升序排列,即从小到大排列) ...

  10. 机器学习之KNN算法原理

    机器学习之KNN算法原理 1 KNN算法简介 2 算法思想 3 多种距离度量公式 ① 欧氏距离(Euclidean distance) ② 曼哈顿距离(Manhattan distance) ③ 闵式 ...

最新文章

  1. java压缩解压缩类实例[转]
  2. Redis主从配置及通过Keepalived实现Redis自动切换高可用
  3. 关于 MySQL LEFT JOIN 你可能需要了解的三点
  4. 容器精华问答 | 我们为什么需要容器?
  5. 从网络访问计算机不能添加用户名,windows7 和 XP 能互相用\\ip访问,但是不能通过计算机名访问...
  6. 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
  7. 【Drools一】值得打工人学习的规则引擎Drools
  8. linux下的C语言开发(网络编程)
  9. Unity3d中的属性(Attributes)整理【转载】
  10. Win10点击声音图标打不开音量调节的解决方法
  11. 泰勒公式、Jenson不等式、切比雪夫不等式
  12. APP赚钱盈利的8大方法
  13. linux cp: 略过目录
  14. Resource leak解决办法
  15. 双语美文|治愈系英文段子,你对人生过敏吗
  16. SMAA算法详解 - SMAADepthEdgeDetectionPS
  17. 如何解除任务管理器被禁用
  18. 东北育才 DAY2组合数取mod (comb)
  19. 汇编学习教程:bx的作用
  20. PIC16F630使用PICkit程序下载使用方法

热门文章

  1. java实现网站统计功能_网站统计功能的设计与实现
  2. ROOT【个人学习,慎用】
  3. 手机的eMMC 5.1、UFS 2.1到底是啥意思?哪个更好?
  4. NGS测序基础梳理03-图解边合成边测序(Sequencing by Synthesis)
  5. 计算机主机的认识500字,电脑的说明文500字
  6. mysql的CURDATE()+1,月末不生效问题
  7. APP适合用什么高防来防御ddos攻击
  8. C++流行的开源框架和库
  9. 麒麟810鸿蒙内核移植,华为鸿蒙 OS 手机适配流程曝光:麒麟 9000 为首批 麒麟810为最后一批...
  10. 学生id号码是什么意思_ID号是什么?