TensorFlow项目练手(一)——天气预测

news2024/12/28 21:04:43

项目介绍

通过以往的天气数据和实际天气温度,做一次回归预测,模型的输入是当前的所有特征值,而模型的输出是当天的实际天气温度

字段分析

目前已有的数据有348条svc数据,他们的字段分别代表

  • year:年
  • month:月
  • day:日
  • week:周几
  • temp_2:前天天气
  • temp_1:昨天天气
  • average:在历史中,每年这一天的平均最高温度值
  • actual:当天实际的温度(答案)
  • friend:这一列可能是凑热闹的,你的朋友猜测的可能值,咱们不管它就好了

一、准备数据

1、获取数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
# 使用keras建模方法
from tensorflow.keras import layers
import warnings
warnings.filterwarnings('ignore')
 
filepath = 'temps.csv'
features = pd.read_csv(filepath) # 读取csv数据
features.head() # 查看数据格式

在这里插入图片描述

2、数据可视化

将年月日转成标准格式

import datetime
# 获取年月日数据
years = features['year']
months = features['month']
days = features['day']
 
# 将年月日拼接在一起--字符串类型
dates = []  # 用于存放组合后的日期
for year,month,day in zip(years,months,days):
    date = str(year)+'-'+str(month)+'-'+str(day)  # 年月日之间用'-'向连接
    dates.append(date)
 
# 转变成datetime格式
times = []
for date in dates:
    time = datetime.datetime.strptime(date,'%Y-%m-%d')
    times.append(time)
# 看一下前10行
times[:10]

在这里插入图片描述

将年月日作为x轴,将数据绘制到图上

# 指定绘图风格
plt.style.use('fivethirtyeight')
# 设置画布,22列的画图窗口,第一行画ax1和ax2,第二行画ax3和ax4
fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2,figsize=(20,10))
 
# ==1== actual特征列
ax1.plot(times,features['actual'])
# 设置x轴y轴标签和title标题
ax1.set_xlabel('');ax1.set_ylabel('Temperature');ax1.set_title('actual temp')
# ==2== 前一天的温度
ax2.plot(times,features['temp_1'])
# 设置x轴y轴标签和title标题
ax2.set_xlabel('');ax2.set_ylabel('Temperature');ax2.set_title('temp_1')
# ==3==2天的温度
ax3.plot(times,features['temp_2'])
# 设置x轴y轴标签和title标题
ax3.set_xlabel('Date');ax3.set_ylabel('Temperature');ax3.set_title('temp_2')
# ==4== friend
ax4.plot(times,features['friend'])
# 设置x轴y轴标签和title标题
ax4.set_xlabel('Date');ax4.set_ylabel('Temperature');ax4.set_title('friend')
# 轻量化布局调整绘图
plt.tight_layout(pad=2)

在这里插入图片描述

3、数据预处理

由于Week字段其内容为字符串,需要将其统一变成数字的形式

# week列是字符串,重新编码,变成数值型
features = pd.get_dummies(features)
features.head()

在这里插入图片描述

4、提取特征值

我们将需要预测的标签值取出并从表中移除,此时数据从15个特征变成14个特征

# 获取目标值y,从Series类型变成数组类型
labels = np.array(features['actual'])
# 获取特征值x,即在原数据中去掉目标值列,默认删除行,需要指定轴axis=1指向列
features = features.drop('actual',axis=1)
# 把features从DateFrame变成数组类型
features = np.array(features)
features.shape

在这里插入图片描述

5、数据归一化

为防止由于数据单位不一,跨度大等问题导致的模型准确度不高的问题,对特征数据进行标准化处理

# 导入标准化方法库
from sklearn import preprocessing
input_features = preprocessing.StandardScaler().fit_transform(features)
input_features

在这里插入图片描述

二、构建网络模型

1、设计神经网络模型层

Dense:全连接层,公式是y=Wx+b

# 构建层次
model = tf.keras.Sequential()
# 隐含层1设置16层,权重初始化方法设置为随机高斯分布,加入正则化惩罚项l2
model.add(layers.Dense(16,kernel_initializer='random_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)))
# 隐含层2设置32层
model.add(layers.Dense(32,kernel_initializer='random_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)))
# 输出层设置为1,即输出一个预测结果
model.add(layers.Dense(1,kernel_initializer='random_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)))

2、设计优化器和损失函数

优化器使用梯度下降法SGD,损失函数使用均方误差MSE

# 优化器和损失函数
model.compile(optimizer=tf.keras.optimizers.SGD(0.001),loss='mean_squared_error')

3、开始训练数据

epochs=100训练100次

# 开始训练
model.fit(input_features,labels,validation_split=0.25,epochs=100,batch_size=128)

在这里插入图片描述

4、查看模型结构

model.summary()

在这里插入图片描述

隐含层1有240个参数,它是怎么计算的呢?输入层的shape为[348,14],14个特征;第一个全连接层W的shape为[14,16],16代表隐含层1的特征个数,偏置参数b的shape为[1,16],y=Wx+b。因此参数个数为14*16+16=240。

5、预测模型结果

我们这里对有所的样本都预测一下,来比较预测结果和实际结果的差异

# 预测模型结果
predict = model.predict(input_features)

6、结果可视化

简单绘制一个散点图来看一下,可以看出预测结果和实际结果大体保持相同,稍微存在偏差。感兴趣的同学可以进一步进行特征工程、调节参数,来达到更好的效果。

# 真实值,蓝色实现
fig = plt.figure(figsize=(10,5))
axes = fig.add_subplot(111)
axes.plot(dates,labels,'b-',label='actual')
# 预测值,红色散点
axes.plot(dates,predict,'ro',label='predict')
axes.set_xticks(dates[::50])
axes.set_xticklabels(dates[::50],rotation=45)
 
plt.legend()
plt.show()

在这里插入图片描述

源代码

  • 源码查看

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

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

相关文章

法雷奥汽车 研发工程师笔试题

Adding to pointer that points to an array will______. A. cause an error B.increase the value of the element that the pointer is pointing to C.cause the pointer to point to the next element in the array D.none of the above C. 使指针指向数组中的下一个元素。 …

厄尔尼诺连续高温会导致能源中的原油、天然气、煤炭和电力等期货品种价格下跌

厄尔尼诺是一种发生在热带海洋中的异常现象,其显著特征是赤道太平洋东部和中部海域海水出现显著增温。厄尔尼诺会导致全球气候变化,影响农业、林业、畜牧业、渔业、交通运输业等领域,进而对大宗商品期货行业产生重大影响。本文将从以下几个方…

docker安装的mysql更改全文检索分词配置

这里使用的是mysql8.0,默认使用ngram分词 这里是已经将文件从容器中挂载出来了,没挂载出来要去容器内部更改my.cnf文件并重启mysql容器 步骤 一、查看mysql的分词大小 show variables like %token%;ngram_token_size这里默认是2我已经改为1了 这个值…

Lua学习笔记:浅谈table的实现

前言 本篇在讲什么 Lua中的table的实现 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ &…

CIO40---22亿灯塔工厂建设规划之工业4.0

1-灯塔工厂规划: 行业趋势 在人工智能、物联网和5G技术的深度渗透下,3C既能作为交互的入口又能是交互的出口,3C产业已成为场景最丰富的产业领域,柔性化生产、个性化定制才能给用户提供更好的体验。市场需求要求企业进行数字化升级…

UE4 如何设置玩家Character的两个位置和角度之间的切换

问题:玩家Character的角度不能直接去设置其中的Camera角度,因为Camera的角度是由鼠标X/Y移动增量决定的,同时把Camera的角度传给PlayController中的PlayCameraManneger,PlayCameraManneger是所有Pawn类型的Camera视口总管&#xf…

Netty的事件驱动模型nio,epoll,oio各个使用场景和支持的网络通讯协议

1.首先说一下nio和epoll有什么区别 在Netty中,Epoll和NIO是两种不同的事件驱动模型,用于实现网络通信。它们在底层的实现和性能特征上有一些区别。 1. NIO(Non-blocking I/O):NIO是Java原生的非阻塞I/O模型&#xff…

【NX】NX二次开发中判断曲线是否重合

在NX二次开发中,并没有直接的函数判断两条曲线是否重合,那么我们自己有没有办法判断两条曲线是否重合呢,自然是有的,那么首先我们得定义一下什么叫做重合,几乎重合的曲线算重合吗,这里就涉及到一个容忍度的…

如何控制滚轮横向滑动(原生JS实现方法)

控制滚轮横向滑动 提示:这个是以前讨论的时候遇到的情况 ; 回头想了一下应用场景确实挺多的,.所以今天趁周末大致的记录一下如何通过js去实现【横向滚动】 文章目录 控制滚轮横向滑动解决思路如下1.如何在页面中展示横向滚动条2.如何获取鼠标的【滚动轮】3.通过什么…

AI for Science 交流会来了!科学计算前沿邀您共同探讨

随着深度学习不断驱动技术创新,人工智能科学计算迈向高质量发展道路。百度飞桨作为科学计算的坚定支持者,计划于7月13日举办飞桨科学计算线下交流会。本次交流会以百度飞桨深度学习框架为基座,广泛联动人工智能科学计算领域头部专家学者、高等…

数据宝董事长汤寒林应邀将在2023世界人工智能大会发言

摘要:2023世界人工智能大会即将在上海举行,数据宝董事长、华东江苏大数据交易中心总经理汤寒林应邀将出席产业区块链生态论坛,并将围绕“数据要素流通与交易”话题展开讨论。 由国家发展和改革委员会、科学技术部、工业和信息化部、国家互联…

【Linux】如何将自定义源文件打包并生成动态库

在这之前我们已经讲述了如何将自定义源文件打包并生成静态库,本文来带你了解如何打包成为动态库并使用 动态库打包动态库使用1.增加环境变量方法2.配置.conf文件3.创建一个软连接在当前目录4.创建一个软连接在系统库目录 静态库的加载动态库的加载 关于源文件的书写…

使用Maven创建Java Web项目

环境 windows环境 jdk8 maven3.6 IDEA2022 步骤 1.新建maven工程 使用IDEA工具,File->New->Project->选择项目目录,填写项目名称,选择对应选项,其中Create Git repository可不勾选,如下图所示&#xff…

怎样将递归函数转为非递归函数

一道非常不错的面试题:不支持递归的程序语言如何实现递归程序? 之所以说这道题好,是因为: 首先,它不是纯粹考概念和死记硬背,求职者在回答问题之前需要进行一定的思考; 其次,这道题…

phar协议文件包含

实验目的 通过本实验,了解php封装伪协议,掌握phar协议文件包含的用法 实验环境 操作机:kali 靶机:Windows 2007 实验地址:http://靶机ip/exp/include2/phar/phar1/ 用户名:college 密码:360C…

Script file ‘D:\Anaconda365\Scripts\conda-script.py‘ is not present

运行anaconda,出现错误,找不到conda-script.py, 解决途径: 用everything查找电脑上的conda-script.py文件, 将查到的codna-script.py文件放入Script文件夹完美解决。 再从运行conda list,就不报错了。

监控系统Zabbix

zabbix概述 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监控软件,我们可以: 通过一个友好的界面进行浏览整个网站…

前端Vue自定义精美上下滚动通告栏组件 常用于展示公告信息 上下滚动跑马灯 上下滚动广播

前端Vue自定义精美上下滚动通告栏组件 常用于展示公告信息 上下滚动跑马灯 上下滚动广播,下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13318 效果图如下: # cc-noticeBar #### 使用方法 使用方法 <!-- 默认颜色#333公告栏 -…

YoloV5/YoloV7改进---注意力机制:SRM,卷积神经网络再校准模块,性能优于SE、GE

目录 1.SRM介绍 ​编辑 2.SRM引入到yolov5 2.1 加入common.py中&#xff1a; 2.2 加入yolo.py中&#xff1a; 2.3 yolov5s_SRM.yaml 2.4 yolov5s_SRM1.yaml 3.YOLOv5/YOLOv7魔术师专栏介绍 1.SRM介绍 论文&#xff1a;https://openaccess.thecvf.com/content…

设计模式7:装饰者模式

目录 装饰者模式是要解决什么问题&#xff1f;装饰者模式在JDK中有哪些实际应用&#xff1f;装饰者模式在Android SDK中有哪些实际应用&#xff1f;装饰者模式和适配器模式的区别是什么&#xff1f;装饰者模式和代理模式的区别是什么&#xff1f; 装饰者模式是要解决什么问题&a…