机器学习笔记(一)——模型评估方法与性能度量

机器学习模型评估与预测 模型评估与预测1.1经验误差与过拟合1.2 评估方法1.2.1留出法(hold-out)1.2.2交叉验证法1.2.3 自助法1.3性能度量1.3.1 查准率,查全率与F1 1.1经验误差与过拟合 定义几个概念: ⋅\cdot⋅ 错误率(error rate) E=amE=\frac{a}{m}E=ma​ 其中a表示样本分类错误数,m是样本总数 ⋅\cdot⋅ 精度(accuracy)为1−am1... 阅读详情

目录

1. 机器学习模型的泛化

1.1 经验误差与泛化误差

经验误差,即训练误差,是指学习器在训练集上的误差。与之相对的,学习器在新样本上的误差被称为泛化误差。

学习器总是期望得到最小的泛化误差,但由于新样本的不可知性,我们只能通过在一定程度上降低经验误差的情况下来减小泛化误差。但经验误差也不是越小越好的,在训练集上越准确,经验误差越小,在多数情况下学习器的泛化能力就越有可能下降,反而使泛化误差大幅提高。这就是学习器的过拟合问题。

1.2 过拟合

过拟合:学习器将训练样本中一些自身特点当作所有样本都有的一般性质进行了学习,使得模型的泛化能力下降。

导致过拟合的原因有很多种,最常见的原因是学习器的学习能力太强。过拟合的问题没有办法被彻底解决,只能被优化,如决策树剪枝、正则化等。

要获得比较好的学习器参数,就需要对学习器的泛化能力进行评估,选择泛化误差最小的模型。但因为过拟合的存在,我们不能用经验误差作为标准去推断泛化误差的大小,必须要使用训练集以外的数据作为新样本测试模型的泛化误差。

2. 模型评估方法

我们往往只有一个数据集,既要进行训练,又要进行测试,应该怎么做呢?直观上我们应该将数据集划分成训练集和测试集两个部分。那么转化为下面的问题:假设有一个包含m个样本的数据集 D={ (x1,y1),(x2,y2),...,(x3,y3)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x 3 , y 3 ) } ,对数据集进行怎样的划分才能使训练集能尽可能把模型训练好,并且测试集对模型的评估尽可能准确呢?

2.1 留出法(hold-out)

留出法将数据集D划分为两个互斥集合,其中一个作为训练集S,另一个作为测试集T。在进行训练集和测试集划分的过程中,要注意划分的过程要尽可能保持数据分布在两个集上一致。从采样的角度来说,应该使用分层采样。

划分的过程本身会给训练数据带来不稳定性,因此在使用留出法进行评估时,需要多次随机划分,重复进行实验,将每次实验的评估结果的平均值作为模型的评估结果。

进行划分时,一般取数据集的2/3~4/5的样本作为训练集,通常保留30%的数据作为测试集。

2.2 交叉验证法(cross validation)

交叉验证法将数据集D划分为k个大小相似的互斥子集,每个子集的数据分布尽可能一致,即如留出法一样使用分层采样的方式进行划分。在进行评估时,每次取其中k-1个子集的并集作为训练集,将剩下的子集作为测试集,最终返回k次测试结果的均值。

交叉验证的稳定性和保真性很大程度上取决于k的取值,因此交叉验证法又被称为k-fold cross validation,k折交叉验证。k最常见的取值为10,即把数据集分为10个子集。

与留出法相似的是,子集在划分的过程中会引入不确定性,因此同样需要进行多次随机划分。如常见的10次10折交叉验证需要进行10*10次实验。

当k=m时,是交叉验证法的特例留一法(Leave-One-Out)。将包含m个样本的数据集D划分为m个互斥子集,有且仅有一种划分方法,即每个子集包含1个样本。留一法在训练的结果上更接近于直接将数据集全部用来训练的结果,其评估结果往往被认为是比较准确的。但留一发在面对大数据集时的性能是极其低的,且留一法的评估结果的准确性也未必远高于其他评估方法。

2.3 自助法(bootstrapping)

留出法和交叉验证法在训练集的数量上都小于数据集 D D ,这可能会引入由于规模不同而产生的估计偏差;而留一法的计算复杂度太高,在数据集比较大的时候会消耗大量的计算性能。

自助法是一种以自助采样法为基础的估计方法。自助采样,即可放回采样、可重复采样。使用自助采样法获取数据集 D ′ 的过程如下:每次随机从 D D 中取出一个样本,将其复制到 D ′ 中,然后将该样本放回 D D 中,重复执行m次。可以计算得到,某一个样本在一次采样中没有被取到的概率是 1 − 1 m ,在完整自助采样结束后,没有被取到的概率是 (1−1m)m ( 1 − 1 m ) m ,这是一个递增序列,取极限得到

分类机器学习模型的评估方法及性能度量 当我们创建一个机器学习模型,然后通过该模型输出结果,那我们会不会直接使用这个结果呢? 如果你的答案是:会使用,那你对这个结果完全认可吗? 如果你的答案是否定的,那你对这个结果有哪些疑问呢? 本文从模型评估的方法和性能的度量两个方面来解答以上的疑问,本篇文章主要讨论分类学习模型的评估与性能度量。 模型的评估方法 我们创建的机器学习模型都要通过训练数据来训练模型,为了检测学习模型是否符合我们的要求,就... 阅读详情

相关推荐

评估方法、性能度量和比较检验

机器学习中模型的评估方法、性能度量和结果的检验方法在对算法进行训练时,我们必须要有相应的数据。我们并不能在所有数据上进行训练,否则就没有数据来对算法的性能进行验证了。这就涉及到训练集与测试集划分的问题,即评估方法。算法在训练好了之后,需要将其在数据集上进行测试,如何来衡量测试的结果,这就是性能的度量。有了实验评估方法和性能度量,看起来就能对学习算法的性能进行评估比较了:先使用某种实验评估方法测得学习

tuqinag的专栏 1万+

机器学习笔记三——模型评估与选择2——性能度量(分类问题)

适用于分类问题中的性能度量1、错误率和精度2、查准率,查全率,F13、ROC 与 AUC 对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量 (performance measure)。 性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。这意味着模型的‘好坏’是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。 在预测任务中,给定数据集 D=(x1,y1),(x2,y2),...,(xm,

weixin_45666566的博客 3282

【机器学习基础】性能度量与评估方法

目录 一 性能度量 1.1 留出法 1.2 k折交叉验证 二 评估方法 2.1 精确率(查准率),召回率(查全率)和F1值 2.2 ROC曲线 2.3 PR曲线 2.4 使用场景 三 参考材料 在学习器将模型构造出来之后,我们通常需要进行评估该模型的好坏,因此本文介绍几种评估的方法,在这之前先明确几个定义: 1.训练误差:模型在训练集上的误差,假设模型为,N为训练样本数量,则...

Tuzi_bo的专栏 1077

【机器学习-05】模型的评估与选择

在前面的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程,本章我们将介绍模型训练出来后如何对模型进行评估和选择等。

qq_38614074的博客 1万+

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 380

麒麟和UOS系统编写桌面点击可执行文件

在桌面上创建一个快捷方式(.desktop 文件)来运行脚本。打开文本编辑器,创建一个新文件,如。这可以通过文本编辑器来完成。首先,确保您的脚本具有执行权限。现在,您应该可以双击桌面上的。保存此文件到桌面目录,例如,在桌面上创建一个快捷方式(文件来运行您的脚本了。使用图形界面或命令行给。现在您可以双击桌面上的。为您脚本的实际路径。是您脚本的实际路径。文件来运行您的脚本了。

u013934107的博客 7254

华三模拟器实战:IPSec VPN穿越NAT的完整配置与调试(附常见问题排查)

本文详细解析了华三模拟器中IPSec VPN穿越NAT的完整配置与调试方法,包括基础环境准备、分步配置、ACL协调策略及高级故障排查。通过实战案例和关键参数解析,帮助网络工程师解决IPSec与NAT协同工作的典型问题,提升企业网络安全性。

weixin_33724046的博客 461

CubeMX实战:ETH+LWIP+FreeRTOS网络工程从零搭建与AC6编译优化

本文手把手教你使用STM32CubeMX从零搭建集成以太网(ETH)、LWIP协议栈和FreeRTOS的嵌入式网络工程。文章详细解析了外设配置、协议栈调优、任务规划等关键步骤,并重点分享了如何解决ARM Compiler 6(AC6)的兼容性问题,实现编译速度与稳定性的双重提升,助你快速构建稳定的网络应用原型。

n2o3p4的博客 410

R语言基础之R语言入门

R语言最初是由新西兰奥克兰大学统计系的教授Ross Ihaka和Robert Gentleman在S语言基础上开发完成的。是一门解释性语言。在我看来R语言是一门数学性极强的语言,或者说这是一门为数学而生的语言,因为其具有极其出色的计算与统计分析能力...

weixin_46912400的博客 5万+

BES 平台 SDK之 美格信Dongle 连接

最近项目到了试产阶段,需要用到美格信的Dongel 来测试ANC 相关功能。在此简单介绍下如何连接Dongel 的操作步骤。

谢文浩博客 927

华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 231

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

WW、forever的博客 2157

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 架构学习笔记——缓存篇
zeroized
博客等级 码龄10年 3粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值