NTU机器学习作业预测PM2.5(自己手写的代码)

给定训练集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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值