深度学习实战6-卷积神经网络(Pytorch)+聚类分析实现空气质量与天气预测

文章目录

一、前期工作

  1. 导入库包
  2. 导入数据
  3. 主成分分析(PCA)
  4. 聚类分析(K-means)

二、神经网络模型建立
三、检验模型

大家好,我是微学AI,今天给大家带来一个利用卷积神经网络(pytorch版)实现空气质量的识别分类与预测。
我们知道雾霾天气是一种大气污染状态,PM2.5被认为是造成雾霾天气的“元凶”,PM2.5日均值越小,空气质量越好.
空气质量评价的主要污染物为细颗粒物(PM2.5)、可吸入颗粒物(PM10)、二氧化硫(SO2)、二氧化氮(NO2)、臭氧(O3)、一氧化碳(CO)等六项。
在这里插入图片描述

现在我们收集了多个城市的天气指标数据,数据样例如下:
在这里插入图片描述

一、前期工作

1. 导入库包

import torch
import torch.nn as nn
import torch.utils.data as Data
import numpy as np
import pymysql
import datetime
import csv
import time
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

2. 导入数据

data =pd.read_csv("weather.csv",encoding='gb18030')
data = data.drop(columns=data.columns[-1])
print(data)

3. 主成分分析(PCA)

天气数据中变量有6个,这增加分析问题的难度与复杂性,而且数据中多个变量之间是具有一定的相关关系的。 因此,我们想到能否在相关分析的基础上,用较少的新变量代替原来较多的旧变量,这里就采用了主成分分析原理(PCA),PCA的基本思想就是降维。下面代码将原理6个变量通过变化映射成两个新变量。

pca = PCA(n_components=2)
new_pca = pd.DataFrame(pca.fit_transform(data))
X = new_pca.values
print(new_pca)

4. 聚类分析(K-means)

K-means是一种迭代求解的聚类分析算法,主要步骤是:我们将设定分组类K,系统随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象重新计算。这个过程将不断重复直到满足某个终止条件。聚类算法这边直接调用sklearn.cluster中的KMeans算法。当数据没有类别标注的时候,我们可以采用无监督学习聚类分析进行标注每条数据的簇类。

kms = KMeans(n_clusters=6)  # 6表示聚类的个数
#获取类别标签
Y= kms.fit_predict(data)
data['class'] = Y
data.to_csv("weather_new.csv",index=False) #保存文件#绘制聚类发布图
d = new_pca[Y == 0]
plt.plot(d[0], d[1], 'r.')
d = new_pca[Y == 1]
plt.plot(d[0], d[1], 'g.')
d = new_pca[Y == 2]
plt.plot(d[0], d[1], 'b.')
d = new_pca[Y == 3]
plt.plot(d[0], d[1], 'y.')
d = new_pca[Y == 4]
plt.plot(d[0], d[1],'c.')
d = new_pca[Y == 5]
plt.plot(d[0], d[1],'k.')
plt.show()

在这里插入图片描述
图中将数据用不同颜色分为6类,从图中可直观得看到数据位置相近的分为一类。

二、神经网络模型建立

class MyNet(nn.Module):def __init__(self):super(MyNet, self).__init__()self.con1 = nn.Sequential(nn.Conv1d(in_channels=1, out_channels=64, kernel_size=3, stride=1, padding=1),nn.MaxPool1d(kernel_size=1),nn.ReLU(),)self.con2 = nn.Sequential(nn.Conv1d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1),nn.MaxPool1d(kernel_size=1),nn.ReLU(),)self.fc = nn.Sequential(# 线性分类器nn.Linear(128*6*1, 128),  nn.ReLU(),nn.Linear(128, 6),# nn.Softmax(dim=1),)self.mls = nn.MSELoss()self.opt = torch.optim.Adam(params=self.parameters(), lr=1e-3)self.start = datetime.datetime.now()def forward(self, inputs):out = self.con1(inputs)out = self.con2(out)out = out.view(out.size(0), -1)  # 展开成一维out = self.fc(out)return outdef train(self, x, y):out = self.forward(x)loss = self.mls(out, y)self.opt.zero_grad()loss.backward()self.opt.step()return lossdef test(self, x):out = self.forward(x)return outdef get_data(self):with open('weather_new.csv', 'r') as f:results = csv.reader(f)results = [row for row in results]results = results[1:1500]inputs = []labels = []for result in results:# one-hot独热编码one_hot = [0 for i in range(6)]index = int(result[6])-1one_hot[index] = 1labels.append(one_hot)input = result[:6]input = [float(x) for x in input]inputs.append(input)inputs = np.array(inputs)labels = np.array(labels)inputs = torch.from_numpy(inputs).float()inputs = torch.unsqueeze(inputs, 1)labels = torch.from_numpy(labels).float()return inputs, labelsdef get_test_data(self):with open('weather_new.csv', 'r') as f:results = csv.reader(f)results = [row for row in results]results = results[1500: 1817]inputs = []labels = []for result in results:label = [result[6]]input = result[:6]input = [float(x) for x in input]label = [float(y) for y in label]inputs.append(input)labels.append(label)inputs = np.array(inputs)inputs = torch.from_numpy(inputs).float()inputs = torch.unsqueeze(inputs, 1)labels = np.array(labels)labels = torch.from_numpy(labels).float()return inputs, labels

三、训练模型

EPOCH = 100
BATCH_SIZE = 50net = MyNet()
x_data, y_data = net.get_data()
torch_dataset = Data.TensorDataset(x_data, y_data)
loader = Data.DataLoader(dataset=torch_dataset,batch_size=BATCH_SIZE,shuffle=True,num_workers=2,)
for epoch in range(EPOCH):for step, (batch_x, batch_y) in enumerate(loader):# print(step)# print(step,'batch_x={};  batch_y={}'.format(batch_x, batch_y))a = net.train(batch_x, batch_y)print('step:',step,a)# 保存模型
torch.save(net, 'net.pkl')

开始训练:

step: 0 tensor(3.6822, grad_fn=<MseLossBackward0>)
step: 1 tensor(61.2186, grad_fn=<MseLossBackward0>)
step: 2 tensor(18.2877, grad_fn=<MseLossBackward0>)
step: 3 tensor(4.3641, grad_fn=<MseLossBackward0>)
step: 4 tensor(6.7846, grad_fn=<MseLossBackward0>)
step: 5 tensor(9.4255, grad_fn=<MseLossBackward0>)
step: 6 tensor(5.4232, grad_fn=<MseLossBackward0>)
step: 7 tensor(4.1342, grad_fn=<MseLossBackward0>)
step: 8 tensor(2.0944, grad_fn=<MseLossBackward0>)
step: 9 tensor(1.4549, grad_fn=<MseLossBackward0>)
step: 10 tensor(0.9372, grad_fn=<MseLossBackward0>)
step: 11 tensor(1.0688, grad_fn=<MseLossBackward0>)
step: 12 tensor(0.6717, grad_fn=<MseLossBackward0>)
step: 13 tensor(0.6158, grad_fn=<MseLossBackward0>)
step: 14 tensor(0.6889, grad_fn=<MseLossBackward0>)
step: 15 tensor(0.5306, grad_fn=<MseLossBackward0>)
step: 16 tensor(0.5781, grad_fn=<MseLossBackward0>)
step: 17 tensor(0.3959, grad_fn=<MseLossBackward0>)
step: 18 tensor(0.4629, grad_fn=<MseLossBackward0>)
step: 19 tensor(0.3646, grad_fn=<MseLossBackward0>)

四、检验模型

# 加载模型
net = torch.load('net.pkl')
x_data, y_data = net.get_test_data()
torch_dataset = Data.TensorDataset(x_data, y_data)loader = Data.DataLoader(dataset=torch_dataset,batch_size=100,shuffle=False,num_workers=1,)
num_success = 0
num_sum = 317
for step, (batch_x, batch_y) in enumerate(loader):# print(step)output = net.test(batch_x)# output = output.detach().numpy()y = batch_y.detach().numpy()for index, i in enumerate(output):i = i.detach().numpy()i = i.tolist()j = i.index(max(i))print('输出为{}标签为{}'.format(j+1, y[index][0]))loss = j+1-y[index][0]if loss == 0.0:num_success += 1print('正确率为{}'.format(num_success/num_sum))

输出结果:

....
输出为3标签为3.0
输出为4标签为4.0
输出为5标签为5.0
输出为1标签为1.0
输出为3标签为3.0
输出为3标签为3.0
输出为3标签为3.0
输出为4标签为4.0
正确率为0.9495268138801262

模型预测结果为94.95%;
数据中字段“fcm”分类,表示数据的类别:
数字1表示:空气质量:优;
数字2表示:空气质量:良;
数字3表示:空气质量:轻度污染;
数字4表示:空气质量:中度污染,雾霾
数字5表示:空气质量:重度污染,雾霾
数字6表示:空气质量:严重污染,雾霾
数据集的获取私信我!后期有更精彩和更有深度的实战内容,敬请期待!

往期作品:

深度学习实战项目

1.深度学习实战1-(keras框架)企业数据分析与预测

2.深度学习实战2-(keras框架)企业信用评级与预测

3.深度学习实战3-文本卷积神经网络(TextCNN)新闻文本分类

4.深度学习实战4-卷积神经网络(DenseNet)数学图形识别+题目模式识别

5.深度学习实战5-卷积神经网络(CNN)中文OCR识别项目

6.深度学习实战6-卷积神经网络(Pytorch)+聚类分析实现空气质量与天气预测

7.深度学习实战7-电商产品评论的情感分析

8.深度学习实战8-生活照片转化漫画照片应用

9.深度学习实战9-文本生成图像-本地电脑实现text2img

10.深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)

11.深度学习实战11(进阶版)-BERT模型的微调应用-文本分类案例

12.深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

13.深度学习实战13(进阶版)-文本纠错功能,经常写错别字的小伙伴的福星

14.深度学习实战14(进阶版)-手写文字OCR识别,手写笔记也可以识别了

15.深度学习实战15(进阶版)-让机器进行阅读理解+你可以变成出题者提问

16.深度学习实战16(进阶版)-虚拟截图识别文字-可以做纸质合同和表格识别

17.深度学习实战17(进阶版)-智能辅助编辑平台系统的搭建与开发案例

18.深度学习实战18(进阶版)-NLP的15项任务大融合系统,可实现市面上你能想到的NLP任务

19.深度学习实战19(进阶版)-ChatGPT的本地实现部署测试,自己的平台就可以实现ChatGPT

…(待更新)

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

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

相关文章

chatgpt赋能python:Python主成分分析(PCA):什么是PCA及其在机器学习中的应用?

Python主成分分析&#xff08;PCA&#xff09;&#xff1a;什么是PCA及其在机器学习中的应用&#xff1f; 介绍PCA 主成分分析&#xff08;PCA&#xff09;是一种数据降维技术&#xff0c;可以用于减少数据集中的特征数量&#xff0c;并创建新的独立特征&#xff0c;可以更好…

chatgpt赋能python:Python主成分分析简介

Python主成分分析简介 主成分分析&#xff08;PCA&#xff09;是一种常用的数据分析技术&#xff0c;用于降低多维数据集的维度&#xff0c;并发现主要特征。在Python中&#xff0c;可以使用scikit-learn库来实现PCA。 PCA可以应用于数据挖掘、图像处理、信号处理等领域。通过…

chatgpt赋能python:Python主成分分析(PCA)结果解读

Python主成分分析(PCA)结果解读 主成分分析(PCA)作为一种重要的多元统计方法&#xff0c;可以对多个变量进行降维处理&#xff0c;从而提取出相关性最高的主成分作为新的维度来进行数据分析和可视化。Python是一种流行的编程语言&#xff0c;它提供了许多快速和灵活的PCA库&am…

基于主成分分析对浙江省各区县综合实力进行排名

个人主页:https://yang1he.gitee.io 干货会越来越多的&#xff0c;欢迎来玩 基于主成分分析对浙江省各区县综合实力进行排名 Chatgpt,Yangchichi 摘 要&#xff1a; 本文基于主成分分析方法&#xff0c;对浙江省各区县的综合实力进行排名。采集的数据包括GDP总量、人均GDP、固…

程序员是如何一步一步被诈骗的?

后来我终于明白电信诈骗来的时候像天气一样难以预料&#xff0c;但是你谨慎对待也是完成可以避免的。下边是来自一位在2020 年 4月30日 下午遭遇电信诈骗的读者的亲身经历&#xff0c;请大家认真看完&#xff0c;希望有所启发和帮助。 前言 今天之前&#xff0c;每每看到一些电…

涨知识了!网络招嫖诈骗产业流程及风险分析

近期&#xff0c;360手机先赔收到用户反馈&#xff0c;在网络招嫖过程中被骗5100元。通过对类似诈骗手法的分析汇总&#xff0c;可以看出网络招嫖诈骗流程化&#xff0c;大致分为引流、切客、诱导支付三个环节。 网络招嫖诈骗流程 引流 在色情网站发帖或者进行资源板块交换&a…

python算法实现反欺诈案例完整建模流程!电信诈骗这么多?

近年来&#xff0c;国内的电信诈骗案件呈愈演愈烈之势&#xff0c;本文以某省电信公司简化版本的防诈骗模型为案例&#xff0c;利用python机器学习工具&#xff0c;使用随机森林算法&#xff0c;从数据处理、特征工程、到反诈骗模型的模型的构建及评估等完整流程进行一个简单的…

近期关于AIGC方面的学习笔记和思路整理

LLM 对于LLM&#xff0c;我现在重点关注在这几个方面&#xff1a; 开源且可私有化部署的代码生成模型&#xff1a; 因为大部分软件企业对于安全都很重视&#xff0c;文档、数据、代码一般都会尽量避免被泄露。所以很难使用类似Copilot或者OpenAI的Bito这种需要连到互联网上的…

AgentGPT安装使用教程

简介 AgentGPT允许您配置和部署自主人工智能代理。命名你自己的自定义人工智能&#xff0c;让它实现任何可以想象的目标。它将试图通过思考要做的任务、执行这些任务并从结果中学习来达到目标&#x1f680;. AgentGPT英文官方网站&#xff1a;reworkd/AgentGPT AgentGPT中文安…

用热爱,走一些“远”路!

相伴&#xff1a;开源十四载&#xff0c;更适合成长中企业的项目管理工具 盛夏来临&#xff0c;2023年也过去了一半。回顾上半年&#xff0c;禅道团队不断突破&#xff0c;拥抱变化&#xff0c;迎接新的机遇和挑战&#xff0c;一些来之不易的突破&#xff0c;让我们惊叹、思考…

告别过去,拥抱未来:一个Java开发者的成长之路

时光飞逝&#xff0c;不知不觉已经到了大四毕业的时候。回顾这四年的学生生涯&#xff0c;Java开发是让我最为热爱和投入的一部分。在这里&#xff0c;我想和大家分享我在Java开发方面的收获、经验和感悟&#xff0c;同时也向过去的自己告别&#xff0c;迎接未来的挑战。 从入门…

俩小伙一晚上写了个AI应用,月入两万??(文末附开发教程)

开发出一款能够与 AI 对话生成和编辑思维导图的工具&#xff0c;听起来似乎只能是一群专业的 AI 背景团队花费大量的时间和精力训练模型&#xff0c;打磨应用才能完成的事情。 但是&#xff0c;两名大学生却在一夜之间完成了&#xff0c;就像炼金术士将庸俗的材料转化成黄金一样…

俩小伙一晚上写了个 AI 应用,月入两万??(文末附开发教程)

开发出一款能够与 AI 对话生成和编辑思维导图的工具&#xff0c;听起来似乎只能是一群专业的 AI 背景团队花费大量的时间和精力训练模型&#xff0c;打磨应用才能完成的事情。 但是&#xff0c;两名大学生却在一夜之间完成了&#xff0c;就像炼金术士将庸俗的材料转化成黄金一…

【CNN基础】一文读懂批归一化(Batch Normalization)

目录 1、批归一化&#xff08;Batch Normalization&#xff09;的含义以及如何理解 2、批归一化&#xff08;BN&#xff09;算法流程 3、什么时候使用Batch Normalization 总结 1、批归一化&#xff08;Batch Normalization&#xff09;的含义以及如何理解 Batch Normaliza…

桌面安装包里的安装程序都包含什么?

下图是安装包里面的内容&#xff1a; ArcGIS Coordinate Systems Data – 包含 GEOCON 变换方法所需要的数据文件以及美国&#xff08;VERTCON 和 GEOID12B&#xff09;和世界 (EGM2008) 的垂直变换文件 我们一般不采用GEOCON方法转换数据&#xff0c;所以对我们来说这个包用处…

chatgpt赋能python:Python股票买入指南:如何用Python优化股票交易

Python股票买入指南&#xff1a;如何用Python优化股票交易 在当今的数字时代&#xff0c;称为“量化交易”的股票交易战略越来越受欢迎。这种交易方式基于数据分析和算法&#xff0c;利用计算机快速处理信息和大数据量的优势&#xff0c;从而提高投资回报率。 Python作为一种…

靠AI六小时搞出蝙蝠侠动画电影,小哥喜提百万浏览量

詹士 发自 凹非寺量子位 | 公众号 QbitAI 用ChatGPT和MidJourney制作动画电影&#xff0c;6小时足矣。 一位名叫Ammaar Reshi的湾区设计师用上述两个生成AI模型&#xff0c;成功做出一部蝙蝠侠的动画小电影&#xff0c;效果也是相当可。 片头雷鸣电闪&#xff0c;直接把蝙蝠侠阴…

基于大模型来构建自己非结构化数据集的问答数据对

在instruct gpt 出来以前文本生成的输入只有原文。出现了instruct gpt以后。我们需要做一个特征丰富工程。通过特征丰富工程来提升文本生成任务的效果。如果仅仅是问答那就不要做这么大的模型。问答一般长度在1024以内可以解决掉。你见过什么样子的对话是长到没边际的吗。我想&…

9000万美元的天价酬劳!马斯克起诉撮合推特收购的律所“趁火打劫”

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 最近&#xff0c;马斯克又搞新事情了。 据 CNBC 报道&#xff0c;7 月 5 日&#xff0c;马斯克向加州三藩市高等法院提起诉讼&#xff0c;指控负责 Twitter 收购案的美国律所 Wachtell,…

如何获得英语单词的发音?增加 IPA-SAMPA

简 介&#xff1a; 为了获得英文单词的读音并进行显示&#xff0c;使用 eng_to_ipa 或者单词的 IPA&#xff0c; 然后通过自行编写的转换程序&#xff0c;将IPA 转换成 sampa并进行显示。 关键词&#xff1a; sampa&#xff0c;ipa #mermaid-svg-GwdfYZF6FSFzojGQ {font-family…