• 训练误差和测试误差
千次阅读
2021-05-03 02:32:06

clc

clear

P= [150,150,190,150,160,172,150,183,150,150,182,148,190,192,150,159,150,150,169,150,159,199,149,179,150,150,189,150,150,198,150,181;

150,150,160,150,191,180,150,182,151,152,185,150,191,159,150,159,149,149,170,150,196,187,148,179,150,149,188,151,151,187,150,170;

150,150,166,150,180,185,150,177,149,150,163,149,159,185,148,169,150,150,180,149,166,167,150,159,149,150,190,149,150,177,151,180;

150,171,188,172,170,150,150,150,150,174,167,186,182,150,150,150,150,168,190,169,179,150,150,150,149,178,160,180,150,150,149,150;

150,160,168,190,189,150,150,150,150,180,159,192,184,147,149,150,150,169,180,189,179,150,149,150,151,190,180,180,150,150,149,150;

150,180,185,192,160,150,150,150,150,172,158,194,154,148,148,150,150,170,188,189,199,149,149,150,150,180,170,199,150,150,150,151;

150,150,150,188,198,150,182,188,150,150,149,158,162,150,167,169,149,150,150,196,178,149,159,199,150,150,150,156,151,150,180,188;

150,150,150,169,180,150,182,190,150,150,150,169,174,150,170,168,150,151,150,196,196,150,178,189,150,150,150,184,149,149,172,187;

150,150,150,174,176,150,190,177,150,150,150,196,175,150,172,179,150,150,149,186,192,150,169,189,149,151,150,191,148,150,181,174;]

T= [1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0;

1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1;

1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0;]

P_test=[150,150,150;

150,150,150;

150,150,150;

180,187,150;

172,180,150;

177,172,150;

150,190,172;

150,190,184;

150,174,180;]

T_test=[1,1,1;

0,0,1;

1,0,0;]

%hiddennum=[5,6,7,8,9,10,11,12,13,14,15];

[inputn,inputps]=mapminmax(P);

[outputn,outputps]=mapminmax(T);

%for i=1:11

net=newff(inputn,outputn,13,{'tansig','logsig'},'trainlm');

%网络参数配置

net.trainParam.epochs=1000;

net.trainParam.goal=0.1;

LP.lr=0.01;

%训练网络

net=train(net,inputn,outputn);

%%测试网络

inputn_test=mapminmax('apply',P_test,inputps);

%disp(['1.使用随机权值和阀值'])

%disp('测试样本预测结果：')

Y1=sim(net,inputn_test)

%y1=mapminmax('reverse',Y1,outputps);

err1=norm(Y1-T_test);

Y2=sim(net,inputn)

%y2=mapminmax('reverse',Y2,outputps);

err11=norm(Y2-T);

%Y(i)=err1;

%end

%figure()

%plot(hiddennum,Y,'-');

disp(['训练样本的仿真误差：',num2str(err11)])

disp(['测试样本的仿真误差：',num2str(err1)])

用于模式分类的，输入9，输出3，训练误差大，测试误差也大，调了参数也不行，还是程序有问题？

更多相关内容
• fit() 方法会返回一个训练期间历史数据记录对象，包含 training error, training accuracy, validation error, validation accuracy 字段，如下打印 # list all data in history print(history.history.keys()) ...
• 训练误差和测试（泛化）误差的区别及其与模型复杂度的关系 https://blog.csdn.net/qq_45832958/article/details/107518718 1.泛化能力： 机器学习的目标是使学得的模型能够很好的适用于新的样本，而不是仅仅在训练...
2. 训练误差和测试（泛化）误差的区别及其与模型复杂度的关系 https://blog.csdn.net/qq_45832958/article/details/107518718

1.泛化能力：
机器学习的目标是使学得的模型能够很好的适用于新的样本，而不是仅仅在训练样本上工作的很好。学得的模型对新样本（即新鲜数据）的适应能力称为泛化能力。
2.误差：学习到的模型在样本上的预测结果与样本的真实结果之间的差 。
训练误差：模型在训练集上的误差。
泛化误差（测试误差）：在新样本上的误差。
显然，我们更希望得到泛化误差小的模型。
3.欠拟合与过拟合
欠拟合：学得的模型训练误差很大的现象。
过拟合：学得的模型的训练误差很小，但泛化误差大（泛化能力较弱）的现象。

泛化误差可分解为偏差、方差与噪声之和，即generalization error=bias2+variance+noise。
“噪声”：描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界，即刻画了学习问题本身的难度。
假定期望噪声为零，则泛化误差可分解为偏差、方差之和，即generalization error=bias2+variance。
“偏差”：描述了模型的期望预测（模型的预测结果的期望）与真实结果的偏离程度。偏离程度越大，说明模型的拟合能力越差，此时造成欠拟合。
“方差”：描述了数据的扰动造成的模型性能的变化，即模型在不同数据集上的稳定程度。方差越大，说明模型的稳定程度越差。如果模型在训练集上拟合效果比较优秀，但是在测试集上拟合效果比较差劣，则方差较大，说明模型的稳定程度较差，出现这种现象可能是由于模型对训练集过拟合造成的。
简单的总结一下：偏差大，说明模型欠拟合；方差大，说明模型过拟合

1、横轴为训练样本数量，纵轴为误差：
首先，我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合，如下图2。模型欠拟合时，在训练集以及测试集上同时具有较高的误差，此时模型的偏差较大；模型过拟合时，在训练集上具有较低的误差，在测试集上具有较高的误差，此时模型的方差较大。模型正常时，在训练集以及测试集上，同时具有相对较低的偏差以及方差。

图一情况下， 两个误差都大 。 = 》欠拟合
图二情况下， 训练误差小，泛化误差大， =》 过拟合
图三情况下， 两个误差都小。 = 》正常

??? 为何蓝色曲线是上升的？

横坐标是样本量， 样本量 = 样本类别数量 * 每个类别的平均样本量

然后，我们想办法解决欠拟合/过拟合。根据上图2，我们发现：当模型欠拟合的时候，我们发现增大训练集，偏差无法降低，无法解决欠拟合问题；当模型过拟合的时候，我们发现增大训练集，方差减小，可以解决过拟合问题。

这说明， 发生过拟合时，模型复杂度高且训练数据量不足。

2、横轴为模型复杂程度，纵轴为误差：
横轴表示模型的复杂程度，增加模型的复杂程度的方法，比如增加特征项、添加多项式等等。
首先，我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合，如下图3。模型在点A处，在训练集以及测试集上同时具有较高的误差，此时模型的偏差较大，模型欠拟合；模型在点C处，在训练集上具有较低的误差，在测试集上具有较高的误差，此时模型的方差较大，模型过拟合。模型复杂程度控制在点B处为最优。

然后，我们想办法解决欠拟合/过拟合。根据上图3，我们发现：当模型欠拟合时，可以增加模型的复杂程度；当模型过拟合时，可以减小模型的复杂程度。
3、横轴为正则项系数，纵轴为误差：
一般情况下，为了限制模型造成过拟合，可以添加正则项（惩罚项）。
首先，我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合，如下图4。模型在点A处，在训练集上具有较低的误差，在测试集上具有较高的误差，此时模型的方差较大，模型过拟合；模型在点C处，在训练集以及测试集上同时具有较高的误差，此时模型的偏差较大，模型欠拟合。模型正则项系数控制在点B处为最优。

然后，我们想办法解决欠拟合/过拟合。根据上图4，我们发现：当模型过拟合时，可以增大模型正则项系数；模型欠拟合时，可以减小模型正则项系数。

这个正则项系数是啥

展开全文
• 原文来自：https://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/...fit() 方法会返回一个训练期间历史数据记录对象，包含 training error, training accuracy, validati...

详细的解释，读者自行打开这个链接查看，我这里只把最重要的说下

fit() 方法会返回一个训练期间历史数据记录对象，包含 training errortraining accuracyvalidation errorvalidation accuracy 字段，如下打印

# list all data in history
print(history.history.keys())

完整代码

# Visualize training history
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
import numpy

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()

# Compile model

# Fit the model
history = model.fit(X, Y, validation_split=0.33, epochs=150, batch_size=10, verbose=0)

# list all data in history
print(history.history.keys())

# summarize history for accuracy
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

展开全文
• 当损失函数给定时，基于损失函数的模型的训练误差(training error)模型的测试误差(test error)就自然成为学习方法评估的标准. 训练误差的大小，对判定给定的问题是不是一个容易学习的问题是有意义的，但本质上不...

## 模型评估与模型选择

当损失函数给定时，基于损失函数的模型的训练误差(training error)和模型的测试误差(test error)就自然成为学习方法评估的标准.

训练误差的大小，对判定给定的问题是不是一个容易学习的问题是有意义的，但本质上不重要。测试误差反映了学习方法对未知的测试数据集的预测能力，是学习中的重要概念，显然，给定两种学习方法，测试误差小的方法具有更好的预测能力，是更有效的方法。

泛化能力(generalization ability): 学习方法对未知数据的预测能力

### 一、 训练误差与测试误差

假设学习到的模型是 Y = f ^ ( X ) Y=\hat f(X) ,训练误差是模型 Y = f ^ ( X ) Y=\hat f(X) 关于训练数据集的平均损失：
R e m p ( f ^ ) = 1 N ∑ i = 1 N L ( y , f ^ ( x i ) ) R_{emp}(\hat f)=\frac{1}{N}\sum_{i=1}^NL(y,\hat f(x_i))
其中N是训练样本容量。

测试误差是模型 Y = f ^ ( X ) Y=\hat f(X) 关于测试数据集的平均损失：
e t e s t = 1 N ′ ∑ i = 1 N ′ L ( y i , f ^ ( x i ) ) e_{test}=\frac{1}{N'}\sum_{i=1}^{N'}L(y_i,\hat f(x_i))
其中 N ′ N' 是测试样本容量。

例如，当损失函数是0-1损失时，测试误差就变成了常见的测试数据集上的误差率(error rate).
e t e s t = 1 N ′ ∑ i = 1 N ′ I ( y 1 ≠ f ^ ( x i ) ) e_{test} = \frac{1}{N'}\sum_{i=1}^{N'}I(y_1\neq \hat f(x_i))
这里 I I 是指示函数(indicator function)，即 y ≠ f ^ ( x ) y \neq \hat f(x) 时为1，否则为0.

相应的，常见的测试数据集上的准确率(accuracy)为
r t e s t = 1 N ′ ∑ i = 1 N ′ I ( y i = f ^ ( x i ) ) r_{test} = \frac{1}{N'}\sum_{i=1}^{N'}I(y_i=\hat f(x_i))
显然，
r t e s t + e t e s t = 1 r_{test}+e_{test}=1

### 二、 过拟合与模型选择

• 当假设空间含有不同复杂度（例如，不同的参数个数）的模型时，就要面临模型选择(model selection)问题。如果在假设空间中存在”真“模型，那么所选择的模型应该逼近真模型。具体地，所选择的模型要与真模型的参数个数相同，所选择的模型的参数向量与真模型的参数向量相近。

• 过拟合（over-fitting）:指学习时选择的模型所包含的参数很多，以致于出现这一模型对已知数据预测得很好，但对未知数据预测的很差的现象。

• 模型选择的目的：避免过拟合并提高模型的预测能力

• 以多项式函数拟合问题为例，说明过拟合与模型选择。这是一个回归问题。

假设给定一个训练集：
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
多项式函数拟合的任务是假设给定数据由M次多项式函数生成，选择一个对已知数据以及未知数据都有很好预测能力的M次多项式函数。

假设给定10个数据点，用0~9次多项式函数对数据进行拟合。

设M次多项式为
f M ( x , w ) = w 0 + w 1 x + w 2 x 2 + ⋅ ⋅ ⋅ + w M x M = ∑ j = 0 M w j x j f_M(x,w)=w_0+w_1x+w_2x^2+···+w_Mx^M=\sum_{j=0}^Mw_jx^j
式中x是单变量输入， w 0 , w 1 , . . . , w M w_0,w_1,...,w_M 是M+1各参数。

首先确定模型的复杂度，即确定多项式的次数；然后再给定的模型复杂度下，按照经验风险最小化的策略，求解参数，即多项式的系数。

求以下经验风险最小化：
L ( w ) = 1 2 ∑ i = 1 N ( f ( x , w ) − y i ) 2 L(w)=\frac{1}{2}\sum_{i=1}^N(f(x,w)-y_i)^2
这时，损失函数为平方损失，系数 1 2 \frac{1}{2} 是为了计算方便。这是最优化问题，将模型与训练数据代入，有
L ( w ) = 1 2 ∑ i = 1 N ( ∑ j = 0 M w j x i j − y i ) 2 L(w)=\frac{1}{2}\sum_{i=1}^N(\sum_{j=0}^Mw_jx_i^j-y_i)^2
w j w_j 求偏导数并令其为0，可得
w j = ∑ i = 1 N x i y i ∑ i = 1 N x i j + 1 , j = 0 , 1 , 2 , . . . , M w_j=\frac{\sum_{i=1}^Nx_iy_i}{\sum_{i=1}^Nx_i^{j+1}}, \quad j=0,1,2,...,M

• 训练误差和测试误差与模型复杂度之间的关系

展开全文
• 今天我就来说说训练误差测试误差、泛化误差到底是什么，区别所在。 对于分类学习算法，我们一般将样本集分为训练集测试集，其中训练集用于算法模型的学习或训练，而测试集通常用于评估训练好的模型对于数据的...
• 请看下图当中的两个例子：分别求训练误差以及测试误差
• 1.泛化能力： 机器学习的目标是使学得的模型能够很好的适用于新的样本，而不是仅仅在训练样本上工作的很好。学得的模型对新样本（即新鲜数据）的适应能力称为泛化能力。...4.误差（训练误差测试误差
• 1、关于偏差方差 偏差：估计结果与真实结果的差距，表征了预测算法的拟合能力 方差：反映的数据之间的离散程度 ...gt; 2、误差 误差 = 偏差+方差 +噪声 在有监督的学习算法中，会用...测试误差指的是在测试集合...
• 最近写代码，由于需要在神经网络类中传入训练样本个数(ps:不知道为什么reduce_mean后的数据总是nan) shape求和,shanchu文件,canshu不变，求梯度needtf
• 欠拟合：与过拟合相反，且在训练和测试集上效果都差 识别方法：从训练集中随机选取一部分样本作为一个验证集，采用k折交叉验证的方式，用训练训练模型的同时在验证集上测试算法结果。在不干预拟合下，随着模型...
• 此外，训练误差是每批训练数据的平均误差。由于你的模型是随着时间而变化的，一个 epoch 中的第一批数据的误差通常比最后一批的要高。另一方面，测试误差是模型在一个 epoch 训练完后计算的，因而误差较小。 ...
• 预测值的期望就好像测试集所有点的中心。 注意 我们在实际中，为评价模型的好坏，从总数据集中抽取一部分作为自己的测试集。上面提到的预测值，是用模型拟合测试数据时得到的预测值。所以我们
• 假设，我们使用ImageNet作为数据集，再从谷歌上搜索类似的同类的图片，有时候效果会很好，有可能是训练误差，而非泛化误差，因为很多ImageNet上的图片，也是谷歌搜索出来的。 训练误差 训练误差是指， 模型在训练...
• 1.我们在实践中针对训练集有训练误差，针对测试集有测试误差，而我们显然更关心的是测试误差。但是实际算法通常都是由训练集模型结合，那么我们如何针对训练集的好坏来体现出测试误差的信息呢？这是我们研究的第一...
• 归一化参数影响测试集准确率
• 相比之下，模型的bias是可以直接建模的，只需要保证模型在训练样本上训练误差最小就可以保证bias比较小，而要达到这个目的，就必须是用所有数据一起训练，才能达到模型的最优解。因此，k-fold Cross Validation的...
• 这种现象乍一看不怎么符合常理，其实并不算罕见，主要问题在于训练和测试集的分布差异可能比较大。 用生活中的例子来类比，平时做卷子的平均得分比正式考试时的的得分要低。这种现象其实很常见，最可能的解释是...
• 2.内容：【含操作视频】MIMO信道最小二乘均方误差matlab仿真,分析训练序列长度MSE的关系 3.用处：用于MIMO信道最小二乘均方误差matlab仿真算法编程学习 4.指向人群：本硕博等教研学习使用 5.运行注意事项： ...
• Error （误差）= Bias（偏差） + Variance（方差） Error反映的是整个模型的准确度，Bias反映的是模型在样本上的输出与真实值之间的误差，即模型本身的精准度，Variance反映的是模型每一次输出结果与模型输出期望...
• 我们需要区分训练误差（training error）泛化误差（generalization error）。通俗来讲，前者指模型在训练数据集上表现出的误差，后者指模型在任意一个测试数据样本上表现出的误差的期望，并常常通过测试数据集上的...
• 1. 数据集的划分小数据... 验证集和测试集的作用深度学习需要大量的数据，我们可能会采用网上爬取的方式获得训练集，容易出现训练验证集、测试集分布不一致的情况，由于验证集的目的就是为了验证不同的算法，选取效
• 增加训练样本数量。 降低模型复杂程度。 增大正则项系数。 采用dropout方法，dropout方法就是在训练的时候让神经元以一定的概率失活。 提前截断（early stopping）。 减少迭代次数。 增大学习率。 添加噪声...
• 过拟合： 模型的训练误差远小于它在测试数据集上的误差。 通过上面的图，可以简单推出： loss不下降，分多种情况：训练集不下降，验证集不下降，本文结合其它博客，做个小的总结： 训练损失与测试损失结果分析 ...
• 问题描述：对于神经网络，在训练集上已经收敛，而测试集上的误差始终维持在一个很大的值，自始至终都不下降； 可能存在的原因分析： 欠拟合 首先排除欠拟合，因为网络在训练集上已经收敛 过拟合 如果出现过拟合...
• 在解释上述现象之前，我们需要区分训练误差（training error）泛化误差（generalization error）。通俗来讲，前者指模型在训练数据集上表现出的误差，后者指模型在任意一个测试数据样本上表现出的误差的
• 由于我们没有任何关于测试扰动的先验信息，所以通常我们所能做的最好的事情就是尝试训练训练分布的随机扰动，希望这些扰动覆盖测试分布。随机梯度下降，dropout，权重噪音，激活噪音，数据增强，这些都是深度学习中...

...