任务描述
数据描述
首先先下载学习资料观察训练集的数据
作业说明
(1)数据集包含台湾丰原的240天的天气观测数据(包括每个月前20天的可见数据用于训练和后10天的数据用于测试,为防止作弊后十天不可见)
(2)天气数据包含PM2.5、PM10、NO等浓度和降雨等18条数据
(3)每天监测24次数据,每隔一小时监测一次。
解题思路分析
数据预处理
首先根据题目要求根据前九天的pm2.5预测第十天的pm2.5,这样我们可以把数据分割成(18,9)既18个参数(PM2.5、PM10、NO浓度等18个考虑指标)提取0到8时的数据项作为训练数据,9时的pm2.5作为该数据项对应的函数结果数据label。
为了获得更多的训练数据我们可以将上图红色方框依次向右移动一个格子。绿色方框同理。这样我们一共可以获得240*15=3600个数据帧和以此对应的3600个label用来学习。观察上图数据可知RAINFALL(降雨量)这行数据时常为NR(既为0没有下雨),我们需要将NR替换成浮点数机器才可以处理数据。用replace([‘NR’], [0.0])这行代码将NR替换成0.0。replace函数的用法
根据上述所说我们现在对数据进行分割,分割成3600个数据帧和对应的3600个label。
for i in range(0, 4320, 18):
for j in range(15):
mat = array[i:i+18, j:j+9]
label = array[i+9, j+9]
x_list.append(mat)
y_list.append(label)
x = np.array(x_list)
y = np.array(y_list)
回归建立模型
一共收集了18项可能影响pm2.5的数据但我们也不知道什么影响pm2.5于是只用pm2.5这项数据建立简单的线性模型。
损失函数
用课上讲的用差值平方和来衡量预测准确程度这里用平方和的方式(平均欧式距离)来衡量预测的准确程度乘1/2是后续求微分方便月掉。
为了防止过拟合L2正则化加入正则项:
梯度更新:
更新学习率:
几种优化算法:深度学习优化算法总(SGD,AdaGrad,Adam等)这里采用adagrad算法
def train(x_train, y_train, epoch):
bias = 0 # 偏置值初始化
weights = np.ones(9) # 权重初始化。ones()函数的作用在这里就是生成一个数组数组里有九个1
learning_rate =