首页 > 其他分享 >白话机器学习笔记(三)评估模型

白话机器学习笔记(三)评估模型

时间:2023-07-19 19:11:18浏览次数:33  
标签:frac limits 白话 笔记 正则 拟合 theta partial 评估

模型评估

在进行回归和分类时,为了进行预测,我们定义了函数\(f_\theta(x)\),然后根据训练数据求出了函数的参数\(\theta\)。

如何预测函数\(f_\theta(x)\)的精度?看它能否很好的拟合训练数据?

image-20230719171157625

我们需要能够定量的表示机器学习模型的精度,这就是模型的评估。

交叉验证

回归问题的验证

把获取的全部训练数据分成两份:一份用于测试,一份用于训练。前者来评估模型。一般3:7或者2:8这种训练数据更多的比例。

如图点击量预测的回归问题

image-20230719171547592

image-20230719171559974

image-20230719171609997

\(f_\theta(x)\)是二次函数拟合效果更好,但考虑测试数据的话,二次函数完全不行。

对于回归,只要在训练好的模型上计算测试数据的误差的平方,再取其平均值即可,假设训练数据有\(n\)个,可以这样计算。

\[\frac1n\sum\limits_{i=1}^n(y^{(i)}-f_\theta(x^{(i)}))^2 \]

对于点击量的回归问题,\(y^{(i)}\)就是点击量,\(x^{(i)}\)就是广告费。

这个值被称为均方误差或者MSE(Mean Square Error)

这个误差越小,精度就越高,模型就越好。

分类问题的验证

数据这样分配

image-20230719172449102

\(\theta^Tx\)是一次函数

image-20230719172529610

若\(\theta^Tx\)更复杂,可能会这样紧贴着训练数据进行分类。

image-20230719172610515

我们是根据图像为横向的概率来分类,分类是否成功就会有下面 4 种情况。

image-20230719172707460

image-20230719172743042

可以这样计算分类的精度

\(Accuracy=\frac{TP+TN}{TP+FP+FN+TN}\)

它表示的是在整个数据集中,被正确分类的数据\(TP\)和\(TN\)所占的比例。

精确率和召回率

有时候只看\(Accuracy\)会出问题

如果数据量极其不平衡

image-20230719173204756

模型把全部数据分类为 Negative,不是好模型,但精度会很高。

所以我们加入别的指标

精确率

\(Precision=\frac{TP}{TP+FP}\)

image-20230719173414397

这个指标只关注 TP 和 FP。根据表达式来看,它的含义是在被分类为 Positive 的数据中,实际就是 Positive 的数据所占的比例

召回率

\(Recall=\frac{TP}{TP+FN}\)

image-20230719173643345

这个指标只关注 TP 和 FN。根据表达式来看,它的含义是在 Positive 数据中,实际被分类为 Positive 的数据所占的比例

基于这两个指标来考虑精度比较好。

但是一个高一个低就不好评估,为此出现判定综合性能的指标F值

\(Fmeasure=\frac{2}{\frac{1}{Precision}+\frac1{Recall}}\)

变形后

\(Fmeasure=\frac{2\cdot Precision\cdot Recall}{Precision+Recall}\)

F值称为F1值更准确

还有带权重的F值指标

\(WeightedFmeasure=\frac{(1+\beta^2)\cdot Precision\cdot Recall}{\beta^2\cdot Precision+Recall}\)

之前的精确率和召回率是以\(TP\)为主进行计算的,也可以以TN为主。

\(Precision=\frac{TN}{TN+FN}\)

\(Recall=\frac{TN}{TN+FP}\)

把全部训练数据分为测试数据和训练数据的做法称为交叉验证

交叉验证中,尤为有名的是K折交叉验证

  • 把全部训练数据分为 \(K\) 份
  • 将 \(K − 1\) 份数据用作训练数据,剩下的 1 份用作测试数据
  • 每次更换训练数据和测试数据,重复进行 \(K\) 次交叉验证
  • 最后计算 \(K\) 个精度的平均值,把它作为最终的精度

假设进行4折交叉验证,那么就会如图这样测试精度。

image-20230719175005740

全部训练数据的量很大,不切实际增大\(K\)值会非常耗时,要确定一个合适的\(K\)值。

正则化

过拟合

只能拟合训练数据的状态被称为过拟合

有几种方法可以避免过拟合

  • 增加全部训练数据的数量
  • 使用简单的模型
  • 正则化

正则化的方法

对于回归问题

\(E(\theta)=\frac12\sum\limits_{i=1}^n(y^{(i)}-f_\theta(x^{(i)})^2\)

向这个目标函数增加一个正则化项

\(R(\theta)=\frac\lambda2\sum\limits_{j=1}^m\theta_j^2\) (\(m\)是参数的个数)

一般不对\(\theta_0\)应用正则化,假如预测函数的表达式为\(f_\theta(x)=\theta_0+\theta_1x+\theta_2x^2\),\(m=2\)意味着正则化的对象参数为\(\theta_1\)和\(\theta_2\)。\(\theta_0\)这种只有参数的项为偏置项,一般不对它进行正则化。

\(\lambda\)是决定正则化项影响程度的正的常数。

\(C(\theta)=\frac12\sum\limits_{i=1}^n(y^{(i)}-f_\theta(x^{(i)})^2\)

\(R(\theta)=\frac\lambda2\sum\limits_{j=1}^m\theta_j^2\)

image-20230719181808107

这正是通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式。

为了防止参数的影响过大,在训练时要对参数施加一些惩罚。

\(\lambda\)是控制正则化惩罚的强度。

\(\lambda=0\),相当于不使用正则化。

\(\lambda\)越大,正则化的惩罚就越严厉。

分类的正则化

\(logL(\theta)=\sum\limits_{i=1}^n(y^{(i)}logf_\theta(x^{i}) +({1-y^{(i)}})log(1-f_\theta(x^{(i)})))\)

分类也是在这个目标函数中增加正则化项就行了。

\(logL(\theta)=-\sum\limits_{i=1}^n(y^{(i)}logf_\theta(x^{i}) +({1-y^{(i)}})log(1-f_\theta(x^{(i)})))+\frac\lambda2\sum\limits_{j=1}^m\theta_j^2\)

对数似然函数本来以最大化为目标,加负号使其变为和回归的目标函数一样的最小化问题,像处理回归一样处理它,只要加上正则化项就可以了。

包含正则化项的表达式的微分

\(E(\theta)=C(\theta)+R(\theta)\)

各部分进行偏微分

\[\frac{\partial E(\theta)}{\partial\theta_j}= \frac{\partial C(\theta)}{\partial\theta_j}+ \frac{\partial R(\theta)}{\partial\theta_j} \]

\(\frac{\partial C(\theta)}{\partial\theta_j}=\sum\limits_{i=1}^n(f_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\)

\(\frac{\partial R(\theta)}{\partial\theta_j}=\lambda\theta_j\)

\(\frac{\partial E(\theta)}{\partial\theta_j}=\sum\limits_{i=1}^n(f_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\lambda\theta_j\)

得参数更新表达式

\(\theta_j:=\theta_j-\eta(\sum\limits_{i=1}^n(f_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\lambda\theta_j)\) \((j>0)\)

这种方法叫L2正则化

还有L1正则化,它的正则化项\(R\)是

\(R(\theta)=\lambda\sum\limits_{i=1}^m|\theta_i|\)

L1 正则化的特征是被判定为不需要的参数会变为 0,从而减少变量个数。而 L2 正则化不会把参数变为 0。二次式变为一次式的例子,用 L1 正则化就真的可以实现了。

L2 正则化会抑制参数,使变量的影响不会过大,而 L1 会直接去除不要的变量。

学习曲线

欠拟合:模型性能很差,没有拟合训练数据的状态

image-20230719184507350

区分过拟合与欠拟合

两种精度都是很差,如何辨别?

image-20230719184730844

随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。只对训练数据拟合得较好,这就是过拟合的特征。

这也叫作高方差。

欠拟合的图像如下

image-20230719184912237

这是一种即使增加数据的数量,无论是使用训练数据还是测试数据,精度也都会很差的状态。

像这样展示了数据数量和精度的图称为学习曲线

标签:frac,limits,白话,笔记,正则,拟合,theta,partial,评估
From: https://www.cnblogs.com/dongdong25800/p/17566507.html

相关文章

  • KMP算法笔记
    1.概念解析前置:将原串称之为文本串,匹配串称之为模式串。KMP的实质其实就是:利用已经匹配的信息,来加速查找的过程。对于暴力解法而言,当我进行模式串匹配时,遇到一个不匹配的字符,那么只能一步一步往下滑动,然后重新匹配。但是对于KMP算法而言,利用到了前缀子......
  • Web前端学习笔记
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>welcometomyworld</ti......
  • FreeType 控制台渲染字形轮廓笔记
    项目里用到了FreeType解析字体,这里只为了更方便入手FreeType,简单读取字体文件,并在控制台绘制制定字符轮廓,以字符A为例:初始化FreeType,加载字体文件#include<freetype2/ft2build.h>#includeFT_FREETYPE_H#include<iostream>#include<math.h>usingnamespacestd;......
  • Learning hard C#学习笔记——读书笔记 07
    1.值类型和引用类型1.1什么是值类型和引用类型值类型:包括简单类型,枚举类型,结构体类型等,值类型通常被分配在线程的堆栈上,变量保存的内容就是实例数据本身引用类型:引用类型实例则被分配在托管堆上,变量保存的是实例数据的内存地址,引用类型主要包括类类型、接口类型、委托类型......
  • java parallelStream 线程堵塞问题笔记
    定义:Stream(流)是JDK8中引入的一种类似与迭代器(Iterator)的单向迭代访问数据的工具。ParallelStream则是并行的流,它通过Fork/Join框架(JSR166y)来拆分任务,加速流的处理过程。最开始接触parallelStream很容易把其当做一个普通的线程池使用,因此也出现了上面提到的开始的时候打标,结束......
  • c++笔记-scoped_lock/unique_lock解析
    目录scoped_lockvsunique_lock灵活性生命周期资源所有权性能对比例源码unque_lockscoped_lockscoped_lockvsunique_lock在C++中,std::scoped_lock和std::unique_lock都是用来管理互斥量(mutex)的RAII(ResourceAcquisitionIsInitialization)类,用于简化多线程编程中的锁管理。它......
  • 字典树(trie) 算法笔记
    P1字典树是什么顾名思义就像一个字典一样,可以查询某单词是否出现,也可以查找同一前缀的单词的个数等等操作。P2字典树的实现字典树是用树来实现的(这不废话吗),如果从根节点走到一个已标记过的节点(后面我们会称它为单词节点)的一条路径就是一个单词。我们定义一下变量(或数组)的表......
  • python笔记:第十章开箱即用的模块
    1.模块import模块名1.1模块就是程序任何python程序都可以作为模块导入,并标明程序(模块)的位置importsyssys.path.append('路径')importhello//在同一文件夹下会在该文件夹里面自动生成一个__pycache__文件夹,包含处理后的文件。(可删除,无影响)在hello.py里面编写函......
  • (笔记)位置式PID与增量式PID区别浅析
    一、PID控制算法 什么是PID PID控制器以各种形式使用超过了1世纪,广泛应用在机械设备、气动设备和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法PID实指“比例proportional”、“积分integral”、“微分derivative”,这三项构......
  • JavaScript 笔记(二)事件循环机制
    一、事件循环机制1.定义:事件循环是JavaScript中一种重要的异步执行机制。2.作用:管理和协调各种异步任务的执行顺序,保证JavaScript代码的执行顺序和预期一致。3.组成部分:3.1主线程(调用栈):执行任务;3.2任务队列:存放异步任务;3.3事件循环......