matlib实现梯度下降法(序一)
数据来源:http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant
数据描述:
有四个输入特征,这些数据来自电厂,这四个特征和电量输入有关系,现在通过线性回归求它们之间关系的模型参数。
- 温度,Temperature (T) in the range 1.81°C and 37.11°C,
- 大气压,Ambient Pressure (AP) in the range 992.89-1033.30 milibar,
- 相对湿度,Relative Humidity (RH) in the range 25.56% to 100.16%
- 排气容积,Exhaust Vacuum (V) in teh range 25.36-81.56 cm Hg
- 输出电力百万瓦:Net hourly electrical energy output (EP) 420.26-495.76 MW
The averages are taken from various sensors located around the plant that record the ambient variables every second. The variables are given without normalization.
注意,这些数据没有归一化,由于四个特征大小差别很大,所以要进行归一化操作,具体操作参照http://www.cnblogs.com/mikewolf2002/p/7560748.html 3.4节。
总共数据9568条数据,我们选取前9000条数据为训练数据,放在train.txt,后面568条数据为验证数据,放在verify.txt

clear all; close all; clc;
data = load('train.txt');
x = data(:,1:4); %温度,大气压,湿度,排气容积
y = data(:,5); %输出电力
m = length(y); % 样本数目
x = [ones(m, 1), x]; % 输入特征增加一列,x0=1
meanx = mean(x);%求均值
sigmax = std(x);%求标准偏差
x(:,2) = (x(:,2)-meanx(2))./sigmax(2);
x(:,3) = (x(:,3)-meanx(3))./sigmax(3);
x(:,4) = (x(:,4)-meanx(4))./sigmax(4);
x(:,5) = (x(:,5)-meanx(5))./sigmax(5);
theta = zeros(size(x(1,:)))'; % 初始化theta MAX_ITR = 1500;%最大迭代数目
alpha = 0.1; %学习率
i = 0;
while(i<MAX_ITR)
grad = (1/m).*x' * ((x * theta) - y);%求出梯度
theta = theta - alpha .* grad;%更新theta
if(i>2)
delta = old_theta-theta;
delta_v = delta.*delta;
if(delta_v<0.000000000000001)%如果两次theta的内积变化很小,退出迭代
break;
end
end
old_theta = theta;
%theta
i=i+1;
end
data1 = load('verify.txt');
x1 = data1(:,1:4); %温度,压力,适度,压强
y1 = data1(:,5); %输出电力
m1 = length(y1); % 样本数目
x1 = [ones(m1, 1), x1]; % 输入特征增加一列,x0=1 meanx1 = mean(x1);%求均值
sigmax1 = std(x1);%求标准偏差
x1(:,2) = (x1(:,2)-meanx1(2))./sigmax1(2);
x1(:,3) = (x1(:,3)-meanx1(3))./sigmax1(3);
x1(:,4) = (x1(:,4)-meanx1(4))./sigmax1(4);
x1(:,5) = (x1(:,5)-meanx1(5))./sigmax1(5); y2 = x1*theta;
y2
y1为原始验证数据结果,y2为预测结果,从下面图中看到y1/y2都挺接近的。

matlib实现梯度下降法(序一)的更多相关文章
- matlib实现梯度下降法
样本文件下载:ex2Data.zip ex2x.dat文件中是一些2-8岁孩子的年龄. ex2y.dat文件中是这些孩子相对应的体重. 我们尝试用批量梯度下降法,随机梯度下降法和小批量梯度下降法来对这 ...
- [Machine Learning] 梯度下降法的三种形式BGD、SGD以及MBGD
在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点. 下面我们以线性回归算法来对三种梯度下降法进行比较. ...
- 机器学习基础——梯度下降法(Gradient Descent)
机器学习基础--梯度下降法(Gradient Descent) 看了coursea的机器学习课,知道了梯度下降法.一开始只是对其做了下简单的了解.随着内容的深入,发现梯度下降法在很多算法中都用的到,除 ...
- 一种利用 Cumulative Penalty 训练 L1 正则 Log-linear 模型的随机梯度下降法
Log-Linear 模型(也叫做最大熵模型)是 NLP 领域中使用最为广泛的模型之一,其训练常采用最大似然准则,且为防止过拟合,往往在目标函数中加入(可以产生稀疏性的) L1 正则.但对于这种带 L ...
- coursera机器学习笔记-机器学习概论,梯度下降法
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- 重新发现梯度下降法--backtracking line search
一直以为梯度下降很简单的,结果最近发现我写的一个梯度下降特别慢,后来终于找到原因:step size的选择很关键,有一种叫backtracking line search的梯度下降法就非常高效,该算法 ...
- 梯度下降法VS随机梯度下降法 (Python的实现)
# -*- coding: cp936 -*- import numpy as np from scipy import stats import matplotlib.pyplot as plt # ...
- Gradient Descent 和 Stochastic Gradient Descent(随机梯度下降法)
Gradient Descent(Batch Gradient)也就是梯度下降法是一种常用的的寻找局域最小值的方法.其主要思想就是计算当前位置的梯度,取梯度反方向并结合合适步长使其向最小值移动.通过柯 ...
- 理解梯度下降法(Gradient Decent)
1. 什么是梯度下降法? 梯度下降法(Gradient Decent)是一种常用的最优化方法,是求解无约束问题最古老也是最常用的方法之一.也被称之为最速下降法.梯度下降法在机器学习中十分常见,多用 ...
随机推荐
- Spring框架学习——Spring的体系结构详解
1.Spring简介 Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题.它是一个分层的JavaSE/JavaEE ...
- Linux文件的所有权与权限
要了解Linux的权限,需要和Linux的用户与组的概念一并理解,不了解的同学请参考Linux的用户和组 简介 在Linux中,每个文件除了有用户和组的信息以外,还有其对应的权限.可使用来查看. [r ...
- MySQL Binlog 解析工具 Maxwell 详解
maxwell 简介 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Goog ...
- 1063 合并果子 2004年NOIP全国联赛普及组
题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等 ...
- [CC-FNCS]Chef and Churu
[CC-FNCS]Chef and Churu 题目大意: 一个长度为\(n(n\le10^5)\)的数列\(A_{1\sim n}\),另有\(n\)个函数,第\(i\)个函数会返回数组中标号在\( ...
- mysql的checkpoint
上一章的结尾我们留下了一个问题,就是在上一章所介绍的模型中,恢复管理器必须要通过全篇扫描整个undolog进行日志恢复,这样做显然是没有太大必要的,因为系统中断肯定是在最后几个事务受到影响,前面的事务 ...
- SlickMaster.NET 开源表单设计器快速使用指南
前言:在企业数据处理过程中,经常需要通过定制表单来输入业务数据.由于涉及的数据比较离散,并不同于ERP系统的紧密关联数据.假如由开发人员每个增加页面,工作量会比较大,后期后期的维护很升级也耗费时间和精 ...
- Execution Plan 执行计划介绍
后面的练习中需要下载 Demo 数据库, 有很多不同的版本, 可以根据个人需要下载. 下载地址 -http://msftdbprodsamples.codeplex.com/ 1. 什么是执行计划 ...
- GoDaddy Linux主机支持机房的更换
GoDaddy Linux主机支持机房的更换 http://godaddy.idcspy.com/godaddy-change-data-center GoDaddy推出中文界面后,小编发现虚拟主机有 ...
- finger-guessing game:1场景搭建
场景搭建 //初始化legend组件 init(50, "div_caiquan", 800, 400, main); //定义游戏层 //游戏背景层,结果显示层,点击层 var ...