%% 方法一:梯度下降法
x = load('E:\workstation\data\ex3x.dat');
y = load('E:\workstation\data\ex3y.dat'); x = [ones(size(x,1),1) x];
meanx = mean(x);%求均值
sigmax = std(x);%求标准偏差
x(:,2) = (x(:,2)-meanx(2))./sigmax(2);
x(:,3) = (x(:,3)-meanx(3))./sigmax(3); figure
itera_num = 100; %尝试的迭代次数
sample_num = size(x,1); %训练样本的次数
alpha = [0.01, 0.03, 0.1, 0.3, 1, 1.3];%因为差不多是选取每个3倍的学习率来测试,所以直接枚举出来
plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'}; theta_grad_descent = zeros(size(x(1,:)));
for alpha_i = 1:length(alpha) %尝试看哪个学习速率最好
theta = zeros(size(x,2),1); %theta的初始值赋值为0
Jtheta = zeros(itera_num, 1);
for i = 1:itera_num %计算出某个学习速率alpha下迭代itera_num次数后的参数
Jtheta(i) = (1/(2*sample_num)).*(x*theta-y)'*(x*theta-y);%Jtheta是个行向量
grad = (1/sample_num).*x'*(x*theta-y);
theta = theta - alpha(alpha_i).*grad;
end
plot(0:49, Jtheta(1:50),char(plotstyle(alpha_i)),'LineWidth', 2)%此处一定要通过char函数来转换
hold on if(1 == alpha(alpha_i)) %通过实验发现alpha为1时效果最好,则此时的迭代后的theta值为所求的值
theta_grad_descent = theta
end
end
legend('0.01','0.03','0.1','0.3','1','1.3');
xlabel('Number of iterations')
ylabel('Cost function') %下面是预测公式
price_grad_descend = theta_grad_descent'*[1 (1650-meanx(2))/sigmax(2) (3-meanx(3)/sigmax(3))]' %%方法二:normal equations
x = load('E:\workstation\data\ex3x.dat');
y = load('E:\workstation\data\ex3y.dat');
x = [ones(size(x,1),1) x]; theta_norequ = inv((x'*x))*x'*y
price_norequ = theta_norequ'*[1 1650 3]'
 %% 方法一:梯度下降法
x = load('E:\workstation\data\ex3x.dat');
y = load('E:\workstation\data\ex3y.dat'); x = [ones(size(x,),) x];
meanx = mean(x);%求均值
sigmax = std(x);%求标准偏差
x(:,) = (x(:,)-meanx())./sigmax();
x(:,) = (x(:,)-meanx())./sigmax(); figure
itera_num = ; %尝试的迭代次数
sample_num = size(x,); %训练样本的次数
alpha = [0.01, 0.03, 0.1, 0.3, , 1.3];%因为差不多是选取每个3倍的学习率来测试,所以直接枚举出来
plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'}; theta_grad_descent = zeros(size(x(,:)));
for alpha_i = :length(alpha) %尝试看哪个学习速率最好
theta = zeros(size(x,),); %theta的初始值赋值为0
Jtheta = zeros(itera_num, );
for i = :itera_num %计算出某个学习速率alpha下迭代itera_num次数后的参数
Jtheta(i) = (/(*sample_num)).*(x*theta-y)'*(x*theta-y);%Jtheta是个行向量
grad = (/sample_num).*x'*(x*theta-y);
theta = theta - alpha(alpha_i).*grad;
end
plot(:, Jtheta(:),char(plotstyle(alpha_i)),'LineWidth', )%此处一定要通过char函数来转换
hold on if( == alpha(alpha_i)) %通过实验发现alpha为1时效果最好,则此时的迭代后的theta值为所求的值
theta_grad_descent = theta
end
end
legend('0.01','0.03','0.1','0.3','','1.3');
xlabel('Number of iterations')
ylabel('Cost function') %下面是预测公式
price_grad_descend = theta_grad_descent'*[1 (1650-meanx(2))/sigmax(2) (3-meanx(3)/sigmax(3))]' %%方法二:normal equations
x = load('E:\workstation\data\ex3x.dat');
y = load('E:\workstation\data\ex3y.dat');
x = [ones(size(x,),) x]; theta_norequ = inv((x'*x))*x'*y
price_norequ = theta_norequ'*[1 1650 3]'

Multivariance Linear Regression练习

本文要解决的问题是给出了47个训练样本,训练样本的y值为房子的价格,x属性有2个,一个是房子的大小,另一个是房子卧室的个数。需要通过这些训练数据来学习系统的函数,从而预测房子大小为1650,且卧室有3个的房子的价格。

  实验基础:

  dot(A,B):表示的是向量A和向量B的内积。

  又线性回归的理论可以知道系统的损失函数如下所示:

  

 其向量表达形式如下:

  

  当使用梯度下降法进行参数的求解时,参数的更新公式如下:

  

  当然它也有自己的向量形式(程序中可以体现)。

两种方法比较预测值:

l  :梯度下降法:

1训练数据:

x = load('E:\workstation\data\ex3x.dat');

y = load('E:\workstation\data\ex3y.dat');

x = [ones(size(x,1),1) x];

meanx = mean(x)  均值

sigmax = std(x)   标准差

x(:,2) = (x(:,2)-meanx(2))./sigmax(2);

x(:,3) = (x(:,3)-meanx(3))./sigmax(3);

2:Gradient descen梯度迭代

重点选择合适的下降下降梯度;

it's time to select a learning rate   The goal of this part is to pick a good learning rate in the range of

You will do this by making an initial selection, running gradient descent and observing the cost function, and adjusting the learning rate accordingly. Recall that the cost function is defined as

The cost function can also be written in the following vectorized form,

where

画图;展示每个学习速率对应的下降图像选取最佳的下降图像

预测值为;

price_grad_descend = theta_grad_descent'*[1 (1650-meanx(2))/sigmax(2) (3-meanx(3)/sigmax(3))]'

 

l  方法二   普通方法直接

x = load('E:\workstation\data\ex3x.dat');

y = load('E:\workstation\data\ex3y.dat');

x = [ones(size(x,1),1) x];

theta_norequ = inv((x'*x))*x'*y

price_norequ = theta_norequ'*[1 1650 3]'

Multivariance Linear Regression练习的更多相关文章

  1. 转载 Deep learning:三(Multivariance Linear Regression练习)

    前言: 本文主要是来练习多变量线性回归问题(其实本文也就3个变量),参考资料见网页:http://openclassroom.stanford.edu/MainFolder/DocumentPage. ...

  2. [UFLDL] Linear Regression & Classification

    博客内容取材于:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.html Deep learning:六(regulariz ...

  3. 线性回归、梯度下降(Linear Regression、Gradient Descent)

    转载请注明出自BYRans博客:http://www.cnblogs.com/BYRans/ 实例 首先举个例子,假设我们有一个二手房交易记录的数据集,已知房屋面积.卧室数量和房屋的交易价格,如下表: ...

  4. 局部加权回归、欠拟合、过拟合(Locally Weighted Linear Regression、Underfitting、Overfitting)

    欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多 ...

  5. Kernel Methods (3) Kernel Linear Regression

    Linear Regression 线性回归应该算得上是最简单的一种机器学习算法了吧. 它的问题定义为: 给定训练数据集\(D\), 由\(m\)个二元组\(x_i, y_i\)组成, 其中: \(x ...

  6. Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)

    ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, , ...

  7. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作

    %测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s 1 6.1101,17.592 5. ...

  8. Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression

    原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...

  9. Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable

    原文:http://blog.csdn.net/abcjennifer/article/details/7700772 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

随机推荐

  1. nodejs的第三天学习笔记

    一. CommonJS 规范 1.1nodejs 与 commonjs 之间的关系: 1)nodejs是一种服务器语言. a)开启服务的能力 b)文件读写的能力 服务器:就是一台安装了服务软件 2)c ...

  2. oracle 隐藏过长字段

    case                    when length(m.topic)>20 then substr(m.topic,0,20)||'...'                  ...

  3. 可靠UDP

    tcp为我们做了什么事情? 总得来说,tcp做了这几件事: 通过序列号和基于确认的超时重传机制,为上层提供了可靠的字节流服务: 通过滑动窗口.拥塞窗口提供了流量控制: 默认情况下,为了有效利用带宽,t ...

  4. linux rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpm

    linux rpm 安装mysql异常: [root@localhost upload]# rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpmerror: Fail ...

  5. ttf文件属性详细信息

    python实现ttf文件属性详细信息 import sys from fontTools import ttLib def shortName( font ): name = "" ...

  6. JavaScript中如何获取某年某月有多少天的问题

    function getDaysInOneMonth(year, month){ month = parseInt(month,10); var d= new Date(year,month,0); ...

  7. win32 Dll 中添加afx.h 出现如下错误 error LNK2005: _DllMain@12 already defined

    win32 Dll 中添加afx.h 出现如下错误 nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in ...

  8. ubuntu 下非交互式执行远程shell命令

    apt-get install sshpass sshpass -p **your_password** ssh -o StrictHostKeyChecking=no "root@$ip& ...

  9. PHP 通过Socket收发16进制数据

    最近在php下做关于Socket通讯的相关内容,发现网络上好多人在了解如何进行16进制收发,研究了下,代码如下,欢迎拍砖. <?php        $sendStr = '30 32 30 3 ...

  10. Windows下安装pip(转自http://www.cnblogs.com/yuanzm/p/4089856.html)

    windows下面安装Python和pip终极教程 在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个人很喜欢Python的语言风格,但是这门语言对于windows并不算 ...