李宏毅课程-机器学习 PM2.5预测

前言

目前有在 百度 的 AI Studio 上的李宏毅课程-机器学习特训营上学习,有练习到回归问题中的练习题,采用逻辑回归的方法去尝试编写程序回归预测PM2.5的值。尝试把一些心得记录下来!

项目描述

  • 本次作业的资料是从行政院环境环保署空气品质监测网所下载的观测资料。
  • 希望大家能在本作业实现 linear regression 预测出 PM2.5 的数值。

数据集介绍

  • 本次作业使用丰原站的观测记录,分成 train set 跟 test set,train set 是丰原站每个月的前 20 天所有资料。test set 则是从丰原站剩下的资料中取样出来。
  • train.csv: 每个月前 20 天的完整资料。
  • test.csv : 从剩下的资料当中取样出连续的 10 小时为一笔,前九小时的所有观测数据当作 feature,第十小时的 PM2.5 当作 answer。一共取出 240 笔不重複的 test data,请根据 feature 预测这 240 笔的 PM2.5。
  • Data 含有 18 项观测数据 AMB_TEMP, CH4, CO, NHMC, NO, NO2, NOx, O3, PM10, PM2.5, RAINFALL, RH, SO2, THC, WD_HR, WIND_DIREC, WIND_SPEED, WS_HR。

载入数据集并转化为Pandas表格

import pandas as pd
import numpy as np
import math

# train.csv 数据 的表头 为
# 日期  测站  测项  0  1  2  3  4  5  .....  21  22  23

# 因为每个月抽取20天的数据,一年有12个月,所以为 12 * 20 * 18(测项) = 4320 行
# 因为从数据的表头观察 有 3(日期、测站、测项) + 24(小时) = 27 列
# 数据表为:4320(行) * 27(列)
data = pd.read_csv('data/train.csv', encoding='big5')

查看数据集资料栏位

# 查看 train.csv 数据 的表头 
data.columns
Index(['日期', '測站', '測項', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
       '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21',
       '22', '23'],
      dtype='object')

# 查看 train.csv 数据 的结构
print("train.csv 的 数据表结构: " + str(data.shape))
train.csv 的 数据表结构: (4320, 24)

查看数据表大致情况

# 查看数据的 前18行
print(data.head(18))
          日期  測站          測項     0     1  ...    19    20    21    22    23
0   2014/1/1  豐原    AMB_TEMP    14    14  ...    16    15    15    15    15
1   2014/1/1  豐原         CH4   1.8   1.8  ...   1.8   1.8   1.8   1.8   1.8
2   2014/1/1  豐原          CO  0.51  0.41  ...  0.45  0.38  0.35  0.36  0.32
3   2014/1/1  豐原        NMHC   0.2  0.15  ...  0.12   0.1  0.09   0.1  0.08
4   2014/1/1  豐原          NO   0.9   0.6  ...   1.9   1.5   1.6   1.8   1.5
5   2014/1/1  豐原         NO2    16   9.2  ...    12   8.1     7   6.9     6
6   2014/1/1  豐原         NOx    17   9.8  ...    13   9.7   8.6   8.7   7.5
7   2014/1/1  豐原          O3    16    30  ...    34    37    38    38    36
8   2014/1/1  豐原        PM10    56    50  ...    63    46    36    42    42
9   2014/1/1  豐原       PM2.5    26    39  ...    44    41    30    24    13
10  2014/1/1  豐原    RAINFALL    NR    NR  ...    NR    NR    NR    NR    NR
11  2014/1/1  豐原          RH    77    68  ...    69    70    70    70    69
12  2014/1/1  豐原         SO2   1.8     2  ...   2.3     2   1.9   1.9   1.9
13  2014/1/1  豐原         THC     2     2  ...   1.9   1.9   1.9   1.9   1.9
14  2014/1/1  豐原       WD_HR    37    80  ...   121   113   112   106   110
15  2014/1/1  豐原  WIND_DIREC    35    79  ...   118   114   108   102   111
16  2014/1/1  豐原  WIND_SPEED   1.4   1.8  ...     3   2.6   2.7   2.1   2.1
17  2014/1/1  豐原       WS_HR   0.5   0.9  ...   2.5   2.8   2.6   2.4   2.3

[18 rows x 27 columns]

Loss (损失函数)介绍

在本次的线性回归中,使用RMSE(均方根误差)定义损失函数,用来度量模型性能的指标。
在这里插入图片描述
使用RMSE(均方根误差)来定义损失函数是具有平滑可微的特性。

AdaGrad 算法介绍

对于模型参数的权重值的优化,常常使用梯度下降法来进行优化,而在SGD随机梯度下降法的基础之上,使用AdaGrad算法,可以在参数空间中,对于想对平缓的方向,可以取得更大的进步。
在这里插入图片描述
AdaGrad算法与SGD梯度下降法相比,采用了累积平方梯度。
举例讲解不同:

在这里插入图片描述

假设参数空间中,有两个参数为 w 和 b,其中从图中看出,b方向的比较陡峭,而w方向比较平缓。
使用小批量梯度下降法(Mini-batch GD),移动的方向如上面的蓝色轨迹所示。

使用AdaGrad算法后,会使用累积平方梯度
在这里插入图片描述
在这里插入图片描述

在下次计算更新的时候,r是作为分母出现的,越大的反而更新越小,越小的值反而更新越大,那么后面的更新则会像上面绿色线更新一样,明显就会好于蓝色更新曲线。
在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。
所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。

程序码展示

import pandas 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.小林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值