任务描述:利用前9小时数据,预测第10小时的pm2.5的数值,回归任务
kaggle地址:https://www.kaggle.com/c/ml2020spring-hw1
训练集为: 12个月*20天*18维(共4320行) , 24小时(列)
每月的前20天
test为: 18*240行, 9 列
每月的后10天随机采样连续9小时
宏观上理解:
一、X和y什么样的
一个batch中,X可以是18维*9列,对应一个数值y,即第10小时的pm2.5的值
为了方便操作,可以把x拉成一个行向量,18*9=162,这样y=W*x,目标是预测W,线性模型(nn.Linear)
可以在X末尾加上一列常数1,模拟bias,即y = W*x+b(注意:train和test要用相同的操作,如X末尾都要加1,如X都同时归一化或不归一)
二、第二个难点,如何处理数据
可以将同一个月的小时数连接在一起,制作训练集,一个月有20天*24=480小时,每10小时制作成一个batch,可以制作471个batch
实战技巧中,取dataframe.values转成numpy来处理,将同一月份每18行按照水平方式拼接,np.hstack
整个算法的细节以及流程:
1. 加载csv,注意encoding='big5', engine = 'python'
2. 判断df是否有缺失值, df.isnull().any()
3. 是否有异常值,要转换 df.replace("NR",0, inplace = True)
4. 加工数据,拆分X和y
5. 进一步,拆成train和valid
6. 进入pytorch环节
(1)数据初始化,torch.tensor(X,y.....)
(2)定义model,loss,optim
(3)训练,绘图,观察loss,保存最好的model,torch.save(model,path_1)
7. test上预测,test数据加工,X_test转成tensor,加载模型预测,model = torch.load(path_1)
8. 写入csv, import csv