matlib实现梯度下降法(序一)

简介: 数据来源:http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant数据描述:有四个输入特征,这些数据来自电厂,这四个特征和电量输入有关系,现在通过线性回归求它们之间关系的模型参数。

数据来源: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
View Code

y1为原始验证数据结果,y2为预测结果,从下面图中看到y1/y2都挺接近的。


image

相关文章
|
机器学习/深度学习 数据可视化 Python
逻辑回归那些事—使用牛顿法解决实际问题
逻辑回归是机器学习中的重要章节,本文将带你从公式推导到算法实现详细讲述这部分内容,想学习这个高大上的技能么,快来看吧!!!
5411 0
|
5月前
|
算法 Python
梯度下降法
梯度下降法
26 0
|
12月前
|
算法 异构计算
连载|梯度下降
连载|梯度下降
|
机器学习/深度学习 存储 算法
导数、梯度、最优化方法|学习笔记
快速学习导数、梯度、最优化方法
227 0
导数、梯度、最优化方法|学习笔记
|
机器学习/深度学习 算法 搜索推荐
导数、梯度、最优化方法|学习笔记
快速学习导数、梯度、最优化方法
136 0
导数、梯度、最优化方法|学习笔记
|
机器学习/深度学习 算法 开发者
误差反向传播算法-2| 学习笔记
快速学习误差反向传播算法-2。
75 0
误差反向传播算法-2| 学习笔记
|
机器学习/深度学习 算法 开发者
误差反向传播算法-1| 学习笔记
快速学习误差反向传播算法-1。
82 0
误差反向传播算法-1| 学习笔记
|
机器学习/深度学习 算法 C++
误差反向传播算法-3| 学习笔记
快速学习误差反向传播算法-3。
75 0
误差反向传播算法-3| 学习笔记
|
机器学习/深度学习 算法 开发者
误差反向传播算法-4| 学习笔记
快速学习误差反向传播算法-4。
87 0
误差反向传播算法-4| 学习笔记
|
算法 数据可视化 数据挖掘
梯度下降【无约束最优化问题】(二)
本文属于 线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,方便读者理解和根据需求快速阅读。本文通过公式推导+代码两个方面同时进行,因为涉及到代码的编译运行,如果你没有NumPy,Pandas,Matplotlib的基础,建议先修文章:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),本文是梯度下降的第一部分,后续还会有:三种梯度下降方法与代码实现,梯度下降优化,梯度下降优化进阶 (暂未更新)
102 0
梯度下降【无约束最优化问题】(二)