九种机器学习模型的简单介绍-程序员宅基地

技术标签: 机器学习  

学习分类

根据数据标记分类

  1. supervised learning 监督学习

    • 训练集中的目标是由人标注的
  2. unsupervised learning 无监督学习

    • 输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。
  3. SEMI-SUPERVISED learning 半监督学习

    • 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning)。

    • 半监督学习可进一步划分为纯(pure)半监督学习和直推学习(transductive learning),前者假定训练数据中的未标记样本并非待测的数据,

      而后者则假定学习过程中所考虑的未标记样本恰是待预测数据,学习的目的就是在这些未标记样本上获得最优泛化性能。

根据应用类型分类

​ 1.REINFORCEMENT learning 强化学习

​ 2.TRANSFER LEARNING 迁移学习
在这里插入图片描述

一、线性回归

二、逻辑回归

优点:计算事件概率,能减少极端值的影响

缺点:是由时间的线性分布转化为概率来进行判断,所以只适合线性分布的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GyciRCqj-1597824699351)(C:\Users\Free\AppData\Roaming\Typora\typora-user-images\image-20200819104518451.png)]

实际上我们会采用更多的方法对逻辑回归的结果进行评估

如:精确度,混淆矩阵confusion matrix,f-score

三、K临近算法:环境会影响决策

K-NEAREST NEIGHBOR

step1:找到待测样本周围最近的已知样本点,这一步需要定义空间、距离公式

step2: 录入样本点信息

step3:找最近的k个样本点

step4:找到最近的k个样本点中,哪个类别最多

k临近算法和逻辑回归都是做分类问题

KNN只关注待测样本的局部分布,所以不需要用到loss函数(交叉熵函数)

逻辑回归则关注是对全局分布

KNN还可以用来做推荐系统

优点:

  1. 直观,好解释
  2. 局部分布,不需要估算整体

缺点:

  1. 局部估算可能不符合全局的分布
  2. 不能计算概率
  3. 对K的取值非常敏感

通常为了保证一个合理的K的取值,我们会采取交叉验证(cross-validation)找到哪个K的设置会保证最优的估算

四、决策树

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

决策树的生成算法有ID3, C4.5和C5.0等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。

决策树生成的主要分为两步:

step1:节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个

子节点(如不是二叉树的情况会分成n个子节点)

step2: 阈值的确定:选择适当的阈值使得分类错误率最小 (Training Error)。

比较常用的决策树有ID3,C4.5和CART(Classification And Regression Tree),CART的分类效果一般优于其他决策树。下面介绍具体步骤。

ID3: 由**增熵(Entropy)**原理来评估当前条件下的所有情况并决定哪个做父节点,那个节点需要分裂。

对于一组数据,熵越小说明分类结果越好。熵定义如下:

Entropy=- sum [p(x_i) * log2(P(x_i) ]

其中p(x_i) 为x_i出现的概率。假如是2分类问题,当A类和B类各占50%的时候,

Entropy = - (0.5log_2( 0.5)+0.5log_2( 0.5))= 1

当只有A类,或只有B类的时候,

Entropy= - (1*log_2( 1)+0)=0

所以当Entropy最大为1的时候,是分类效果最差的状态,当它最小为0的时候,是完全分类的状态。因为熵等于零是理想状态,一般实际情况下,熵介于0和1之间。

熵的不断最小化,实际上就是提高分类正确率的过程。

决策树是否能用来做回归问题呢?

五、梯度下降法

梯度下降(gradient descent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。

梯度是一个向量,具有大小和方向。想象我们在爬山,从我所在的位置出发可以从很多方向上山,而最陡的那个方向就是梯度方向。
对函数 f(x1,x2,…,xn)f(x1,x2,…,xn) 来讲,对于函数上的每一个点 P(x1,x2,…,xn)P(x1,x2,…,xn),我们都可以定义一个向量 {∂f∂x1,∂f∂x2,…,∂f∂xn}{∂f∂x1,∂f∂x2,…,∂f∂xn},这个向量被称为函数 ff 在点 PP 的梯度(gradient),记为 ∇f(x1,x2,…,xn)∇f(x1,x2,…,xn) 。函数ff在PP点沿着梯度方向最陡,也就是变化速率最快。比如对于二元函数 f(x,y)f(x,y)来讲,我们先将函数的偏导数写成一个向量 {∂f∂x,∂f∂y}{∂f∂x,∂f∂y},则在点 (x0,y0)(x0,y0)处的梯度为 {∂f∂x0,∂f∂y0}{∂f∂x0,∂f∂y0}。
梯度方向是函数上升最快的方向,沿着梯度方向可以最快地找到函数的最大值,而我们要求误差的最小值,所以在梯度下降中我们要沿着梯度相反的方向。

  1. 梯度下降只能知道导数方向,并不知道最优点的距离,所以我们需要手动设定一个步长,他对学习率很敏感
  2. 不能保证全局最优性

六、Kmeans 物以类聚

是无监督学习

  1. 随机从数据集中选取K个样本当做centroids
  2. 对于数据集中的每个点,计算它距离每个centroid的距离,并把它归为距离最近的那个cluster
  3. 更新新的centroid位置
  4. 重复2.3,知道centroid的位置不再改变

优点:非监督类的算法不需要样本的标注信息

缺点:

  1. 不能利用到数据的标注信息,意味着模型的性能不如其他监督学习

  2. 对于K的取值,也就是你认为数据集中的样本应该分为几类,这个参数的设置极为敏感

七、向量支持机

在这里插入图片描述

目的是找到分界面,并最大化这个间距

即等于最小化间距倒数的平方

SVMLOSS FUNCTION: Loss(β)= ||β||^2/2

所以也叫大间隔分类器

优点:

  1. 是强分类器,能保证最大化区分两个类别,所以模型的性能优异

缺点:

  1. Hard-margin SVM是线性分类器不能处理不同类别相互交融情况

  2. 在这种情况下可以强制允许对于一些错误样本的分类来保持大体上的容错率

    这就是 SOFT_MARGINSVM

  3. 分类器,不可用于求解线性完全不可分的情况 当出现这种情况时,会引入KERNEL,来把数据映射到更高的维度,用线性超平面去使用。

在这里插入图片描述

八、随机森林

是一种集成学习中Bagging类型算法(Bootstrap Aggregation

)即引导聚合类算法,内部是多个弱监督模型结合,这类算法不专注于解决困难样本,所以模型的Performance往往会受限,集成学习中的另一种算法Boosting,即可解决这种缺点。

森林意思是模型中包含很多决策树

随机意思是从数据集中采用以训练模型中的每颗决策树(即看问题角度不一样)

设计步骤:

  1. 预设模型的超参数,几棵树,分几层?

  2. 随机采用,训练每个决策树

  3. 输入待测样本到每个树中,再将每个树的结果整合

    求均值或者求众数

    优点:

    1. 模型随机性很强,不容易overfit,但是抗噪性强,表示对异常点outlier不敏感
    2. 处理高位数据相对更快
    3. 树状结构,模型可解释度高,可以告诉你每个特征的重要性

    缺点:

    ​ 模型往往过于General不具备正确处理过于困难的样本的能力

九、Adaboost

可以解决随机森林的问题,一句话总结特点,前人栽树,后人乘凉!

ADABOOST:自适应增强算法

后一个模型的训练永远是在前一个模型的基础上完成的,是顺序,级联的结构

step1:对于训练每个weak learner计算样本困难度

  1. 初始化所有样本的困难度为 wi= 1/N
  2. 利用当前weak learner的训练结果 更新所有样本的困难度,如果正确则减少困难反正增加
  3. 然后在这个基础上训练下一个模型

step2:学习每个weak learner的权重

​ 然后权限*输出整合起来

优点

  1. 顺序,级联的结构+利用权重组合结果擅长解决困难问题
  2. 模型性能的天花板高

缺点:

  1. 容易Overfit
  2. 对于异常点Outlier过于敏感,模型的性能起点低
  3. 速度慢
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43263481/article/details/108103408

智能推荐

stanford-corenlp显示句子依存关系_stanford corenlp 标注结果没有依存关系-程序员宅基地

文章浏览阅读1k次。在命令行中运行下面这行代码:(引号里面要改为自己的stanford-corenlp所在目录)java -mx4g -cp "F:\资源\stanford-corenlp-full-2018-10-05/*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000或java -Xmx4g -cp "F..._stanford corenlp 标注结果没有依存关系

UE4 Sequencer基础入门笔记_ue sequencer-程序员宅基地

文章浏览阅读7.8k次,点赞5次,收藏43次。目录基础概念快速入门进阶设置基础概念 Sequencer 编辑器使用户能够用专业的多轨迹编辑器(类似于Matinee )创建游戏内过场动画。通过创建 关卡序列(Level Sequences) 和添加 轨迹(Tracks),用户可以定义各个轨迹的组成,轨迹可以包含动画(Animation)(用于将角色动画化)、变形(Transformation)(在场景中移动各个东西)、音频(Audio)(用于包括音乐或音效)和数个其他轨迹(Track)类型等 Sequencer通过添加关键_ue sequencer

函数被多次定义解决办法(亲自帮同学解决了这个问题)-程序员宅基地

文章浏览阅读5.6k次,点赞2次,收藏5次。函数被多次定义的问题总是一直困扰着我,每次都耗费我大量的时间和精力去处理,实在令我头疼解决办法:编写一个头文件(里面放置你的一些函数和变量的声明),在你的.cpp文件中#include “XX.h”这样使得你的工程能通过编译,最后编译器在XX.h寻找其中函数定义时,会去每个文件中查找相关的函数定义。出现问题的原因另外函数重定义的原因是,在多个文件中直接包含了有同一个函数定义的文件,这样链接的时候就会出问题,就会报告多个函数定义,原因不用我细说也懂..._被多次定义

web服务器项目常见面试题目(C++)_webserver面试-程序员宅基地

文章浏览阅读1.9w次,点赞87次,收藏439次。项目介绍1、为什么要做这样一个项目?2、介绍下你的项目_webserver面试

AndroidX的库在哪里下载(AndroidStudio)_androidx.jar-程序员宅基地

文章浏览阅读6.8k次。AndroidXAndroidX 是对 android.support.xxx 包的整理后产物。由于之前的 support 包过于混乱,所以,Google 推出了AndroidX。在后续版本中,会逐步放弃对 support 的升级和维护,所以,我们必须迁移到 AndroidX 。如何迁移到AndroidX在 AndroidStudio 3.2 或更高版本(截图中 AndroidStudio..._androidx.jar

Linux bash(bash shell) 特性_bin bash 操作liunx 命令-程序员宅基地

文章浏览阅读541次,点赞22次,收藏16次。最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

随便推点

AAC 音频编码保存和解码播放_编码后的aac数据如何保存-程序员宅基地

文章浏览阅读1.3k次。一. 编码器 MediaCodecMediaCodec 是 Android 提供的用于对音频进行编解码的类,属于硬编解。MediaCodec 在编解码的过程中使用了一组缓冲区来处理数据。如下图所示:基本使用流程如下:// 1 创建编解码器MediaCodec.createByCodecName() // createEncoderByType , createDecoderByType// 2 配置编解码器configure(@Nullable MediaFormat format, @Nu_编码后的aac数据如何保存

Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException‘ exception_unable to evaluate the expression method threw 'or-程序员宅基地

文章浏览阅读2.5k次。问题描述在以jpa的方式访问oracle数据库时发现关联表的数据查询不到解决方法大体意思是:hibernate的懒加载出现异常,由于seesion被释放了。自己调试了发现是在找下一级关系的时候,无法找到目标实体类导致的。网上找过一些方法都是让你把hibernate实体映射的由fetch=FetchType.LAZY改为这种FetchType.EAGER但是也是无补于事。看到stackoverflow上一个解决方案在service层的方法添加@Transactional开启事务,最后完美解决了_unable to evaluate the expression method threw 'org.hibernate.lazyinitializa

css3新增属性有哪些?css3中常用的新增属性-程序员宅基地

文章浏览阅读9k次,点赞2次,收藏31次。**一、css3新增边框属性**1、css3新增属性之border-color:为边框设置多种颜色p {border-style:solid;border-color:#ff0000 #0000ff;} 需要注意:“border-width” 属性如果单独使用的话是不会起作用的。请首先使用 “border-style” 属性来设置边框。2、css3新增属性之border-image:图片边框div {-webkit-border-image:url(border.png) 30 30 r_css3新增属性

ANSYS错误提示:An unknown error occurred during solution. Check the Solver Output on the Solution ...-程序员宅基地

文章浏览阅读1.6w次。An unknown error occurred during solution. Check the Solver Output on the Solution Information object for possible causes._an unknown error occurred during solution. check the solver output on the so

VUE项目里配置eslint less-程序员宅基地

文章浏览阅读1.8k次。VUE项目里配置eslint lessless安装 less 和less-loader ,npm install less less-loader --save**修改webpack.base.config.js文件,配置loader加载依赖,让其支持外部的less,在原来的代码上添加 // 此种方法在控制台中标签样式显示的是style标签样式{ test: /\.less$/, loader: "style-loader!css-loader!less-loader",}_eslint less

SpringSecurity6 | 核心过滤器-程序员宅基地

文章浏览阅读1.4w次,点赞27次,收藏21次。大家好,我是Leo哥,上一节我们通过源码剖析以及图文分析,了解了关于委派筛选器代理和过滤器链代理的原理和作用。这节课我们接着学习SpringSecurity的过滤器,了解SpringSecurity中都有哪些核心过滤器。好了,话不多说让我们开始吧。以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

推荐文章

热门文章

相关标签