李宏毅machine learning作业之预测PM2.5

1.数据读取与整理

这部分数据看起来非常别扭,主要是因为不是单纯的二维或者三维数据。所以我们要先将数据变换一下:

两种做法:

1.    保留日期信息,将数据做成三维格式。这样看起来能够最大程度的保留信息,但实际上日期信息对我们来说似乎是无足轻重的,所以个人倾向于丢弃它,这就有了第二种做法

2.    丢弃日期信息,index改为1,2,3,4等序号,列名改为各种气象特征。

import numpy as np
import pandas as pd
data=pd.read_csv('train.csv')
data.drop(['ら戳','代'],axis=1,inplace=True)
column=data['代兜'].unique()
data_new=pd.DataFrame(np.zeros([24*240,18]),columns=column)
for i in column:
    aa=data[data['代兜']==i]
    aa.drop(['代兜'],axis=1,inplace=True)
    aa=np.array(aa)
    aa[aa=='NR']='0'
    aa=aa.astype('float32')
    aa=aa.reshape(1,5760)
    aa=aa.T
    data_new[i]=aa
label=np.array(data_new['PM2.5'][9:],dtype='float32')

2数据分析

在进行模型构建之前,我觉得应该先进行一波数据分析操作,最简单的,看看系数相关矩阵热力图:

可以看到,与PM2.5相关性较高的指标有PM10、NO2,NOx等。

import matplotlib.pyplot as plt
import seaborn as sns
# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))

3.模型选择

3.1只使用PM2.5

直觉上,我们入门使用简单点的方法,用前九个小时的PM2.5去预测第十个小时的PM2.5.使用的模型很简单

注意,输入之前,我们会对x进行归一化处理,使用:

####模型1:只使用PM2.5指标
PM=data_new['PM2.5']
PM_mean=int(PM.mean())
PM_the=int(PM.var()**0.5)
PM=(PM-PM_mean)/PM_the
w=np.random.rand(1,10)
theta=0.1
m=len(label)
for i in range(100):
    loss=0
    i=i+1
    gradient=0
    for j in range(m):
        x=np.array(PM[j:j+9])
        x=np.insert(x,0,1)
        error=label[j]-np.matmul(w,x)
        loss+=error**2
        gradient+=error*x
    loss=loss/(2*m)
    print(loss)
    w=w+theta*gradient/m

输出之后发现loss大约是21.744左右

import numpy as np
import pandas as pd
data=pd.read_csv('train.csv')
data.drop(['ら戳','代'],axis=1,inplace=True)
column=data['代兜'].unique()
data_new=pd.DataFrame(np.zeros([24*240,18]),columns=column)
for i in column:
    aa=data[data['代兜']==i]
    aa.drop(['代兜'],axis=1,inplace=True)
    aa=np.array(aa)
    aa[aa=='NR']='0'
    aa=aa.astype('float32')
    aa=aa.reshape(1,5760)
    aa=aa.T
    data_new[i]=aa
label=np.array(data_new['PM2.5'][9:],dtype='float32')
'''
import matplotlib.pyplot as plt
import seaborn as sns


# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(data_new.corr(), fmt="d", linewidths=.5, ax=ax)
'''
####模型1:只使用PM2.5指标
PM=data_new['PM2.5']
PM_mean=int(PM.mean())
PM_the=int(PM.var()**0.5)
PM=(PM-PM_mean)/PM_the
w=np.random.rand(1,10)
theta=0.1
m=len(label)
for i in range(100):
    loss=0
    i=i+1
    gradient=0
    for j in range(m):
        x=np.array(PM[j:j+9])
        x=np.insert(x,0,1)
        error=label[j]-np.matmul(w,x)
        loss+=error**2
        gradient+=error*x
    loss=loss/(2*m)
    print(loss)
    w=w+theta*gradient/m






















  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值