ML/DL作业1——pm2.5预测

该博客介绍了如何利用前9天的气象数据(如PM2.5、PM10、NO浓度等)预测第10天的PM2.5浓度。通过数据预处理,将NR替换为0,并将数据分割成训练和标签,构建了一个简单的线性模型,使用Adagrad优化器并应用L2正则化防止过拟合。

任务描述
在这里插入图片描述
数据描述在这里插入图片描述
首先先下载学习资料观察训练集的数据
在这里插入图片描述
作业说明
(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 = 1 # 初始学习率
    reg_rate = 
### PM2.5预测模型概述 对于PM2.5空气质量预测,可以采用多种机器学习和深度学习技术。具体实现取决于所选特征、目标以及预期的应用场景。 #### 随机森林回归模型用于PM2.5预测 随机森林是一种强大的集成学习方法,在处理多维数据时表现出色。该模型由多个决策树组成,每棵树都会对样本做出独立预测,最终取平均作为整体输出[^1]。为了建立有效的随机森林模型来进行PM2.5浓度预测: ```python from sklearn.ensemble import RandomForestRegressor import pandas as pd # 加载并预处理数据集 data = pd.read_csv('pm2_5_data.csv') X = data[['season', 'dew_point', 'temperature', 'humidity', 'pressure']] y = data['pm2_5'] # 初始化随机森林回归器 rf_model = RandomForestRegressor(n_estimators=100, max_depth=None) # 训练模型 rf_model.fit(X, y) ``` 此代码片段展示了如何使用`sklearn`中的`RandomForestRegressor`类创建一个具有默认参数配置的随机森林模型,并对其进行拟合操作。 #### 卷积神经网络(CNN)应用于时间序列预测 当面对连续的时间序列数据时,卷积神经网络能够捕捉到局部模式及其随时间的变化趋势。下面是一个简单的CNN架构实例,专门针对单变量时间序列(即仅考虑历史PM2.5读数)进行建模[^2]: ```python import tensorflow.keras.layers as layers from tensorflow.keras.models import Sequential def build_cnn(input_shape=(None,), num_filters=[64], kernel_sizes=[3]): model = Sequential() for i in range(len(num_filters)): if i == 0: model.add(layers.Conv1D(filters=num_filters[i], kernel_size=kernel_sizes[i], activation='relu', input_shape=input_shape)) else: model.add(layers.Conv1D(filters=num_filters[i], kernel_size=kernel_sizes[i], activation='relu')) model.add(layers.MaxPooling1D(pool_size=2)) model.add(layers.Flatten()) model.add(layers.Dense(units=1)) # 输出层 return model ``` 这段脚本定义了一个函数`build_cnn()`,它接受输入形状和其他超参列表作为参数,返回编译后的Keras CNN模型对象。 #### 极限随机树对比分析 极限随机树作为一种改进型决策树算法,在某些情况下可能优于传统随机森林。然而,根据已有研究显示,即使是在优化条件下,其性能也未能超过51.2%的准确率水平[^3]。这表明单纯依赖此类监督分类手段难以满足高精度需求的任务要求;因此建议探索更多样化的解决方案路径,比如引入更复杂的DL框架或是增强原始特征空间维度等方式提升表现力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值