李宏毅机器学习:PM2.5预测MATLAB实现
上一篇采用两个参数进行gradient descend计算线性回归问题,由于自己也是新手才学不久,最近又在啃周志华著的《机器学习》,深深的陷进去了,现在才想起吧这个未完成的任务完成,我也是新手也请大神指点。
直接进入正题
将数据提取出来我这里分成了两步
1.将数据从train.csv中提取到MATLAB中
将数据存放在data矩阵中,其中矩阵的每一行是一种气象数据(feature)。tip:MATLAB中csvreader函数,计算行和列是从0开始计数的
BTW:由于MATLAB中csvreader函数只能读取数据,我先将train.csv中的NR改成了0(我也很痛苦,本来想直接实现的,试了好多办法比如textscan都不太好用,到时候学习中有好办法再改吧)
直接上代码
new_feature=1;%定义CSV文件中特征行的变化 取1是指第二行才有数据
for day=0:239%一次循环读取1天24小时1种特征 定义收集数据天数的变化,共240天
for feature=1:18
data( feature,day*24+1:day*24+24 )=...%读取的是1*24列的矩阵
csvread('train.csv',new_feature,3,[new_feature,3, new_feature,26 ]);
new_feature=new_feature+1;
end
end
clear day feature new_feature
2.将data矩阵中的数据映射到x,y中
选取前9小时气象数据作为预测的输入(x),预测当前小时的PM2.5
x是5652X163阶矩阵,5652是指train.csv中采集的是一个月中前20天的数据,每天24小时,取前9小时作为训练数据共有24X20-9组数据又有12个月
同时为了方便矩阵计算将x的最后一列加上一个全为1的向量用于计算bias。
代码如下
%data中前24*20为一个月,对每个月进行取值每10小时1组前9为training set共471(480-9)组
x=zeros(471*12,18*9);
y=zeros(471*12,1);
for month=0:11
for j=1:471
for hours=0:9
if(hours<9)
x(471*month+j,hours*18+1:hours*18+18)=data(:,480*month+j +hours);%前9组做输入
%480*month+j是指每个月有480组数据,每个月内的数据由j选择
else
y(471*month+j,1)=data(10,480*month+j +hours);%PM2.5在第十行
end
end
end
end
%将全为1的向量加入矩阵末尾用于计算bias
bias=ones(471*12,1);
x=[x,bias];
clear month j hours
固定学习速率计算
先进行矩阵计算
符号规定 X 为输入矩阵(包含最后一列为1),