李宏毅老师ML_HW1——PM2.5预测

处理数据之前的pre-process
观察下载的数据文件train.csv
train.csv只有每个月前20天的数据,另外每个月剩下10天数据用于作业结果评估,对学生不可见
观察数据发现rainfall栏有很多NR表示没有降雨,但是我们只需要数字,因此可以使用excel的替换将NR替换为0,之后再进行处理
在这里插入图片描述
作业要求:前9小时作为训练集,第10小时的PM2.5作为实际结果,实际一共有18个特征——CH4、CO、CO2、NO等,但是这里我们只取相关性最高的PM2.5自身作为feature,实际如果对PM2.5的影响因素很了解,可以在另外的17个特征进行选取。

我们第一次取0 ~ 8时PM2.5作为训练集feature,9时PM2.5作为其label,第二次取1 ~ 9时作为feature,10时的PM2.5作为label…直至feature取到22时,label取到23时,一共features为(3600, 9)的矩阵,labels为(3600, 1)的矩阵
使用梯度下降算法预测PM2.5

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltnp.set_printoptions(precision=3)  # 设置array显示精度,只能设置显示精度不能实际更改其数值精度
np.set_printoptions(suppress=True)  # 抑制小数的科学计数法显示df = pd.read_csv("HW1_data_1.csv")# 数据处理,数据集中包含18个特征,本次训练只使用PM2.5计算和预测
def dataprocess():# feature:feature_data = np.array(df.loc[:, "0":"22"]).reshape([240, 18, 23])  # 取所有行,首index"0"-"14", 尾index"14"-"22"feature = np.zeros((3600, 18, 9))  # 定义feature 容器for i in range(0, 15):feature[240 * i:240 * (i + 1)] = feature_data[:, :, i:9 + i]  # axis=0和1的所有值的每9小时为一组数据,取左不取右feature = feature[:, 9, :]  # 取所有维度的第9行,就是PM2.5的数值(240×15×9个PM2.5)# label:# 9时到23时所有特征数据(包含PM2.5在内所有特征量),因为loc无法操作细致切片,先转成array再切# 只取PM2.5的数据用作预测,所以取[:, 9]240×18每18个中的第10个特征label_data = np.array(df.loc[:, "9":"23"]).reshape([240, 18, 15])[:, 9]label = label_data.reshape(3600, 1)return feature, labelclass Regression:def gradientdescent(self, x, y, epoch=1000, l=10, reg_rate=0.001):'''初始化误差bias:3600个; 初始化weight:9个; 手动调整学习次数epoch; 手动调整学习率l,reg_rate正则化的系数'''n = len(x)  # 实例个数n=3600weights = np.random.randn(x.shape[1], 1)  # y.shape[0]行,1列的数,这些数从均值为0,方差为1的正态分布中生成用来初始化wbiases = np.random.randn(y.shape[0], 1)  # 同样初始化b# biases = np.zeros((y.shape[0], 1))  # 所有的bias都是相同的# 将x*weights+biases变形成X_new*theta,一起更新,同时便于cost求导X_new = np.ones((x.shape[0], x.shape[1] + 1))  # 定义X_new,比x多一列,第一列全为1,后面的列为xX_new[:, 1:] = x  # (3600, 10),除了第一列是1,后面就是就是和x值一样theta = np.full((weights.shape[0] + 1, weights.shape[1]), biases[0])  # 创建比weight多一行的矩阵theta[1:, ] = weights  # 除了第一行是biases的值,后面9行都是weightgrad_sum = np.zeros(theta.shape)# print("weights:", weights.shape, "biases:", biases.shape)  # weights: (9, 1) biases: (3600, 1)# print("X_new:", X_new.shape, "theta:", theta.shape)  # X_new:(3600, 10)  theta: (10, 1)# print(f"theta{theta},和weights{weights}{theta[1:]==weights}")for i in range(epoch):# 第一步:y = w1x1+w2x2+...+w9x9 + b1,一共3600次向量相乘算出初步的预测值a,然后慢慢优化# y_hat = np.dot(x, weights) + biases   # 先x后weights避免shape对应不上y_hat1 = np.dot(X_new, theta)   # 等同于xw+bloss = y_hat1 - y# Adagrad更新θ(权重和偏向)# 这里grad是每一次的梯度,而grad_sum是所有之前的梯度之和grad = 2 * (X_new.transpose().dot(loss))grad_sum += grad ** 2theta -= l * grad / np.sqrt(grad_sum)# cost函数cost = (1 / (2 * n)) * np.linalg.norm(loss)  # np.linalg.norm是numpy自带的欧氏距离计算方法# cost = (1/(2*n))*np.sqrt(np.sum(np.square(y - y_hat)))  # 这个是直接数学运算求向量的欧氏距离,系数是1/(2*n)if (i + 1) % 100 == 0:print(f"经过第{i+1}次训练,cost变为:{cost}")print(f"经过第{i + 1}次训练,y_hat1均值:{round(np.sum(y_hat1)/3600, 4)}与y均值:{round(np.sum(y)/3600, 4)}"f"之差loss平均差变为:{np.sum(loss) / 3600}")print(f"经过第{i + 1}次训练,本次梯度grad变为:{np.sum(grad)/3600}")DP = dataprocess()
R = Regression()
R.gradientdescent(DP[0], DP[1])

输出结果:

经过第100次训练,cost变为:0.17832930592812254
经过第200次训练,cost变为:0.1660618393695226
经过第300次训练,cost变为:0.15927505672924216
经过第400次训练,cost变为:0.15489108318605818
经过第500次训练,cost变为:0.15184467687762343
经过第600次训练,cost变为:0.14964991588379611
经过第700次训练,cost变为:0.14804105402447518
经过第800次训练,cost变为:0.14685216677724566
经过第900次训练,cost变为:0.14597040063815991
经过第1000次训练,cost变为:0.14531528068944696
经过第100次训练,y_hat1均值:17.8139与y均值:24.0569之差平均差loss变为:-6.24304257009874
经过第200次训练,y_hat1均值:18.653与y均值:24.0569之差平均差loss变为:-5.403915186992251
经过第300次训练,y_hat1均值:19.4186与y均值:24.0569之差平均差loss变为:-4.638329558163197
经过第400次训练,y_hat1均值:20.0769与y均值:24.0569之差平均差loss变为:-3.9800706681641165
经过第500次训练,y_hat1均值:20.6393与y均值:24.0569之差平均差loss变为:-3.417681572977715
经过第600次训练,y_hat1均值:21.12与y均值:24.0569之差平均差loss变为:-2.9369228516813766
经过第700次训练,y_hat1均值:21.5316与y均值:24.0569之差平均差loss变为:-2.5253134626240024
经过第800次训练,y_hat1均值:21.8845与y均值:24.0569之差平均差loss变为:-2.172397192822715
经过第900次训练,y_hat1均值:22.1875与y均值:24.0569之差平均差loss变为:-1.8694547147842282
经过第1000次训练,y_hat1均值:22.4478与y均值:24.0569之差平均差loss变为:-1.609182858159369
经过第100次训练,本次梯度grad变为:0.15936844318025478
经过第200次训练,本次梯度grad变为:0.05629405865738792
经过第300次训练,本次梯度grad变为:0.03547007720060113
经过第400次训练,本次梯度grad变为:0.025188272217026478
经过第500次训练,本次梯度grad变为:0.01861384588607305
经过第600次训练,本次梯度grad变为:0.014144000392948834
经过第700次训练,本次梯度grad变为:0.011006343985549796
经过第800次训练,本次梯度grad变为:0.008740552807814514
经过第900次训练,本次梯度grad变为:0.0070594976666507134
经过第1000次训练,本次梯度grad变为:0.005780481608253467

这里还没有使用交叉熵验证和正则化,数据差异却非常小,错误之处谢谢指出。
公式推导:
Regression_PM2.5
课程地址:
李宏毅老师机器学习教学网站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“员工请假”流程及在线表单开发示例

1. “员工请假”流程及在线表单开发示例 1.1. 描述 通过本示例达到快速对F2流程管理平台的在线表单速讯上手及零编码式的开发。实现一个以请假为示例的流程及在线表单,及请假数据的查询。 1.2. 目标效果 (1) 如何配置一个“请假在线表单” &a…

【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

git版本控制系统常用指令,Xmind笔记整理

git仓库使用、项目版本管理基本常用指令 纯手工整理Xmind笔记: 点我下载 预览图: Png: 如有错误,谢谢指出

Spark学习(一) -- Spark安装及简介

标签(空格分隔): Spark 学习中的知识点:函数式编程、泛型编程、面向对象、并行编程。 任何工具的产生都会涉及这几个问题: 现实问题是什么?理论模型的提出。工程实现。思考: 数据规模达到一台机…

Django基本概念、安装、配置到实现框架,Xmind学习笔记

Django从安装、配置到实现简单web框架的基本操作流程 纯手工Xmind笔记整理: 点我下载 预览图: 如有错误,谢谢指出

智慧交通day03-车道线检测实现06:车道线定位及拟合+代码实现

学习目标 了解直方图确定车道线位置的思想我们根据前面检测出的车道线信息,利用直方图和滑动窗口的方法,精确定位车道线,并进行拟合。 1. 定位思想 下图是我们检测到的车道线结果: 沿x轴方向统计每一列中白色像素点的个数&…

USB驱动程序

1、USB驱动程序存在于不同的内核子系统(块设备、网络设备、字符设备等等)和USB主控制器之中。 2、USB核心为USB驱动程序提供了一个用于访问和控制USB硬件的接口,而不必考虑系统当前存在的各种不同类型的USB硬件控制器。 2.1 USB里的设备模型 Linux里一个很重要的概念是设备…

TemplateSyntaxError at XXXX或页面样式未生效

报错TemplateSyntaxError at或页面样式未生效 直观原因就是模板的语法有误&#xff0c;造成这一原因的根源是使用pycharm&#xff08;idea&#xff09;的自动注释&#xff0c;而pycharm没有装django配置&#xff0c;ctrl/时会将block中的内容用html注释<!—>包围内容 对…

智慧交通day03-车道线检测实现07:车道曲率和中心点偏离距离计算+代码实现

学习目标 知道车道曲率计算的方法知道计算中心点偏离距离的计算1.曲率的介绍 曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率&#xff0c;通过微分来定义&#xff0c;表明曲线偏离直线的程度。数学上表明曲线在某一点的弯曲程度的数值。曲率越大&#xff0c;表示…

智慧交通day03-车道线检测实现08: 在离线视频(非实时)中检测车道线+代码实现

学习目标 了解在视频中检测车道线的方法在前面几节中一步步完成摄像机标定、图像畸变校正、透视变换、提取车道线、检测车道线、计算曲率和偏离距离后&#xff0c;在图像上实现了复杂环境下的车道线检测算法。现在我们将视频转化为图片&#xff0c;然后一帧帧地对视频数据进行处…

Django 模板实现(动态)图片/头像展示到页面

Django 模板实现&#xff08;动态&#xff09;图片作头像展示到页面 在网上搜了加载图片到前端的解决方法&#xff0c;大多都比较复杂&#xff0c;要引用PIL&#xff0c;下载Cropper插件&#xff08;可以用于裁图&#xff09;之类的&#xff0c;下面是一个简单易懂的方法实现&…

Django之验证码的实现,简单快捷的方法

Django之验证码的实现&#xff0c;简单快捷的方法 实现验证码随网页变动即时刷新&#xff0c;实现有期限时间 请确保安装好pillow 直接show code&#xff1a; 0、路由urs.py from django.urls import path, re_path from . import views urlpatterns [re_path(r^test/$, vie…

智慧交通day04-特定目标车辆追踪01:总览概述

项目介绍&#xff1a; 运动目标跟踪一直以来都是一项具有挑战性的工作, 也是研究的热点方向. 现阶段, 随着硬件设施 的不断完善和人工智能技术的快速发展, 运动目标跟踪技术越来越重要. 目标跟踪在现实生活中有很 多应用, 包括交通视频监控、运动员比赛分析、智能人机交互 、跟…

智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习

1.Siamese网络 Siamese network就是“连体的神经网络”&#xff0c;神经网络的“连体”是通过共享权值来实现的&#xff0c;如下图所示。共享权值意味着两边的网络权重矩阵一模一样&#xff0c;甚至可以是同一个网络。 如果左右两边不共享权值&#xff0c;而是两个不同的神经网…

CSS如何实现两个a标签元素的文字一个靠左一个靠右,并且能点击分别不同的链接

CSS如何实现两个a标签元素的文字一个靠左一个靠右&#xff0c;并且能点击分别不同的链接 作为一个非专业前端&#xff0c;有时候开发又必须自己写一些简单的前端&#xff0c;在网上有时候不能及时查找到内容&#xff0c;只能自己尝试&#xff0c;如下是实现两个span中的a标签下…

智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamFC(2016)

目标追踪任务是指在一个视频中给出第一帧图像的bbox的位置&#xff0c;在后续的帧中追踪该物体的任务。 目标追踪不同于目标检测的是&#xff1a; 1、需要给出首帧的标定框。 2、只需要给出标定框&#xff0c;后续的搜索范围往往在上一帧图像的附近。 孪生网络是使用深度学习…

word-break|overflow-wrap|word-wrap——CSS英文断句浅析

---恢复内容开始--- word-break|overflow-wrap|word-wrap——CSS英文断句浅析 一 问题引入 今天在再次学习 overflow 属性的时候&#xff0c;查看效果时&#xff0c;看到如下结果&#xff0c;内容在 div 中国换行了&#xff0c;可是两个 P 元素的内容并没有换行&#xff0c;搜索…

智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamRPN(2017)

3.2 SiamRPN(2017) 3.2.1 网络结构 Siam-RPN提出了一种基于RPN的孪生网络结构&#xff0c;由孪生子网络和RPN网络组成&#xff0c;前者用来提取特征&#xff0c;后者用来产生候选区域。其中&#xff0c;RPN子网络由两个分支组成&#xff0c;一个是用来区分目标和背景的分类分…

ubuntu 18 Cannot find installed version of python-django or python3-django.

ubuntu系统下安装了django&#xff0c;但是启动django项目时报错 Cannot find installed version of python-django or python3-django. 原因&#xff1a; ubuntu大于14版本的应该安装python3-django 解决办法&#xff1a; apt-get install python3-django 如果提示你有几个…

智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-DaSiamRPN(2018)

DaSiamRPN网络的全称为Distractor-aware SiamRPN&#xff0c;是基于SiamRPN网络结构&#xff0c;提出更好的使用数据&#xff0c;针对跟踪过程的干扰物&#xff0c;利用更好的训练方式是跟踪更加的鲁棒。 DaSiamRPN认识到了现有的目标追踪数据集中存在的不平衡问题&#xff0c…