Matlab梯度下降及正规方程实现多变量的线性回归

  如果需要代做算法,可以联系我...博客右侧有联系方式。

一、相关概念

   1.梯度下降

  由于Z= X*theta - y是列向量,所以Z'*Z就是平方和连加,就是2范数;如果Z是矩阵呢,那么Z'*Z的对角线就是Z矩阵每列的2范数。

   2.正规方程(Normal Equation

   θ = (XTX)-1XTY。

二、代码实现

2104,3,399900
1600,3,329900
2400,3,369000
1416,2,232000
3000,4,539900
1985,4,299900
1534,3,314900
1427,3,198999
1380,3,212000
1494,3,242500
1940,4,239999
2000,3,347000
1890,3,329999
4478,5,699900
1268,3,259900
2300,4,449900
1320,2,299900
1236,3,199900
2609,4,499998
3031,4,599000
1767,3,252900
1888,2,255000
1604,3,242900
1962,4,259900
3890,3,573900
1100,3,249900
1458,3,464500
2526,3,469000
2200,3,475000
2637,3,299900
1839,2,349900
1000,1,169900
2040,4,314900
3137,3,579900
1811,4,285900
1437,3,249900
1239,3,229900
2132,4,345000
4215,4,549000
2162,4,287000
1664,2,368500
2238,3,329900
2567,4,314000
1200,3,299000
852,2,179900
1852,4,299900
1203,3,239500

  ......................

%% Clear and Close Figures
clear ; close all; clc
data = load('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y);
% Scale features and set them to zero mean
%不对Y 规范化
[X mu sigma] = featureNormalize(X);
% Add intercept term to X
%为了矩阵的形式(theta0) theta'*X
X = [ones(m, 1) X];
%% ================ Part 2: Gradient Descent ================
alpha = 0.01;
num_iters = 400;
theta = zeros(3, 1);
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);
%convergence : 收敛
% Plot the convergence graph
figure;
%numel  矩阵中元素个数
plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
xlabel('Number of iterations');
ylabel('Cost J');
% Display gradient descent's result
fprintf('Theta computed from gradient descent: \n');
fprintf(' %f \n', theta);
fprintf('\n');
% Estimate the price of a 1650 sq-ft, 3 br house
% ====================== YOUR CODE HERE ======================
% Recall that the first column of X is all-ones. Thus, it does
% not need to be normalized.
price = 0; % You should change this
Xp = [1 1650 3];
Xp = [Xp(1),(Xp(2) - mu(1))/sigma(1),(Xp(3) - mu(2))/sigma(2)];
price = Xp*theta;
fprintf(['Predicted price of a 1650 sq-ft, 3 br house ' ...
         '(using gradient descent):\n $%f\n'], price);
%% ================ Part 3: Normal Equations ================
data = csvread('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y);
% Add intercept term to X
X = [ones(m, 1) X];
% Calculate the parameters from the normal equation
theta = normalEqn(X, y);
% Display normal equation's result
fprintf('Theta computed from the normal equations: \n');
fprintf(' %f \n', theta);
fprintf('\n');
% Estimate the price of a 1650 sq-ft, 3 br house
% ====================== YOUR CODE HERE ======================
price = 0; % You should change this
Xexample = [1 1650 3];
price = Xexample*theta;
fprintf(['Predicted price of a 1650 sq-ft, 3 br house ' ...
         '(using normal equations):\n $%f\n'], price);

  ...............

function [theta] = normalEqn(X, y)
%NORMALEQN Computes the closed-form solution to linear regression
%   NORMALEQN(X,y) computes the closed-form solution to linear
%   regression using the normal equations.
theta = zeros(size(X, 2), 1);
% 1.对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
% 2.对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆
%
% 很多时候你不需要求逆矩阵,例如
% inv(A)*B
% 实际上可以写成
% A\B
% B*inv(A)
% 实际上可以写成
% B/A
% 这样比求逆之后带入精度要高
theta = pinv((X'*X))*X'*y;
end

  ..............

function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
    %theta 是 3*1 是列向量   X的第一列是1 恰好乘以theta0
    % (1*3 X  3*47  -  1*47)'*
    theta = theta - alpha * ((theta'*X'-y')*X)'/m;
    % Save the cost J in every iteration
    J_history(iter) = computeCostMulti(X, y, theta);
end
end

  ..........

function J = computeCostMulti(X, y, theta)
% Initialize some useful values
m = length(y); % number of training examples
J = 0;
J = sum(((theta'*(X')-y').^2))/(2*m);
end

三、结果

  1.代价函数

   2.预测结果

Theta computed from gradient descent:
 334302.063993
 100087.116006
 3673.548451
Predicted price of a 1650 sq-ft, 3 br house (using gradient descent):
 $289314.620338
Theta computed from the normal equations:
 89597.909545
 139.210674
 -8738.019113
Predicted price of a 1650 sq-ft, 3 br house (using normal equations):
 $293081.464335
时间: 2024-11-14 12:43:41

Matlab梯度下降及正规方程实现多变量的线性回归的相关文章

Matlab梯度下降解决评分矩阵分解

for iter = 1:num_iters %梯度下降 用户向量 for i = 1:m %返回有0有1 是逻辑值 ratedIndex1 = R_training(i,:)~=0 ; %U(i,:) * V' 第i个用户分别对每个电影的评分 %sumVec1 第i个用户分别对每个电影的评分 减去真实值 sumVec1 = ratedIndex1 .* (U(i,:) * V' - R_training(i,:)); product1 = sumVec1 * V; derivative1 =

梯度下降从放弃到入门

梯度 在向量微积分中,标量场的梯度是一个向量场.标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率. 在三维直角坐标系中表示为: $$ \nabla \varphi = \left( \frac{\partial \varphi}{\partial x}, \frac{\partial \varphi}{\partial y}, \frac{\partial \varphi}{\partial z}\right) = \frac{\partial \varphi}{\p

【干货】AI 实践者需要掌握的10大深度学习方法:反向传播、迁移学习、梯度下降……

过去10年,人们对机器学习的兴趣激增.几乎每天,你都可以在各种各样的计算机科学课程.行业会议.华尔街日报等等看到有关机器学习的讨论.在所有关于机器学习的讨论中,许多人把机器学习能做的事情和他们希望机器学习做的事情混为一谈.从根本上讲,机器学习是使用算法从原始数据中提取信息,并在某种类型的模型中表示这些信息.我们使用这个模型来推断还没有建模的其他数据. 神经网络是机器学习的一种模型,它们至少有50年历史了.神经网络的基本单元是节点(node),基本上是受哺乳动物大脑中的生物神经元启发.神经元之间的

机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)

版权声明:    本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com.如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任. 前言:    上次写过一篇关于贝叶斯概率论的数学,最近时间比较紧,coding的任务比较重,不过还是抽空看了一些机器学习的书和视频,其中很推荐两个:一个是stanford的machine learning公开课,在verycd可下载,可惜没有翻译.不过还是可以看.另外一个是prml-pattern r

策略梯度下降过时了,OpenAI 拿出一种新的策略优化算法PPO

雷锋网 AI 科技评论按:美国时间7月20日,OpenAI 刚刚通过自己的研究博客介绍了一种新的优化算法 Proximal Policy Optimization(近端策略优化,PPO).据介绍,这种算法用在强化学习中时表现能达到甚至超过现有算法的顶尖水平,同时还更易于实现和调试.所以 OpenAI 已经把PPO作为自己强化学习研究中首选的算法.雷锋网(公众号:雷锋网) AI 科技评论把这篇介绍 PPO 算法的博文编译如下. 图中就是一个 OpenAI 利用 PPO 训练的机器人.它要学习走.跑

机器学习最常用优化之一——梯度下降优化算法综述

梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法.几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现.但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释.这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用. 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的问题与挑战,接着介绍一些如何进行改进来解决这些问题,随后,介绍如何在并行环境中或者分布式环境中

史上最简洁易懂教程 用Excel理解梯度下降

Jahnavi Mahanta:对算法的作用建立直觉性的理解--在我刚入门机器学习的时候,这让我觉得非常困难.不仅仅是因为理解数学理论和符号本身不容易,也因为它很无聊.我到线上教程里找办法,但里面只有公式或高级别的解释,在大多数情况下并不会深入细节. 就在那时,一名数据科学同事介绍给我一个新办法--用 Excel 表格来实现算法,该方法让我拍案叫绝.后来,不论是任何算法,我会试着小规模地在 Excel 上学习它--相信我,对于提升你对该算法的理解.完全领会它的数学美感,这个法子简直是奇迹. 案例

Andrew Ng机器学习公开课笔记 -- 线性回归和梯度下降

网易公开课,监督学习应用.梯度下降  notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 线性回归(Linear Regression) 先看个例子,比如,想用面积和卧室个数来预测房屋的价格  训练集如下  首先,我们假设为线性模型,那么hypotheses定义为  , 其中x1,x2表示面积和#bedrooms两个feature  那么对于线性模型,更为通用的写法为   其中把θ和X看成向量,并且x0=1,就可以表示成最后那种,两个向量

零基础入门深度学习:感应器、线性单元和梯度下降

投稿:Intelligent Software Development 团队介绍:团队成员来自一线互联网公司,工作在架构设计与优化.工程方法研究与实践的最前线,曾参与搜索.互联网广告.共有云/私有云等大型产品的设计.开发和技术优化工作.目前主要专注在机器学习.微服务架构设计.虚拟化/容器化.持续交付/DevOps等领域,希望通过先进技术和工程方法最大化提升软件和服务的竞争力.   无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的