Multivariance Linear Regression练习
%% 方法一:梯度下降法
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练习的更多相关文章
- 转载 Deep learning:三(Multivariance Linear Regression练习)
前言: 本文主要是来练习多变量线性回归问题(其实本文也就3个变量),参考资料见网页:http://openclassroom.stanford.edu/MainFolder/DocumentPage. ...
- [UFLDL] Linear Regression & Classification
博客内容取材于:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.html Deep learning:六(regulariz ...
- 线性回归、梯度下降(Linear Regression、Gradient Descent)
转载请注明出自BYRans博客:http://www.cnblogs.com/BYRans/ 实例 首先举个例子,假设我们有一个二手房交易记录的数据集,已知房屋面积.卧室数量和房屋的交易价格,如下表: ...
- 局部加权回归、欠拟合、过拟合(Locally Weighted Linear Regression、Underfitting、Overfitting)
欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多 ...
- Kernel Methods (3) Kernel Linear Regression
Linear Regression 线性回归应该算得上是最简单的一种机器学习算法了吧. 它的问题定义为: 给定训练数据集\(D\), 由\(m\)个二元组\(x_i, y_i\)组成, 其中: \(x ...
- Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)
,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, , ...
- 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. ...
- Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...
- Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
原文:http://blog.csdn.net/abcjennifer/article/details/7700772 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
随机推荐
- mysql连接的一些问题。
最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪.有必要研究下这个问 ...
- 【转】Centos升级Python 2.7.12并安装pip、ipython
Centos系统一般默认就安装有Python2.6.6版本,不少软件需要2.7以上的,通过包管理工具安装不了最新的版本,通过源码编译可以方便安装指定版本,只需要把下面版本的数字换成你想要的版本号. 1 ...
- LabVIEW之生产者/消费者模式--队列操作 彭会锋
LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...
- nullable,nonnull, null_resettable以及_Null_unspecified的区别和使用
1.关键字:可以用于属性 方法和返回值参数中 关键字作用:提示作用 告诉开发者属性信息 关键字的目的:迎合swift 强语言,swift必须要指定一个对象是否为空 关键字好处:提高代码规划,减少沟通 ...
- [HTML/HTML5]8 使用表格
8.1 创建基本的表格结构 8.1.1 表格结构 HTML表格包含4种基本元素: table:在HTML中table元素是一个容器,其中包含用于创建表格的其它的元素: tr:表示表格中的行,开始标 ...
- 【转】常用聚类算法(一) DBSCAN算法
原文链接:http://www.cnblogs.com/chaosimple/p/3164775.html#undefined 1.DBSCAN简介 DBSCAN(Density-Based Spat ...
- 原生js通过prottype写的一个简单拖拽
<!DOCTYPE html> <head> <meta charset="utf-8"/> <title></title&g ...
- thinkjs——session
工作中又遇到了session问题,于是整理一下有关thinkjs中的session使用小方法: 需要用户登录的网站基本上都离不开 Session,ThinkJS 里默认支持多种类型的 Session, ...
- WCF初探-26:WCF中的会话
理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调 ...
- 小游戏Talk表
[Config]1|0|2|久远的记忆影子|你也是误入宠物王国的妹子吧,我在这里等你很久了,或许我们应该一起逃出这里,跟着我.[Config] [Config]2|3|2|久远的记忆影子|这里原本是一 ...