给定训练集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。
本次作业用到的知识主要就是线性回归了, 会用到梯度下降、adagrad、numpy和pandas的使用。
其实数据处理占很大一部分了,如何从一个庞大的表格中,提取出有用的数据,的确是需要一定时间能力,我也是花了整整两天时间,才拼拼凑凑使用numpy和pandas做出了这个案例,建议大家一定手写一遍,虽然很耗时,但是对代码编写能力是极强的锻炼,反正我是喜欢写代码的,不喜欢看那么多的公式和论文
下面是训练后的结果,结果正确率勉强还行
# coding: utf-8
'''
本次实验数据还比较大,可能会跑上几分钟,甚至几十分钟,所以一定检查完了,再运行
本代码中,主要是两个函数:simple_test() 和 complex_test()
simple_test()只用了PM2.5这一个指标,相对不准确,但是比较好写(但是感觉自己写的很烂)
complex_test()用到了所有指标,准确一点,而且代码写的好一些,用到了numpy,速度也快一些
'''
import numpy as np
import pandas as pd
import os
def f(w, b, x):
'''
计算出 w1*x1+w2*x2+ .... +w8*x8+b
到后面才发现,直接用矩阵乘就行了,w是一个矩阵,x是一个矩阵,使用np.dot一步到位
'''
size = len(w)
ans = 0
for i in range(size):
ans += float(w[i]) * float(x[i])
return ans + b
def input_test(data, w, b):
'''
对最简单的模型进行测试,测试结果一般,误差比较大
'''
rows = data.shape[0]
print(f'共有{rows}条数据')
while True:
rnum = input('使用哪一行数据?')
rnum = int(rnum)
x = [data.iloc[rnum][str(z)] for z in range(8)]
real_ans = data.iloc[rnum][str(8)]
real_ans = float(real_ans)
my_ans = f(w, b, x)
err