前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linear Regression/线性回归与正则化(Andrew Ng 机器学习 一 )

Linear Regression/线性回归与正则化(Andrew Ng 机器学习 一 )

作者头像
深度学习思考者
发布2018-01-02 17:40:46
1K0
发布2018-01-02 17:40:46
举报

线性回归

用一个线性函数对提供的已知数据进行拟合,最终得到一个线性函数,使这个函数满足我们的要求(如具有最小平方差,随后我们将定义一个代价函数,使这个目标量化),之后我们可以利用这个函数,对给定的输入进行预测(例如,给定房屋面积,我们预测这个房屋的价格)。 如图所示(得到了一条直线):

这里写图片描述
这里写图片描述

假设我们最终要的得到的假设函数具有如下形式:

这里写图片描述
这里写图片描述

其中,x是我们的输入,theta是我们要求得的参数。

我们的目标是使得此代价函数具有最小值。

为此,我们还需要求得代价函数关于参量theta的导数,即梯度,具有如下形式:

这里写图片描述
这里写图片描述

有了这些信息之后,我们就可以用梯度下降算法来求得theta参数。过程如下:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

关于正则化

线性回归同样可以采用正则化手段,其主要目的就是防止过拟合。因此解决过拟合问题的一种方法就是正则化。 当采用L1正则化时,则变成了LassoRegresion;当采用L2正则化时,则变成了Ridge Regression;线性回归未采用正则化手段。通常来说,在训练模型时是建议采用正则化手段的,特别是在训练数据的量特别少的时候,若不采用正则化手段,过拟合现象会非常严重。L2正则化相比L1而言会更容易收敛(迭代次数少),但L1可以解决训练数据量小于维度的问题(也就是n元一次方程只有不到n个表达式,这种情况下是多解或无穷解的)。 直接用矩阵的运算求出最佳的theta值。套现成公式,就能求得theta。

这里写图片描述
这里写图片描述

X是矩阵,代表训练集,每一行是一个样本的各特征值。y是个向量,对应每个样本的结果值。

梯度下降与Normal Equation的对比:

Gradient Descent

Normal Equation

自定义alpha

不需要定义alpha

循环N次才能得到最佳theta值

不需要任何循环操作

特征个数非常大时,也适用

适用于特征个数小于100000时使用

需要feature scaling

不需要feature scaling

这里提到Feature Scaling,feature scaling的方法可自定义,常用的有: 1) mean normalization (or standardization)   (X - mean(X))/std(X) 2) rescaling (X - min) / (max - min)

附录(编程答案)

斯坦福大学机器学习week2(Linear Regression)编程习题 * plotData.m

代码语言:javascript
复制
function plotData(x, y)
% ====================== YOUR CODE HERE ======================
figure; % open a new figure window
plot(x, y, '+', 'MarkerSize', 10);
xlabel('Population of City in 10,000s');
ylabel('Profit in $10,000s');
% ============================================================
end
  • computeCost.m
代码语言:javascript
复制
function J = computeCost(X, y, theta)
% Initialize some useful values
m = length(y); % number of training examples
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
%               You should set J to the cost.
J = sum((X * theta - y) .^ 2) / (2 * m);
% ==========================================================
end
  • gradientDescent.m
代码语言:javascript
复制
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
% ====================== YOUR CODE HERE ======================
    theta = theta - alpha * (X' * (X * theta - y)) / m
% ============================================================
% Save the cost J in every iteration    
    J_history(iter) = computeCost(X, y, theta);
end
end
  • featureNormalize.m
代码语言:javascript
复制
function [X_norm, mu, sigma] = featureNormalize(X)
% You need to set these values correctly
X_norm = X;
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
% ====================== YOUR CODE HERE ======================
len = length(X);
mu = mean(X);
sigma = std(X);
X_norm = (X - ones(len, 1) * mu) ./ (ones(len, 1) * sigma);
% ============================================================
end
  • normalEqn.m
代码语言:javascript
复制
function [theta] = normalEqn(X, y)
theta = zeros(size(X, 2), 1);
% ====================== YOUR CODE HERE ======================
% ---------------------- Sample Solution ----------------------
theta = pinv(X' * X) * X' * y
% ============================================================
end

备注:视频可以在Coursera机器学习课程上观看或下载:https://class.coursera.org/ml

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线性回归
  • 关于正则化
  • 附录(编程答案)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档