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

线性回归

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

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

其中,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

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
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
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
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
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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小鹏的专栏

一个隐马尔科夫模型的应用实例:中文分词

什么问题用HMM解决 现实生活中有这样一类随机现象,在已知现在情况的条件下,未来时刻的情况只与现在有关,而与遥远的过去并无直接关系。 比如天气预测,如果我...

2867
来自专栏量化投资与机器学习

【独家】周志华教授gcForest(多粒度级联森林)算法预测股指期货涨跌

公众号特约编辑 / 一心想错 / 独家 gcForest Algorithm 对于周志华教授的文章,网上已经有人做出很详细的解释啦。我们对论文进行简单描述之后,...

3768
来自专栏机器之心

教程 | 如何使用贪婪搜索和束搜索解码算法进行自然语言处理

2665
来自专栏数说工作室

【分类战车SVM】第六话:SMO算法(像smoke一样简单!)

我有一双神奇的解题小手,不断的化简——代入——化简——代入,不断的迭代——搜索——迭代——搜索,咦,答案出来了!!! 本集大纲: 1.回顾 2.处理奇葩值 3...

3595
来自专栏量化投资与机器学习

【Python机器学习】数据预处理——图像压缩与线性代数

现在有一张朱迪的照片,这张照片有500多列的像素点构成,但是大部分地方都是白色的,相互没有什么差别,也就是说图像中有很多列都是相互线性相关的,这些列向量对我们接...

2007
来自专栏PaddlePaddle

【词向量】 噪声对比估计加速词向量训练

导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

3917
来自专栏郭耀华‘s Blog

Batch Normalization&Dropout浅析

一. Batch Normalization 对于深度神经网络,训练起来有时很难拟合,可以使用更先进的优化算法,例如:SGD+momentum、RMSProp、...

2646
来自专栏AI科技大本营的专栏

教程 | 用AI生成猫的图片,撸猫人士必备

编译 | 小梁 【AI科技大本营导读】我们身边总是不乏各种各样的撸猫人士,面对朋友圈一波又一波晒猫的浪潮,作为学生狗和工作狗的我们只有羡慕的份,更流传有“吸猫...

4159
来自专栏有趣的Python

6- 深度学习之神经网络核心原理与算法-学习率

902
来自专栏李智的专栏

Deep learning基于theano的keras学习笔记(3)-网络层

1.3 Dropout层 为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层...

1162

扫码关注云+社区