线性回归案例分析-预测PM2.5

该博客介绍了使用Python进行PM2.5浓度预测的项目,通过对台湾丰原地区气象观测数据的预处理,利用前9个小时的数据预测第10个小时的PM2.5含量。采用简单的线性模型进行训练,经过2000轮迭代,损失逐渐降低,最终在测试集上得到一定精度的预测结果。
摘要由CSDN通过智能技术生成

作业说明

给定训练集train.csv,要求根据前9个小时的空气监测情况预测第10个小时的PM2.5含量。

训练集介绍:

(1)、CSV文件,包含台湾丰原地区240天的气象观测资料(取每个月前20天的数据做训练集,12月X20天=240天,每月后10天数据用于测试,对学生不可见);

(2)、每天的监测时间点为0时,1时…到23时,共24个时间节点;

(3)、每天的检测指标包括CO、NO、PM2.5、PM10等气体浓度,是否降雨、刮风等气象信息,共计18项;

(4)、数据集地址:https://pan.baidu.com/s/1o2Yx42dZBJZFZqCa5y3WzQ,提取码:qgtm。

注意用notepad++打开 否则会乱码

源码:

import pandas as pd
import numpy as np
#数据预处理
def dataProcess(df):
    #x_list,y_list分别为feature和label
    x_list,y_list = [],[]
    #没有数据的地方补0
    df = df.replace(['NR'],[0.0])
    #转换为numpy数组
    array = np.array(df).astype(float)
    #数据集拆分为训练集和测试集
    for i in range(0,4320,18):
        for j in range(24-9):
            #18个有关特征,间隔九小时为一次feature
            x_t = array[i:i+18,j:j+9]
            #第10个指标为pm2.5,对应第十个小时为label
            y_t = array[i+9,j+9]
            #每次都插入到训练集和测试机
            x_list.append(x_t)
            y_list.append(y_t)
    x = np.array(x_list)
    y = np.array(y_list)
    #转换为numpy数组返回
    return x,y,array
def train(x_train,y_train,epoch):
    #偏执值
    bias = 0.0
    #权重
    weights = np.ones(9)
    #学习率
    learning_rate_bias = 1
    learning_rate_weights = 1
    #正则率
    reg_rate = 0.001
    #偏执值的平方和
    b_sum = 0
    #权重的平方和
    w_sum = np.zeros(9)
    #epoch为训练次数
    for e in range(epoch):
        #偏置值梯度
        b = 0
        #权重值梯度
        w = np.zeros(9)
        for i in range(3200):
            b += (y_train[i]-weights.dot(x_train[i,9,:])-bias)*(-1)
            for j in range(9):
                w[j] +=(y_train[i]-weights.dot(x_train[i,9,:])-bias)*(-x_train[i,9,j])
        for i in range(9):
            w[i] += reg_rate*(w[i])
        b /= 3200
        w /= 3200
        b_sum += b**2
        w_sum += w**2
        #偏置值更新
        bias = bias - (learning_rate_bias/(b_sum**0.5))*b
        #权重值更新
        weights = weights -(learning_rate_weights/(w_sum**0.5))*w
        #下面两行按照公式的方法更新学习率不知为何导致学习率直接降为0 有待继续研究
        # learning_rate_bias = learning_rate_bias/(b_sum**0.5)
        # learning_rate_weights = learning_rate_weights/(w_sum**0.5)

        #每训练200轮,输出训练效果:
        if(e%200==0):
            loss = 0
            for i in range(3200):
                loss += (y_train[i]-weights.dot(x_train[i,9,:])-bias)**2
            print(e)
            print('训练工程中损失:',loss/3200)

    return weights,bias

def check(x_val,y_val,weights,bias):
    loss = 0
    for i in range(400):
        loss += (y_val[i]-weights.dot(x_val[i,9,:])-bias)**2
    return loss/400
def main1():
    #观察数据截取[3-26]列的数据是有用得数据
    df = pd.read_csv('train.csv',usecols=range(3,27))
    x,y,_ = dataProcess(df)
    #训练集得截取
    x_train,y_train = x[0:3200],y[0:3200]
    #测试值得截取
    x_val,y_val = x[3200:3600],y[3200:3600]
    epoch = 2000
    #开始训练
    w,b = train(x_train,y_train,epoch)
    #训练结束后算损失并输出最终得训练结果
    loss = check(x_val,y_val,w,b)
    print('训练2000轮后最终的损失:',loss)
if __name__ == '__main__':
    main1()

训练结果:

0
训练工程中损失: 955.3009375
200
训练工程中损失: 49.86809717796437
400
训练工程中损失: 46.20086653422761
600
训练工程中损失: 44.88898286527247
800
训练工程中损失: 44.2688932142283
1000
训练工程中损失: 43.94997761843127
1200
训练工程中损失: 43.78081013521727
1400
训练工程中损失: 43.689726585603765
1600
训练工程中损失: 43.64023211743175
1800
训练工程中损失: 43.613159117601505
训练2000轮后最终的损失: 40.353623028655626

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性回归是一种常用的机器学习算法,可以用于预测连续型变量。在这个问题中,我们需要使用线性回归预测pm2.5的。 首先,我们需要加载并理解数据集。train.csv是一个包含多个特征和pm2.5的数据集,我们需要将它划分为训练集和测试集。 接下来,我们需要对数据进行预处理。这包括处理缺失、处理异常、对特征进行标准化等。我们可以使用一些常见的数据预处理技术如均填充、中位数填充等来处理缺失,并通过箱线图等来识别和处理异常。 然后,我们使用线性回归模型进行训练。线性回归基于给定的自变量来预测因变量。我们可以使用包括scikit-learn在内的机器学习库来实现线性回归。我们将训练数据输入到线性回归模型中,并通过最小化预测与真实之间的均方差来训练模型。 训练完成后,我们可以使用测试集来评估模型的性能。我们可以使用一些评价指标如均方根误差(RMSE)、平均绝对误差(MAE)等来评估模型的预测能力。 最后,我们可以使用经过训练的线性回归模型来对新的样本进行预测。我们将测试集输入到模型中,得到预测pm2.5。 总而言之,线性回归模型可以用于预测pm2.5的。通过加载和理解数据集、预处理数据、训练模型和评估模型的性能,我们可以使用线性回归模型来预测pm2.5的,并进行进一步的分析和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值