第六课 多算法组合与模型调优

本系列是七月算法机器学习课程笔记

文章目录

  • 1 前序工作流程
    • 1.1 数据处理
    • 1.2 特征工程
    • 1.3 模型选择
    • 1.4 交叉验证
    • 1.5 寻找最佳超参数
  • 2 模型优化
    • 2.1 模型状态
    • 2.2 模型优化1
    • 2.3 模型优化2
    • 2.4 模型优化3
    • 2.5 模型优化4:模型融合
      • 2.5.1 bagging
      • 2.5.2 staking
      • 2.5.3 adaboost
      • 2.5.4 Gradient Boosting Tree

1 前序工作流程

1.1 数据处理

1.2 特征工程

这两部分在第五课已经说明了。

1.3 模型选择

在这里插入图片描述

在sklearn中有关于算法选择的路径图。但也不是绝对的。
模型选择有两种含义。
第一种是:选择不同算法。
当拿到一个问题先看属于这4种类型中的哪一种:分类?回归?聚类?降维?例如搜索结果排序,看上去不是上面的任何一种。继续想为什么要排序,排序就是把用户想点的数据放在前面,那就可以将问题看做是分类问题:用户会点的数据和用户不会点的数据。当然也可以看做是回归问题:用户点击数据的概率。
此外还要看数据类型:是文本型数据还是数值型数据。例如分类问题中文本型数据推荐使用朴素贝叶斯算法。数值型可以使用K近邻或者SVM。

第二种是:选择超参数
这就类似于师哥师姐给你介绍了很多学习方法,当用在你自己的具体情况下,究竟该学习多少小时的英语,该用多少小时学习数学。这是需要考虑的。

1.4 交叉验证

交叉验证是用于评估模型超参数的一种方法。
我们将数据集分为训练集和测试集。测试集用于评估模型,只能使用一次,类比于三年只能参加一次高考。
交叉验证最常采用的方法是K折交叉验证。是将训练集分为k份。每次随机选择一份数据用于验证,其余数据用于训练。
例如下图,在给定一组超参数条件下,使用其中1份数据用于评估,4份数据用于训练。做5次训练,得到5个模型的评估结果,求其平均值作为该组参数的验证结果。

在这里插入图片描述

1.5 寻找最佳超参数

寻找最佳超参数有几种方法,常用的是网格搜索交叉验证GridSearchCV。
网格交叉验证就是任意参数要做两两组合。例如C=[1,10,100],gamma=[0.001,0.0001]。那网格交叉验证就可以得到6组超参数。每一组超参数交给交叉验证算法,评估模型效果。
最后选择模型效果最好的那一组参数作为最终模型的超参数。在训练集上训练得到模型作为最终的模型。

此外还有随机搜索交叉验证方法。他们只是组合超参数的方式不同。

在这里插入图片描述

2 模型优化

2.1 模型状态

模型的状态分为:过拟合、欠拟合、合适。
在这里插入图片描述

欠拟合是指模型学习能力弱,不能很好的表达数据。表现特征是在训练集准确率低,在测试集准确率低。

过拟合是指模型学习能力强,学习了噪音数据。表现特征是在训练集准确率高,在测试集准确率低。

训练集准确率随着样本量的增加而减小。原因是当样本量小的时候,模型不是学习而是记忆结果。所以随着样本量增加,训练集准确率降低。
测试集准确率随着样本量的增加而增加。原因是见到的样本多了,自然训练集数据越接近真实世界的数据,能够正确处理的数据也越来越多。
下图中的红线是一条标准线,是理想中想要找到的线。
在这里插入图片描述

在实际工作中,不会画这么麻烦的曲线,时间也不允许。会直接拿数据,看准确率。准确率都低,那基本就是欠拟合。训练集准确率高,测试集准确率低,过拟合。

2.2 模型优化1

如果发生过拟合:
1 采集更多的数据:增加数据会降低噪音数据的影响
2 增大正则化系数

如果发生欠拟合:
1 找更多的特征
2 减小正则化系数

2.3 模型优化2

如果是线性模型(线性回归、逻辑回归、线性SVM),可以分析特征系数。查看绝对值高的特征,看是不是可以做进一步细化,甚至可以做特征组合。

2.4 模型优化3

bad case分析
分析分错了的样本,归类错误原因。
分类问题:看是哪个特征的影响大,有没有共性
回归问题:哪些样本预测结果差距大,为什么?

2.5 模型优化4:模型融合

模型融合(model ensemble)
模型融合是一组独立的模型的组合。如果所有的模型都是同一种算法,称为base leaner。如果模型算法不同,就称为component leaner。

为什么这样是有效的呢?
从统计角度来讲,机器学习就是要找到一种从X到y的映射。这个真实的映射是什么谁都不知道。那如果有多个模型来预测学习的话,可能会更接近真实。

从计算角度来讲,很多优化函数是没有全局最优解,找到的是局部最优解。但是初始化参数不同,可能会落到不同的局部。有多个模型求平均,会接近最终想要的优化局部。

模型融合的方式有三种
1 bagging :群众的力量是伟大的,集体智慧是惊人的。
2 stacking:站在巨人的肩膀上能看得更远。
3 adboost:一万小时定律。

2.5.1 bagging

思路:很多时候模型效果不好是因为过拟合了。怎么解决?如果每次只给部分数据,多找几个模型来做一下,综合一下他们的答案。

过程:如果用同一个算法,每次取一个子集训练一个模型。如果是分类问题,将多个模型的结果做vote,如果是回归问题,将多个模型的结果做平均。如果用不同的算法,用全部数据集训练模型。如果是分类问题,将多个模型的结果做vote,如果是回归问题,将多个模型的结果做平均。

2.5.2 staking

在这里插入图片描述

stacking学习步骤分2步。将训练集分为两部分数据集D1和D2。D1和D2是没有交集的。
第一步,也就是level0,使用数据集D1,学习到多个模型。例如学习到LR、SVM、DT三种模型。
第二步,也就是level1,使用数据集D2和使用上一步的模型,学习到新的模型,作为最终的模型。这个模型如果是线性模型,那可以理解为是前面模型的线性组合。这个模型也可能是其他模型。

通常情况下stacking这个模型能力会非常强,所以第二层的模型一般使用线性模型,例如LR。

2.5.3 adaboost

思路:模型效果不好是因为不够努力,要重复迭代和训练。要多做之前的错题,每次分配给分错的样本更高的权重。用最简单的分类器叠加。
在这里插入图片描述
在这里插入图片描述

2.5.4 Gradient Boosting Tree

思路:从残差中学习

总结:模型融合有三种思路:bagging stacking boosting。
bagging的具体例子是:RandomForest
boosting的具体例子是:Adaboost,GDBT

bagging方式:VotingClassifier、BaggingClassifier、RandomForestClassifier
boosting方式:AdaBoostClassifier

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百二十一期:当新闻报道用上AR 技术,能为读者带来什么?

「有一种名为记忆宫殿的记忆术,要点就是在人脑内建立起虚拟的空间场景,并把各种信息与空间产生联系。如果我们也能为每一起新闻建立起空间的概念,显然也会给读者带来更深刻的印象。」 作者:木斯 大部分新闻都拥有不同的切入视角…

第七章 scikit-learn与机器学习实战

文章目录1 scikit-learn2 一个项目实战2.1 项目目标2.2 划定问题2.3 选择性能指标2.4 核实假设2.5 获取数据2.6 数据探索和可视化、发现规律2.7 为机器学习算法准备数据2.8 选择并且训练模型2.9 模型微调2.10 测试集上测试1 scikit-learn 导航页与算法指南 API:数据…

Erlang注册进程名称-tut16.erl

作 w3cschool erlang 的练习 --------- 1 -module(tut16).2 3 -export([start/0, ping/1, pong/0]).4 5 %% Erlang 注册进程名称6 7 %% ping 进程必须通过某种途径 获得 pong 进程的进程标识符后 8 %% 才能将消息发送给 pong 进程9 10 %% Erlang 提供了 为每个进程提供一个名称…

第一百二十二期:大数据分析:红包先抢好,还是后抢好

本文用matlab程序,模拟微信给10个人发红包,设定次数1亿次,统计每个人抢到的红包,最佳手气和最差手气次数,用以分析红包是应该先抢还是后抢? 作者:景因分析 本文用matlab程序,模拟微信给10个人…

Linux重定向的理解

1 /*2 重定向的实例3 dup2函数4 5  利用filefd来代替STDOUT(标准输出流)&#xff0c;write写入filefd的数据&#xff0c;重定向写出到STDOUT中&#xff1b;6 */7 8 #include <stdio.h>9 #include <sys/stat.h> 10 #include <string.h> 11 #include …

spring mvc学习(30):sessionatrribute存储session数据

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

验证码

金讯教育有一节课讲的是验证码;代码如下&#xff1a; html: <label><input type"text" /><span id"yz" style" background:url(1.png) -10px -15px;width:80px;font-style: italic; height: 20px;border: 1px solid black;display: in…

第九章 隐马尔科夫模型HMM

文章目录1 隐马尔科夫模型定义2 概率计算算法2.1 前向概率2.2 概率计算3 学习算法3.1 EM算法3.2EM在HMM4 预测算法1 隐马尔科夫模型定义 隐马尔科夫模型是一个seq2seq模型。例如词性标注。 时间序列t1t2t3状态序列代词动词名词观察序列我爱机器学习 能够看到的&#xff0c;例…

spring mvc学习(31):原生api

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

如何使用设计模式来构造系统--(7)

(声明:本系列所用的模式都来自GOF23中&#xff0c;本系列并不是讲23种经典设计模式&#xff0c;而是如何去使用这些模式) 在前面的文章中,我们设计完成了员工工资,福利以及按照部门来区分员工,以及遍历统计部门人员成本等业务逻辑,这些设计基本上可以满足我们所设定的场景的…

spring mvc学习(32):原生代码导入

第一种方法 1点击项目--右键---preferences(添加build path) 勾上 第二种方法 2配置pom.xml <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</…

深度学习03-CNN 应用

说明&#xff1a;本系列是七月算法深度学习课程的学习笔记 文章目录1 概述2 图片识别定位3 物体监测3.1 选择性搜索3.2 R-CNN3.3 Fast R-CNN3.4 Faster R-CNN4 语义分割4.1 滑窗处理4.2全卷积神经网络5 代码1 概述 CNN主要任务包含物体识别定位、物体识别、图像分割。 图片识…

【转帖】windows命令行中java和javac、javap使用详解(java编译命令)

windows命令行中java和javac、javap使用详解(java编译命令) 更新时间&#xff1a;2014年03月23日 11:53:15 作者&#xff1a; 我要评论 http://www.jb51.net/article/48380.htm学习一下java 最近重新复习了一下java基础&#xff0c;这里便讲讲对于一个类文件如何编译、运行…

第六课 从词向量到NLP分类问题

文章目录1 nlp的常见任务2 词向量表示2.1 离散表示2.2 分布式表示2.3 NNLM(2013年)2.3.1模型2.3.2特点2.4 Word2Vector&#xff1a;CBOW连续词袋2.4.1 样本处理2.4.2 结构2.4.3 CBOW&#xff1a;层次softmax2.4.4 CBOW&#xff1a;负例采样2.4.5 Word2Vec&#xff1a;skip-gram…

spring mvc学习(34):restful的delete

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

热度3年猛增20倍,Serverless云开发的技术架构全解析

『 作为一个不断发展的新兴技术&#xff0c; Serverless 热度的制高点已然到来。』 或许&#xff0c;Google Trends 所显示的 3 年猛增 20 倍的“ Serverless ” 搜索量&#xff0c;可以佐证 Serverless 在整个行业中的火爆程度。 不仅如此&#xff0c;据 KBV 研究公司新发布的…

第七课 循环神经网络与自然语言处理

文章目录1 循环神经网络1.1 场景与多种应用1.2 RNN网络结构1.2.1为什么需要RNN1.2.2 RNN 结构1.3 多种RNN1.4 BPTT算法1.5 生成模型与图像描述2 LSTM2.1 LSTM2.2 GRU1 循环神经网络 1.1 场景与多种应用 1 模仿论文生成 2 模仿linux内核编写代码 3 模仿小四写论文 4 机器翻译 …

第十二题:设int x=1,float y=2,则表达式x/y的值是:

第十二题 设int x1,float y2,则表达式x/y的值是&#xff1a;&#xff08;&#xff09; A 0 B 1 C 2 D 以上都不是 懵逼树上懵逼果&#xff0c;懵逼树下你和我 首先看到这道题&#xff0c;我是懵逼和绝望的。 首先我们打开评论&#xff0c;看看谁的赞最多&#xff0c;拿…

Linux 安装 lanmp

Lanmp介绍 lanmp一键安装包是wdlinux官网2010年底开始推出的web应用环境的快速简易安装包. 执行一个脚本&#xff0c;整个环境就安装完成就可使用&#xff0c;快速,方便易用,安全稳定 lanmp一键安装包是用shell脚本编写,且是开源的,你也可以根据业务需求,做相应的调整,来安装自…

如何利用Featue对特定的文档库或列表添加listviewtoolbar上的button

名字有点长&#xff0c;实在想不出什么好名字。 我们经常会遇到一个问题&#xff0c;就是需要在某一个列表或者文档库视图画面的listviewtoolbar上添加一个按钮来做一些操作。比如说页面跳转&#xff0c;列表操作等。目前很多人都知道利用Feature来添加这个button&#xff0c;而…