什么是机器学习的过拟合和欠拟合

登录网易通行证
使用网易通行证(含网易邮箱)帐号登录
提交您的投诉或建议
视频画面花屏
视/音频不同步
播放不流畅
登录后才能查看我的笔记
暂时没有笔记!
确定删除笔记?
即将播放下一集,请您保存当前的笔记哦!
对字幕纠错要登录哦!
内容不能少于3个字
机器学习的动机与应用、Logistic类、机器学习的定义、监督学习概观、学习理论概述、非监督学习概述、强化学习概述。
监督学习应用——自主推导,ALVINN系统,线性回归,梯度下降,组梯度下降,随机梯度下降,标准方程推导。
[第3课]欠拟合与过拟合的概念
欠拟合与过拟合的概念,参数化及非参数化算法概念,局部加权回归,对于线性模型的概率解释,Logistic回归,感知器。
本课首先介绍了牛顿方法,可以代替梯度上升算法用来计算 函数的最大值;之后以高斯分布和伯努利分布为例介绍了指 数分布函数族;最后以指数分布函数族为基础,引出了广义 线性模型,可以通过指定概率分布直接推导出模型。
本课首先介绍了一类新的学习算法——生成学习算法,并详 细地介绍了该算法的一个例子:高斯判别分析;之后对生成学习算法与之前的判别学习算法进行了对比;最后介绍了一个适合对文本进行分类的算法——朴素贝叶斯算法,并结合该算法介绍了一种常用的平滑技术——Laplace平滑。
本课首先介绍了两种朴素贝叶斯算法的事件模型,之后介绍了神经网络算法,并在最后介绍了两个重要的概念:函数间隔和几何间隔,基于这两个概念提出了一个线性分类算法:最大间隔分类器算法。该算法用于引出一个非常重要的非线性分类算法:支持向量机。
本课首先提出了原始的优化问题:最优间隔分类器问题,之后介绍了对偶问题的概念和KKT条件,之后基于原始优化问题的对偶问题的分析,介绍了SVM算法。课程的最后对SVM算法进行了评价,以引出下节课对核方法的介绍。
摘要:本讲首先介绍了核的概念——它在SVM以及许多学习算法中都有重要的应用,之后介绍了l1 norm软间隔SVM——它是一种SVM的变化形式,可以处理非线性可分隔的数据,最后介绍了SMO算法——一种高效的可以解决SVM优化问题的算法。
摘要:本讲主要介绍了模型选择中的一种常见现象——偏差方差权衡。为了解释该概念,首先介绍了两个重要的引理——联合界引理和Hoeffding不等式,之后定义了两个重要的概念——训练误差和一般误差,并提出了一种简化的机器学习算法模型——经验风险最小化(ERM)。最后基于这些概念对ERM结果的理论上界进行了证明,并基于上界分析对偏差方差权衡进行了解释。好的,欢迎回来。我今天想开始新的一章。我们今天要讲的是学习理论。在之前,我记得是八讲,你们已经学习了许多学习算法,使得,你们现在已经了解到了一些人工智能领域中最强大的机器学习的工具。你们现在已经能够理论联系实际,将那些强大的学习算法应用到各种问题上,实际上,我希望你们可以马上开始着手于你们的项目。
摘要:本讲首先介绍了VC维的概念——该概念能够将关于ERM一般误差的界的结论推广到无限假设类的情形;之后介绍了模型选择问题——具体介绍了交叉验证方法以及几种变形;最后介绍了特征选择问题——具体介绍了两类方法:封装特征选择和过滤特征选择。
摘要:本讲先介绍了贝叶斯统计和规范化;之后简单介绍了在线学习的概念;之后介绍了机器学习算法设计中的问题诊断技巧;之后介绍了两种分析技巧:误差分析与销蚀分析;最后介绍了两种应用机器学习算法的方式与适用场景。
本讲开始介绍无监督学习的内容。首先介绍了k-means聚类算法;之后介绍了混合高斯模型,它是最大期望算法(EM)的一种特例;之后引入了Jesen不等式,之后利用Jesen不等式引出了EM算法的一般形式。
本讲对混合高斯模型在EM算法下的结论进行了推导,并且介绍了EM算法在混合贝叶斯模型中的应用。最后介绍了因子分析算法。该算法可以进行高维数据下样本数目较少的情况下的模型拟合。
本讲继续上一讲的内容,详细地介绍了因子分析问题对应的EM算法的步骤推导过程,并重点提出了其中应该注意的问题。之后介绍了主成分分析(PCA)的算法原理和主要应用。该算法是一种常用的降低数据维度的算法。
介绍了主成分分析PCA,及举出利用PCA找出相似文档的例子,然后讲了SVD(奇异值分析)。介绍了无监督算法和因子分析。然后介绍ICA(独立成分分析算法),和CDF(累积分布函数),并复习了高斯分布的知识。最后举了几个应用ICA的例子。
本课主要介绍了监督学习、然后引出强化学习的知识,用“使直升机飞翔”的例子阐述强化学习。介绍了马氏决策过程(MDP),由此引出来的两个解决最优策略和最优回报的算法,最后重点介绍了“值迭代”和“策略迭代算法”的实施,以及比较了它们的优缺点。
本节继续介绍马氏决策过程(MDP),以及解决状态MDP的算法,然后主要详细介绍了拟合值迭代算法(fitted value iteration)和近似政策迭代(approximate policy iteration)这两种算法,并通过具体的例子和求解的方式来说明这两种算法。
本讲主要讲,控制NVP算法,谈到非线性动力学系统,之后谈论在动力系统的模型,然后又谈论线性二次型调节控制(linear quadratic regulation control),之后导出一些处理情况的函数。还包含线性模型的建立,非线性模型的线性化的知识。
首先谈了一点强化学习算法,然后引入调试强化学习算法,之后介绍Kalman滤波器 微分动态规划,卡尔曼滤波与LQR控制结合的一种算法(LQG控制算法,线性二次高斯),并比较了高斯分布和卡尔曼滤波的效率问题。
这节课学习和复习了强化学习算法,然后学习了一些POMDPs(部分可观察马氏决策过程)的知识,完全可观察MDP的知识,接下来介绍了策略搜索算法(其中包括两种算法:Reinforced和Pegasus)。最后,介绍了与这门课程相关的一些课程,并给学生提出一些希望。
学校:斯坦福大学
讲师:Andrew Ng
授课语言:英文
类型:计算机 国际名校公开课
课程简介:人工智能的发展到已经进入了一个瓶颈期。近年来各个研究方向都没有太大的突破。真正意义上人工智能的实现目前还没有任何曙光。但是,机器学习无疑是最有希望实现这个目标的方向之一。斯坦福大学的“Stanford Engineering Everywhere ”免费提供学校里最受欢迎的工科课程,给全世界的学生和教育工作者。得益于这个项目,我们有机会和全世界站在同一个数量级的知识起跑线上。
扫描左侧二维码下载客户端咨询(46)
这个概念纠结了一天多,之前也看过,但是感觉还是没有理解本质。
今天又重新看了下斯坦福的视频,写点自己的理解:
机器学习中我们一般都是样本x和标签y,目的是学出一个函数y=f(x)。
这个f(x)是关键,斯坦福的课程里面是这么说,如果训练样本少了,导致f(x)过于简单,叫欠拟合
如果训练样本太多,导致f(x)过于复杂,这样叫做过拟合。
其实这个概念我个人感觉是相对的,过拟合是说f(x)在训练样本上拟合的很好,但是在测试样本上很差
这个叫过拟合,因为他过分拟合了训练样本。
那么欠拟合呢?个人这么理解,f(x)本身对训练样本拟合的就不好,那么在测试样本上同样也造成了很大错误,
那么这个叫欠拟合。
我们继续想,如果一个f(x)对训练样本拟合的很好,同样他也很复杂,但是她对测试样本同样测试的结果很好,
那么他就不叫过拟合,这应该是一个完美的决策函数。
同样的,如果f(x)因为训练样本少,函数很简单,但是她在测试样本上也得到了好的结果,那么同样是一个完美的决策函数。
不存在什么过拟合,欠拟合。
所以我想来想去,感觉应该这么理解,如果f(x) 在大量的测试样本中没有取得很好的结果。也就是误差很大。
但是f(x)在训练样本上结果很好,那么这个是过拟合,过分拟合了训练样本。同样,f(x)在训练样本上拟合的也一般
或者是误差也大,那么就叫欠拟合。
如果这么说,如果f(x) 在大量的测试样本中没有取得很好的结果。那么这个f(x)对测试样本,或者是真实的样本,都应该算欠拟合。
因为拟合的都不好吗。
不知道我这个理解是不是正确。
老师那天问我:
如果f(x)很复杂,样本很少,这个叫什么?
我觉得,这个拟合如果样本少,但是结果很好,那也不算什么欠拟合和过拟合。
如果拟合的不好,那么这个应该是过拟合。因为这个f(x)肯定可以很好的拟合训练样本。
老师说是叫欠拟合,那我认为应该是f(x)相对于这个很少的样本来说是欠拟合(前提是拟合的不好)。
所以我觉得这个过拟合和欠拟合都应该是针对某一个样本来说。
大家觉得理解的对不对?
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:251034次
积分:4021
积分:4021
排名:第5506名
原创:143篇
转载:38篇
评论:281条
(2)(1)(2)(1)(1)(4)(2)(1)(3)(7)(2)(2)(2)(10)(3)(6)(3)(9)(7)(9)(7)(14)(9)(10)(6)(2)(7)(12)(4)(4)(6)(2)(10)(4)(6)机器学习(25)
先贴上作业的答案
linearRegCostFunction.m
function [J, grad] = linearRegCostFunction(X, y, theta, lambda)
%LINEARREGCOSTFUNCTION Compute cost and gradient for regularized linear
%regression with multiple variables
[J, grad] = LINEARREGCOSTFUNCTION(X, y, theta, lambda) computes the
cost of using theta as the parameter for linear regression to fit the
data points in X and y. Returns the cost in J and the gradient in grad
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
grad = zeros(size(theta));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost and gradient of regularized linear
regression for a particular choice of theta.
You should set J to the cost and grad to the gradient.
J=(1/(2*m))*sum((X*theta-y).^2)+(lambda/(2*m))*sum(theta(2:end,:).^2);
n=size(X,2);
A(i,1)=(1/m)*sum((X*theta-y).*X(:,i));
theta(1,:)=0;
B=(lambda/m)*
% =========================================================================
grad = grad(:);
learningCurve.m
function [error_train, error_val] = ...
learningCurve(X, y, Xval, yval, lambda)
%LEARNINGCURVE Generates the train and cross validation set errors needed
%to plot a learning curve
[error_train, error_val] = ...
LEARNINGCURVE(X, y, Xval, yval, lambda) returns the train and
cross validation set errors for a learning curve. In particular,
it returns two vectors of the same length - error_train and
error_val. Then, error_train(i) contains the training error for
i examples (and similarly for error_val(i)).
In this function, you will compute the train and test errors for
dataset sizes from 1 up to m. In practice, when working with larger
datasets, you might want to do this in larger intervals.
% Number of training examples
m = size(X, 1);
% You need to return these values correctly
error_train = zeros(m, 1);
= zeros(m, 1);
% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return training errors in
error_train and the cross validation errors in error_val.
i.e., error_train(i) and
error_val(i) should give you the errors
obtained after training on i examples.
% Note: You should evaluate the training error on the first i training
examples (i.e., X(1:i, :) and y(1:i)).
For the cross-validation error, you should instead evaluate on
the _entire_ cross validation set (Xval and yval).
% Note: If you are using your cost function (linearRegCostFunction)
to compute the training and cross validation error, you should
call the function with the lambda argument set to 0.
Do note that you will still need to use lambda when running
the training to obtain the theta parameters.
% Hint: You can loop over the examples with the following:
for i = 1:m
% Compute train/cross validation errors using training examples
% X(1:i, :) and y(1:i), storing the result in
% error_train(i) and error_val(i)
% ---------------------- Sample Solution ----------------------
%利用X(1:i,:),y(1:i),trainLinearReg(),来训练参数theta
theta=trainLinearReg(X(1:i,:),y(1:i), lambda);
%You should evaluate the training error on the first i training examples (i.e., X(1:i, :) and y(1:i)).
%训练误差计算只用X(1:i,:), y(1:i)
[error_train(i),grad]=linearRegCostFunction(X(1:i,:), y(1:i), theta, 0);
%交叉验证用上所有的验证集,即Xval, yval
%For the cross-validation error, you should instead evaluate on the _entire_ cross validation set (Xval and yval).
[error_val(i),
grad]=linearRegCostFunction(Xval, yval, theta, 0);
% -------------------------------------------------------------
% =========================================================================
validationCurve.m
function [lambda_vec, error_train, error_val] = ...
validationCurve(X, y, Xval, yval)
%VALIDATIONCURVE Generate the train and validation errors needed to
%plot a validation curve that we can use to select lambda
[lambda_vec, error_train, error_val] = ...
VALIDATIONCURVE(X, y, Xval, yval) returns the train
and validation errors (in error_train, error_val)
for different values of lambda. You are given the training set (X,
y) and validation set (Xval, yval).
% Selected values of lambda (you should not change this)
lambda_vec = [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]';
% You need to return these variables correctly.
error_train = zeros(length(lambda_vec), 1);
error_val = zeros(length(lambda_vec), 1);
% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return training errors in
error_train and the validation errors in error_val. The
vector lambda_vec contains the different lambda parameters
to use for each calculation of the errors, i.e,
error_train(i), and error_val(i) should give
you the errors obtained after training with
lambda = lambda_vec(i)
% Note: You can loop over lambda_vec with the following:
for i = 1:length(lambda_vec)
lambda = lambda_vec(i);
% Compute train / val errors when training linear
% regression with regularization parameter lambda
% You should store the result in error_train(i)
% and error_val(i)
for i=1:length(lambda_vec)
lambda=lambda_vec(i);
theta=trainLinearReg(X,y, lambda);
[error_train(i),grad]=linearRegCostFunction(X, y, theta, 0);
[error_val(i),
grad]=linearRegCostFunction(Xval, yval, theta, 0);
% =========================================================================
ex5.m(ex5.m后面包含了作业的可选部分,已全部完成,答案也是对的,有兴趣可以去拷下来实验一下)
%% Machine Learning Online Class
Exercise 5 | Regularized Linear Regression and Bias-Variance
Instructions
------------
This file contains code that helps you get started on the
exercise. You will need to complete the following functions:
linearRegCostFunction.m
learningCurve.m
validationCurve.m
For this exercise, you will not need to change any code in this file,
or any other files other than those mentioned above.
%% Initialization
%% =========== Part 1: Loading and Visualizing Data =============
We start the exercise by first loading and visualizing the dataset.
The following code will load the dataset into your environment and plot
% Load Training Data
fprintf('Loading and Visualizing Data ...\n')
% Load from ex5data1:
% You will have X, y, Xval, yval, Xtest, ytest in your environment
load ('ex5data1.mat');
% m = Number of examples
m = size(X, 1);
% Plot training data
plot(X, y, 'rx', 'MarkerSize', 10, 'LineWidth', 1.5);
xlabel('Change in water level (x)');
ylabel('Water flowing out of the dam (y)');
fprintf('Program paused. Press enter to continue.\n');
%% =========== Part 2: Regularized Linear Regression Cost =============
You should now implement the cost function for regularized linear
regression.
theta = [1 ; 1];
J = linearRegCostFunction([ones(m, 1) X], y, theta, 1);
fprintf(['Cost at theta = [1 ; 1]: %f '...
'\n(this value should be about 303.993192)\n'], J);
fprintf('Program paused. Press enter to continue.\n');
%% =========== Part 3: Regularized Linear Regression Gradient =============
You should now implement the gradient for regularized linear
regression.
theta = [1 ; 1];
[J, grad] = linearRegCostFunction([ones(m, 1) X], y, theta, 1);
fprintf(['Gradient at theta = [1 ; 1]:
[%f; %f] '...
'\n(this value should be about [-15.8.250744])\n'], ...
grad(1), grad(2));
fprintf('Program paused. Press enter to continue.\n');
%% =========== Part 4: Train Linear Regression =============
Once you have implemented the cost and gradient correctly, the
trainLinearReg function will use your cost function to train
regularized linear regression.
Write Up Note: The data is non-linear, so this will not give a great
Train linear regression with lambda = 0
lambda = 0;
[theta] = trainLinearReg([ones(m, 1) X], y, lambda);
Plot fit over the data
plot(X, y, 'rx', 'MarkerSize', 10, 'LineWidth', 1.5);
xlabel('Change in water level (x)');
ylabel('Water flowing out of the dam (y)');
plot(X, [ones(m, 1) X]*theta, '--', 'LineWidth', 2)
fprintf('Program paused. Press enter to continue.\n');
%% =========== Part 5: Learning Curve for Linear Regression =============
Next, you should implement the learningCurve function.
Write Up Note: Since the model is underfitting the data, we expect to
see a graph with &high bias& -- slide 8 in ML-advice.pdf
lambda = 0;
[error_train, error_val] = ...
learningCurve([ones(m, 1) X], y, ...
[ones(size(Xval, 1), 1) Xval], yval, ...
plot(1:m, error_train, 1:m, error_val);
title('Learning curve for linear regression')
legend('Train', 'Cross Validation')
xlabel('Number of training examples')
ylabel('Error')
axis([0 13 0 150])
fprintf('# Training Examples\tTrain Error\tCross Validation Error\n');
for i = 1:m
fprintf('
\t%d\t\t%f\t%f\n', i, error_train(i), error_val(i));
fprintf('Program paused. Press enter to continue.\n');
%% =========== Part 6: Feature Mapping for Polynomial Regression =============
One solution to this is to use polynomial regression. You should now
complete polyFeatures to map each example into its powers
% Map X onto Polynomial Features and Normalize
X_poly = polyFeatures(X, p);
[X_poly, mu, sigma] = featureNormalize(X_poly);
% Normalize
X_poly = [ones(m, 1), X_poly];
% Add Ones
% Map X_poly_test and normalize (using mu and sigma)
X_poly_test = polyFeatures(Xtest, p);
X_poly_test = bsxfun(@minus, X_poly_test, mu);
X_poly_test = bsxfun(@rdivide, X_poly_test, sigma);
X_poly_test = [ones(size(X_poly_test, 1), 1), X_poly_test];
% Add Ones
% Map X_poly_val and normalize (using mu and sigma)
X_poly_val = polyFeatures(Xval, p);
X_poly_val = bsxfun(@minus, X_poly_val, mu);
X_poly_val = bsxfun(@rdivide, X_poly_val, sigma);
X_poly_val = [ones(size(X_poly_val, 1), 1), X_poly_val];
% Add Ones
fprintf('Normalized Training Example 1:\n');
fprintf('
\n', X_poly(1, :));
fprintf('\nProgram paused. Press enter to continue.\n');
%% =========== Part 7: Learning Curve for Polynomial Regression =============
Now, you will get to experiment with polynomial regression with multiple
values of lambda. The code below runs polynomial regression with
lambda = 0. You should try running the code with different values of
lambda to see how the fit and learning curve change.
lambda = 1;
[theta] = trainLinearReg(X_poly, y, lambda);
%[J, grad] = linearRegCostFunction(X_poly_val, ytest, theta, lambda)
% Plot training data and fit
figure(1);
plot(X, y, 'rx', 'MarkerSize', 10, 'LineWidth', 1.5);
plotFit(min(X), max(X), mu, sigma, theta, p);
xlabel('Change in water level (x)');
ylabel('Water flowing out of the dam (y)');
title (sprintf('Polynomial Regression Fit (lambda = %f)', lambda));
figure(2);
[error_train, error_val] = ...
learningCurve(X_poly, y, X_poly_val, yval, lambda);
plot(1:m, error_train, 1:m, error_val);
title(sprintf('Polynomial Regression Learning Curve (lambda = %f)', lambda));
xlabel('Number of training examples')
ylabel('Error')
axis([0 13 0 100])
legend('Train', 'Cross Validation')
fprintf('Polynomial Regression (lambda = %f)\n\n', lambda);
fprintf('# Training Examples\tTrain Error\tCross Validation Error\n');
for i = 1:m
fprintf('
\t%d\t\t%f\t%f\n', i, error_train(i), error_val(i));
fprintf('Program paused. Press enter to continue.\n');
%% =========== Part 8: Validation for Selecting Lambda =============
You will now implement validationCurve to test various values of
lambda on a validation set. You will then use this to select the
&best& lambda value.
[lambda_vec, error_train, error_val] = ...
validationCurve(X_poly, y, X_poly_val, yval);
plot(lambda_vec, error_train, lambda_vec, error_val);
legend('Train', 'Cross Validation');
xlabel('lambda');
ylabel('Error');
fprintf('lambda\t\tTrain Error\tValidation Error\n');
for i = 1:length(lambda_vec)
fprintf(' %f\t%f\t%f\n', ...
lambda_vec(i), error_train(i), error_val(i));
fprintf('Program paused. Press enter to continue.\n');
%%---------------------------------------------------------------------------
%%Optional (ungraded) exercise: Computing test set
theta=trainLinearReg(X_poly,y, lambda);
[error_test,grad]=linearRegCostFunction(X_poly_test, ytest, theta, 0);
fprintf(' %f\n',error_test);
%%-------------------------------------------------------------------------
%%Optional (ungraded) exercise: Plotting learning curves with randomly selected examples
% m=size(X_poly,1);
% X_poly_y=[X_poly,y];
% X_poly_val_y=[X_poly_val,yval];
% lambda=0.01;
% error_train = zeros(m, 1);
% error_val
= zeros(m, 1);
% for i=1:m
error_train_sum=0;
error_val_sum
for k=1:20
rand_seq=round(rand(1,i)*(m-1))+1;%生成i个随机序列 0~m
rand_X_poly_y=X_poly_y(rand_seq,:);
rand_X_poly_val_y=X_poly_val_y(rand_seq,:);
X=rand_X_poly_y(:,1:end-1);
y=rand_X_poly_y(:,end);
Xval=rand_X_poly_val_y(:,1:end-1);
yval=rand_X_poly_val_y(:,end);
theta=trainLinearReg(X,y,lambda);
[error_train_val,grad]=linearRegCostFunction(X, y, theta, 0);
[error_val_val,
grad]=linearRegCostFunction(Xval, yval, theta, 0);
error_train_sum=error_train_sum+error_train_
error_val_sum=error_val_sum+error_val_
error_train(i)=error_train_sum/20;
error_val(i)=error_val_sum/20;
% plot(1:m, error_train, 1:m, error_val);
% title(sprintf('Polynomial Regression Learning Curve (lambda = %f)', lambda));
% xlabel('Number of training examples')
% ylabel('Error')
% axis([0 13 0 100])
% legend('Train', 'Cross Validation')
% fprintf('Polynomial Regression (lambda = %f)\n\n', lambda);
% fprintf('# Training Examples\tTrain Error\tCross Validation Error\n');
%%-------------------------------------------------------------------------
以上就是作业的源代码,接下来是我对于week6的一些总结,总结的顺序主要是根据andrew Ng的PPT来进行的,强烈建议看此节课,非常有用。
一、优化方案
&&&&&&&当建模之后发现使用新的数据进行测试的时候,预测结果非常不理想,这个时候,可以尝试下面的方法进行重新建模:
使用更多的训练数据
尝试使用较少的属性
或者尝试更多的属性
尝试使用属性值的多项式形式
增大常数项参数
减小常数项参数
一般情况下,可以将数据集分为:训练集和测试级 7:3的比例。
利用训练集数据去训练出参数,然后用测试集去测试性能。
过拟合:简单的理解就是参数太多,训练集太少,过拟合的结果是训练误差会非常小,因为我们的参数很多,可以很好的拟合几乎所有的训练数据,但是,过拟合情况下,模型的泛化能力就很差,会导致训练误差比较大。
下面的就是过拟合的一个典型图像:
& & & &其实:一般情况下,数据集应该分为训练集,交叉验证集,测试集,因为,我们能会假设有好几种可能的模型,然后用数据集分别去训练这几个模型,然后利用交叉验证集去选择一个比较好的模型,最后用测试集去测试选出最优模型的性能。
& & & 如果,我们只假设了一个模型,那么就没有选择模型这个过程,那就把数据集分为训练集,测试集就可以了,训练集训练模型,测试集测试模型。
关于训练误差,代价误差,交叉误差的说明。
注:我们在训练模型的过程中,要使用代价函数,我们使用的代价函数必须是上面这个式子,如果,你加入了正则化的话,一定要加入正则項。
但是,我们在模型训练完,计算训练误差,交叉验证误差,测试误差的时候,即使有正则化参数,也不必加进去,只需按照上面的式子计算各种误差即可,很容易理解,就是比较训练结果与实际结果的差异。
现在开始讲述:偏差(Bias)和方差(variance)的概念
解释:偏差就是欠拟合,简单来讲就是参数太少,数据太多,不足以拟合参数,欠拟合情况下,训练误差会比较大,测试误差也会比较大。
& & & & & 方差就是过拟合,简单来说就是参数太多,训练数据太少,参数过分拟合数据,导致泛化能力非常差,过拟合情况下,训练误差比较小,但是因为模型没有泛化能力,所以,测试误差会比较大。
解释: &左图就是参数太少,不足以拟合训练数据的情况-欠拟合。
& & & & & & 右图就是参数太多,过分拟合训练数据的情况 & -过拟合
& & & & & & 中图刚好合适,即比较好的拟合数据,又具有较好的泛化能力。
解释:继续解释上面的那个多项式拟合,d代表拟合的参数的个数,我们关注一下训练误差曲线Jtrain(θ)和交叉验证曲线Jcv(θ),随着
d的增大,我们用更多的多項式,参数来拟合训练数据,刚开始d比较小时,是欠拟合,训练误差会比较大,当d增大时,就会拟合得越来越好,所以,我们看到训练误差曲线是呈下降的趋势。
& & & & 对于交叉验证曲线,d比较小是,欠拟合状态,模型拟合效果很差,所以,交叉验证误差会比较大,当d增大时,交叉验证误差会先逐渐减少,但是,当d过分大时,就进入了过拟合状态,模型的泛化能力也会比较差,所以,交叉验证误差又会逐渐增大。
所以,交叉验证误差的谷点,最小值就是我们该选择的d值。
接下来是关于学习曲线的绘制,只有绘制学习曲线,能帮助我们选择参数和判断算法现在是处于什么状态,高偏差(欠拟合),高方差(过拟合),或者两者都有。
解释:正则化参数的大小是来调节过拟合,欠拟合状态的,正则化参数是抑制参数大小的因子,当正则化参数比较大时,模型的参数值会变得比较小,极端情况下,很多参数会变零。就导致了欠拟合状态。
& & & & & 当正则化参数比较小时,其抑制参数大小的能力就几乎等于没有,所以,如果本身模型的参数比较多,那么就容易进入过拟合状态。
& & & & & &左图对应的是large lambda 欠拟合
& & & & & &右图对应的是small lambda 过拟合
& & & & & &
解释:此学习曲线,训练误差和交叉验证误差关于正则化参数的学习曲线。
& & & & & 当lambda比较小是,是过拟合状态,所以,训练误差比较小,随着lambda的增大,进入了欠拟合状态,训练误差增长,所以
Jtrain(θ)是上升的曲线。
& & & & & 当lambda比较小时,过拟合,所以泛化能力差,交叉验证误差会比较大,当lambda比较大时,欠拟合,交叉验证误差也会比较大,所以交叉验证误差曲线Jcv(θ)是抛物线型的曲线(理想情况下)。
& & & & & 所以,合适的lambda还是对应Jcv(θ)的谷点。
接下来要讲述的是训练误差关于训练样本规模的学习曲线
& & & & &先讲结论,对应高偏差(欠拟合)情况下,增加样本的规模对于提高模型的性能其实一点帮助都没有,因为模型本身拟合得不好,增加数据集没用,本来就处于参数过多,样本过少的情况,增加训练样本,只会增大欠拟合的程度。
& & & & 当处在高方差(过拟合)情况下,增加样本的规模对于提高模型的性能是有帮助的,因为过拟合是处在参数过多,样本过少的情况下,所以,增加样本的数目对于改善过拟合情况是非常有帮助的。
解释:对于high bias情况下,从error-m图中可以看出,随着训练样本m的增大,交叉验证误差很快就达到水平,下降极其缓慢,
所以,增加样本的规模也无济于事。总结,对于high bias的情况,Jtrain(θ)和Jcv(θ)都会比较大,且比较靠近。
解释:对于高方差的情况下,Jtrain(θ)是缓慢增长的,且数值比较小。而Jcv(θ)会比较大,随着样本规模的增大,持续下降,说明一点,在高方差情况下,Jtrain(θ)和Jcv(θ)还是有一段距离(gap)的。所以增大样本的规模,会减少Jcv(θ)。
当我们画出了曲线,诊断出高方差还是高偏差的问题时,那么就要对症下药了。下面提供,对待不同问题该使用的方法:
1、使用更多的训练样本 & & &-解决过拟合问题
2、使用更少的特征 & & & & & & -解决过拟合问题
3、使用更多的特征 & & & & & & -解决欠拟合问题
4、增加使用多项式 & & & & & & -解决欠拟合问题
5、减小正则参数lambda & &-解决欠拟合问题
6、增大正则参数lambda & &-解决过拟合问题
接下来就是关于神经网络的学习曲线
解释:神经网络除了可以画出 代价函数-样本规模 &代价函数-正则参数 &的学习曲线,还可以画出 代价函数-隐层结点数 &代价函数-层数的学习曲线。
& & & & &神经网络也要使用正则参数去调节过拟合问题,如果神经网络的层数过多,隐层结点数过多,会导致过拟合,实际上会倾向于使用比较大型的神经网络,然后用正则参数lambda来调节过拟合。
& & & & &&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:51300次
积分:2020
积分:2020
排名:第14017名
原创:153篇
转载:33篇
(3)(2)(6)(1)(2)(1)(2)(7)(16)(6)(5)(1)(2)(3)(13)(12)(21)(15)(36)(23)(9)

我要回帖

 

随机推荐