资源简介

本资源使用线性回归的手段模拟预测PM2.5,包含了所有的数据以及代码。代码含有详细地注释,欢迎下载学习使用!

资源截图

代码片段和文件信息

‘‘‘
本程序简单预测PM2.5的走向,每个月只取了20天的测量数据。
共有18中污染源,即将 18种污染源的数据和对应的PM2.5的数据 进行训练
再根据训练结果来预测新的数据下PM2.5的值
‘‘‘
#   import library  #
import csv 
import numpy as np
from numpy.linalg import inv
import random
import math
import sys

#   read data   #
data = []
# 每一个维度存储一种污染物的数据一共有18种污染物
for i in range(18):
data.append([]) # []表示这十八个输入中,每一个输入都是一个列表

n_row = 0 # 初始从第0行开始
# 打开数据文件文件big5编码为繁体字
text = open(‘D:/PythonCodes/CNN/train.csv‘ ‘r‘ encoding=‘big5‘) 
# 读取名称为text的Excel文件,返回文件行的累加信息类型为_csv.reader
row = csv.reader(text  delimiter=““) 
# r中保存了当前行的所有信息,r是一个列表,每次循环到这就更换到下一行
for r in row: 
    # 第0行没有数据信息
    if n_row != 0:
        # 每一列只有第3-27格有值(一天内24小时的数值)
        for i in range(327):
            if r[i] != “NR“:
                # data[]中一共可以存放18个列表,每一个列表存放某一种污染物的所有数值
                data[(n_row-1)%18].append(float(r[i])) 
            else:
                data[(n_row-1)%18].append(float(0))
    n_row = n_row+1
text.close()
‘‘‘
file = open(‘D:/PythonCodes/CNN/testdata.csv‘‘w‘ encoding = ‘utf-8‘)
for i in range(len(data)):
    s = str(data[i]).replace(‘[‘‘‘).replace(‘]‘‘‘)#去除[]这两行按数据不同,可以选择
    s = s + ‘\n‘   #去除单引号,逗号,每行末尾追加换行符
    file.write(s)
file.close()
print(“保存文件成功“) 
‘‘‘
#    Parse Data to (xy)     #
x = []
y = []
# 一共有12个月,每个月20天
for i in range(12):
    # 一共有480个小时,连续取10个小时一组的数据,可取471组(最后9个数据舍去)
    for j in range(471):
        x.append([]) # 在x中加入列表存储数据
        # 污染物的种类一共有18种
        for t in range(18):
            # 取每种污染物前9小时的数据在第10小时存放PM2.5的值
            for s in range(9): 
                x[471*i+j].append(data[t][480*i+j+s] )
        y.append(data[9][480*i+j+9]) # PM2.5的数据存放在第10行
# 每个按行排列
x = np.array(x)
y = np.array(y)

# add square term
# x = np.concatenate((xx**2) axis=1) 将数据量翻倍,新的数据为x^2

# add bias
# 5652行1列的ones,每一行1后面直接连接x的每行列表
# 此处多的一列存储的是bias,值为1
x = np.concatenate((np.ones((x.shape[0]1))x) axis=1) 
#print(x.shape) # (5652 163)

#init weight & other hyperparams#
w = np.zeros(len(x[0])) # shap: (163) 0: 163 __len__: 1 size: 163
l_rate = 10 # 学习率,用于更新w
repeat = 10000 # 迭代次数

#check your ans with close form solution#
# use close form to check whether ur gradient descent is good
# however this cannot be used in hw1.sh 
# w = np.matmul(np.matmul(inv(np.matmul(x.transpose()x))x.transpose())y)

‘‘‘模型是Y = b + w * x‘‘‘

#start training#
# 将x矩阵进行转置,此时第一行全是1
# shape: (5652) 0: 5652 len: 1 size: 5652
x_t = x.transpose() 
s_gra = np.zeros(len(x[0])) # 163行的0

for i in range(repeat):
    hypo = np.dot(xw) # 做矩阵乘法,(5652 163)*(163 1) shape = (5652 1)预测值
    loss = hypo - y # 预测数值 - 真实数值
    cost = np.sum(loss**2) / len(x) # L(f) = (y - f)^2 求和再求平局值
    cost_a  = math.sqrt(cost) # 开方
    # 梯度下降
    gra = np.dot(x_tloss) # (163 5652) * (5652 1)   shape: (163 1)   dL
    s_gra += gra**2 
    ada = np.sqrt(s_gra) # 均方根
    w = w - l_rate * (gra/ada) # 更新后的w
    print (‘iteration: %d | Cost: %f  ‘ % ( icost_a))

# sa

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      26033  2018-11-28 13:30  PM2.5Prediction\20171109191242797.png

     文件      30322  2018-11-28 13:30  PM2.5Prediction\20171109192721426.png

     文件     132209  2018-11-28 14:24  PM2.5Prediction\20171228222742072.png

     文件      86445  2018-11-28 14:24  PM2.5Prediction\20171228222805380.png

     文件       2264  2018-11-25 13:39  PM2.5Prediction\ans.csv

     文件    8449299  2018-11-27 13:35  PM2.5Prediction\arrayx.csv

     文件      32474  2018-11-27 13:39  PM2.5Prediction\arrayy.csv

     文件    8500646  2018-11-28 14:41  PM2.5Prediction\concatenateX.csv

     文件    5132390  2018-11-28 09:38  PM2.5Prediction\listx.csv

     文件       1432  2018-11-25 15:33  PM2.5Prediction\model.npy

     文件       4678  2018-11-28 20:43  PM2.5Prediction\predict.csv

     文件       5270  2018-11-28 14:39  PM2.5Prediction\PredictionofPM2.5.py

     文件      23440  2018-11-27 13:10  PM2.5Prediction\QQ截图20181127131014.png

     文件       2300  2018-11-25 13:52  PM2.5Prediction\sampleSubmission.csv

     文件        815  2018-11-28 10:40  PM2.5Prediction\s_gra.csv

     文件     192547  2018-11-25 13:52  PM2.5Prediction\test.csv

     文件     367871  2018-11-27 13:44  PM2.5Prediction\testdata.csv

     文件     465573  2018-11-25 13:51  PM2.5Prediction\train.csv

     文件       5311  2018-11-28 10:37  PM2.5Prediction\x_t.csv

     目录          0  2018-11-28 20:43  PM2.5Prediction

----------- ---------  ---------- -----  ----

             23461319                    20


评论

共有 条评论