基于机器学习进行降雨预测 -- 机器学习项目基础篇(13)

在本文中,我们将学习如何构建一个机器学习模型,该模型可以根据一些大气因素预测今天是否会有降雨。这个问题与使用机器学习的降雨预测有关,因为机器学习模型往往在以前已知的任务上表现得更好,而这些任务需要高技能的个人来完成。

导入库和数据集

Python库使我们可以轻松地处理数据,并通过一行代码执行典型和复杂的任务。

  • Pandas -此库有助于以2D阵列格式加载数据帧,并具有多种功能,可一次性执行分析任务。
  • Numpy - Numpy数组非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn -这个库用于绘制可视化。
  • Sklearn -此模块包含多个库,这些库具有预实现的功能,以执行从数据预处理到模型开发和评估的任务。
  • XGBoost -这包含eXtreme Gradient Boosting机器学习算法,这是帮助我们实现高精度预测的算法之一。
  • Imblearn -此模块包含一个函数,可用于处理与数据不平衡相关的问题。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sbfrom sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
from sklearn.svm import SVC
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from imblearn.over_sampling import RandomOverSamplerimport warnings
warnings.filterwarnings('ignore')

现在,让我们将数据集加载到panda的数据框中,并打印它的前五行。

df = pd.read_csv('Rainfall.csv')
df.head()

在这里插入图片描述

df.shape

输出:

(366, 12)
df.info()

在这里插入图片描述
根据上述关于每列中数据的信息,我们可以观察到没有空值。

df.describe().T

在这里插入图片描述

数据清理

从原始数据源获得的数据被称为原始数据,在我们可以从中得出任何结论或对其进行建模之前需要大量的预处理。这些预处理步骤被称为数据清理,它包括离群值删除,空值插补,以及删除数据输入中的任何类型的差异。

df.isnull().sum()

在这里插入图片描述
因此,在“winddirection”和“windspeed”列中存在一个空值。但"风向“这一栏是怎么回事?

df.columns

输出:

Index(['day', 'pressure ', 'maxtemp', 'temperature', 'mintemp', 'dewpoint','humidity ', 'cloud ', 'rainfall', 'sunshine', '         winddirection','windspeed'],dtype='object')

在这里我们可以观察到在列名中有不必要的空格,让我们删除它。

df.rename(str.strip,axis='columns',inplace=True)df.columns

输出:

Index(['day', 'pressure', 'maxtemp', 'temperature', 'mintemp', 'dewpoint','humidity', 'cloud', 'rainfall', 'sunshine', 'winddirection','windspeed'],dtype='object')

现在是时候进行空值填充了。

for col in df.columns:# Checking if the column contains# any null valuesif df[col].isnull().sum() > 0:val = df[col].mean()df[col] = df[col].fillna(val)df.isnull().sum().sum()

输出:

0

探索性数据分析

EDA是一种使用可视化技术分析数据的方法。它用于发现趋势和模式,或在统计摘要和图形表示的帮助下检查假设。在这里,我们将看到如何检查数据的不平衡和偏斜。

plt.pie(df['rainfall'].value_counts().values,labels = df['rainfall'].value_counts().index,autopct='%1.1f%%')
plt.show()

在这里插入图片描述

df.groupby('rainfall').mean()

在这里我们可以清楚地得出一些观察结果:

  • 在降雨的日子,maxtemp相对较低。
  • 降水日dewpoint 值较高。
  • 在预计会下雨的日子里humidity 很高。
  • 显然,cloud 与降雨相关性大。
  • 降雨日的sunshine亦较少。
  • 降雨日windspeed 较高。

我们从上述数据集中得出的观察结果与真实的生活中观察到的非常相似。

features = list(df.select_dtypes(include = np.number).columns)
features.remove('day')
print(features)

输出:

['pressure', 'maxtemp', 'temperature', 'mintemp', 'dewpoint', 'humidity', 'cloud', 'sunshine', 'winddirection', 'windspeed']

让我们检查数据集中给定的连续特征的分布。

plt.subplots(figsize=(15,8))for i, col in enumerate(features):plt.subplot(3,4, i + 1)sb.distplot(df[col])
plt.tight_layout()
plt.show()

在这里插入图片描述
让我们为连续变量绘制箱形图,以检测数据中存在的异常值。

plt.subplots(figsize=(15,8))for i, col in enumerate(features):plt.subplot(3,4, i + 1)sb.boxplot(df[col])
plt.tight_layout()
plt.show()

在这里插入图片描述
数据中有异常值,但遗憾的是我们没有太多数据,因此我们无法删除此数据。

df.replace({'yes':1, 'no':0}, inplace=True)

有时,存在高度相关的特征,这些特征只是增加了特征空间的维度,对模型的性能没有好处。因此,我们必须检查该数据集中是否存在高度相关的特征。

plt.figure(figsize=(10,10))
sb.heatmap(df.corr() > 0.8,annot=True,cbar=False)
plt.show()

在这里插入图片描述
现在我们将删除高度相关的特征’maxtemp’和’mintep’。但为什么不是temp或dewpoint呢?这是因为temp和dewpoint提供了关于天气和大气条件的不同信息。

df.drop(['maxtemp', 'mintemp'], axis=1, inplace=True)

模型训练

现在,我们将分离特征和目标变量,并将它们分成训练和测试数据,我们将使用这些数据来选择在验证数据上表现最好的模型。

features = df.drop(['day', 'rainfall'], axis=1)
target = df.rainfall

正如我们之前发现的那样,我们使用的数据集是不平衡的,因此,我们必须在将其输入模型之前平衡训练数据。

X_train, X_val, \Y_train, Y_val = train_test_split(features,target,test_size=0.2,stratify=target,random_state=2)# As the data was highly imbalanced we will
# balance it by adding repetitive rows of minority class.
ros = RandomOverSampler(sampling_strategy='minority',random_state=22)
X, Y = ros.fit_resample(X_train, Y_train)

数据集的特征在不同的尺度上,因此在训练之前对其进行归一化将有助于我们更快地获得最佳结果。

# Normalizing the features for stable and fast training.
scaler = StandardScaler()
X = scaler.fit_transform(X)
X_val = scaler.transform(X_val)

现在,让我们训练一些最先进的分类模型,并在我们的训练数据上训练它们。

models = [LogisticRegression(), XGBClassifier(), SVC(kernel='rbf', probability=True)]for i in range(3):models[i].fit(X, Y)print(f'{models[i]} : ')train_preds = models[i].predict_proba(X)print('Training Accuracy : ', metrics.roc_auc_score(Y, train_preds[:,1]))val_preds = models[i].predict_proba(X_val)print('Validation Accuracy : ', metrics.roc_auc_score(Y_val, val_preds[:,1]))

输出:

LogisticRegression() : 
Training Accuracy :  0.8893967324057472
Validation Accuracy :  0.8966666666666667XGBClassifier() : 
Training Accuracy :  0.9903285270573975
Validation Accuracy :  0.8408333333333333SVC(probability=True) : 
Training Accuracy :  0.9026413474407211
Validation Accuracy :  0.8858333333333333

模型评估

从以上准确度来看,我们可以说逻辑回归和支持向量分类器是令人满意的,因为训练和验证准确度之间的差距很低。让我们使用SVC模型绘制验证数据的混淆矩阵。

metrics.plot_confusion_matrix(models[2], X_val, Y_val)
plt.show()

在这里插入图片描述
让我们使用SVC模型绘制验证数据的分类报告。

print(metrics.classification_report(Y_val,models[2].predict(X_val)))

输出:

              precision    recall  f1-score   support0       0.84      0.67      0.74        241       0.85      0.94      0.90        50accuracy                           0.85        74macro avg       0.85      0.80      0.82        74
weighted avg       0.85      0.85      0.85        74

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

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

相关文章

mysql正则表达式

mysql正则表达式 : REGEXP 规则基本和java正则规则一样,有些特殊字符有差异. 举例: -- 匹配以英文开头,4位英文字母8位数字/4位数字-4位数字 select * from tableName where code REGEXP ^[A-Z]{4}[0-9]{8}/[0-9]{3}-[0-9]{3}$ ;将code中的3位数字改成4位.高位补0. -- 数据…

Jmeter快捷方式和应用图标设置

很多人在安装Jmeter,安装到本机却没有icon,每次使用的时候,每次打开应用都要找目录,不太方便。 【解决问题】 使用bin路径下的一个.bat文件,创建快捷方式。 【操作步骤】 Step1、将Jmeter 安装bin路径下的jmeter.bat 发送快捷方…

Linux常见面试题,应对面试分享

操作系统基础 1.cpu占⽤率太⾼了怎么办? 排查思路是什么,怎么定位这个问题,处理流程 其他程序: 1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程 2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程 3.询问开发或者⽼⼤,是什么业务在使⽤这个进程…

实例036 使窗体标题栏文字右对齐

实例说明 窗口标题栏中的文字是窗口的重要说明,该文字可以标示窗口的功能、状态或名称等信息,一般该文字是居左显示的,在本例中设计一个标题栏文字右对齐的窗口。本实例运行结果如图1.36所示。 技术要点 在C# 2.0中实现这一功能非常容易&am…

题目大解析(3)

题目 字符串中的第一个唯一字符 字符串中的第一个唯一字符 原题链接:字符串中的第一个唯一字符 计数法: class Solution { public:int firstUniqChar(string s) {int arr[130] {0};for(auto x : s){arr[x-0];}int i 0;for(auto x : s){if(arr[x-0] …

centos修改DNS方法

如何修复dns服务器?dns服务器由解析器和域名服务器组成,主要存储网络中所有主机的域名和相应的ip地址。关于dns服务器有很多问题,我们将在这里给出一个具体的答案。 1、什么是dns? dns是指:域名服务器(域…

Android高通8.1 Selinux问题

1、最近客户提了一个需求,说要在user版本上面切分辨率,默认屏幕分辨率是2.5 k 执行adb shell指令之后变成 4k 然后adb shell wm size可以查看 2、一开始我能想到就是在文件节点添加权限,这里不管是mtk还是qcom(高通平台&#xff…

将.doc文档的默认打开方式从WPS修改为word office打开方式的具体方法(以win 10 操作系统为例)

将.doc文档的默认打开方式从WPS修改为word office打开方式的具体方法(以win 10 操作系统为例) 随着近几年WPS软件的不断完善和丰富,在某些方面取得了具有特色的优势。在平时编辑.doc文档时候也常常用到wps软件,不过WPS文献也存在…

记录第一篇被”华为开发者联盟鸿蒙专区 “收录的文章

记录第一篇被”华为开发者联盟鸿蒙专区 “社区收录的文章。 坚持写作的动力是什么? 是记录、分享,以及更好的思考 。

培训报名小程序报名确认开发

目录 1 创建页面2 创建URL参数3 信息展示4 消息订阅5 页面传参6 程序预览总结 我们上一篇介绍了报名功能的开发,在用户报名成功后需要展示报名的确认信息,如果信息无误提示用户支付,在支付之前需要让用户进行授权,允许小程序给用户…

从零开始搭建个人博客网站(hexo框架)

1.工具及环境搭建 1)注册GitHub并且新建一个repositories 2)下载node.js以及Git 下载链接: 检验安装是否成功: 【注】:MacOS自带Git,可以直接在终端输入git --version进行检验 3)新建一个…

Springboot04--vue前端部分+element-ui

注意点: 这边v-model和value的区别:v-model是双向绑定的,value是单向绑定 li的key的问题 vue的组件化开发: 1. NPM(类似maven,是管理前段代码的工具) 安装完之后可以在cmd里面使用以下指令 2.…

ffmpeg工具实用命令

说明:ffmpeg是一款非常好用的媒体操作工具,包含了许多对于视频、音频的操作,有些视频播放器,实际上就是套了一个ffmpeg的壳子。本文介绍ffmpeg的使用以及一些较为实用的命令。 安装 ffmpeg是命令行操作的,不需要安装…

Vue+SpringBoot后台管理系统:Vue3+TypeScript项目搭建(一)

写在开始:一个搬砖程序员的随缘记录文章目录 一、Node安装二、Vue CLI安装三、相关的版本四、创建Vue3TypeScript项目五、Vue项目初始化六、项目启动 一、Node安装 查看Note版本 node -v查看npm版本 npm -v然后将npm升级至最新版本 npm -g install npm将npm下载源换至http:…

Electron 应用实现截图并编辑功能

Electron 应用实现截图并编辑功能 Electron 应用如何实现截屏功能,有两种思路,作为一个框架是否可以通过框架实现截屏,另一种就是 javaScript 结合 html 中画布功能实现截屏。 在初步思考之后,本文优先探索使用 Electron 实现截屏…

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力 音频专家森海塞尔携手富有挑战精神的 CUPRA,雕琢时代新贵车型,打造畅快尽兴的驾驶体验 全球知名音频专家森海塞尔与以颠覆传统、充满激情、不甘现状而闻名的汽车品牌 CUPRA 展开合作…

掌握Python的X篇_28_python包管理工具pip命令

本篇将会介绍在实际使用python中最能节省效率的内容,利用第三方库拿来就用。 文章目录 1. pip命令是什么2. pip相关操作2.1 list2.2 install2.3 uninstall2.4 导出和导入2.4.1 freeze命令2.4.2 “-r” 3. 国内镜像4. Python Packges Index网站 1. pip命令是什么 p…

SpringBoot复习:(33)WebMvcAutoconfiguration内部静态类WebMvcAutoConfigurationAdapter

WebMvcAutoconfiguration内部静态类WebMvcAutoConfigurationAdapter实现了WebMvcConfigurer接口,重写了一些方法,也就是默认对Spring Mvc进行了一些配置: 该静态类上有个**Import**注解: Import(EnableWebMvcConfiguration.class) 它的父类…

【uniapp】滚动相关

1、滚动到一定区域,顶部内容置换并置顶 功能: 当我向下滚动时,当关注那一行快到顶部的时候,把左侧区域的内容切换成右侧区域的内容,并置顶 原先我使用v-if来显示隐藏,发现会出现闪屏的现象,后来…

选读SQL经典实例笔记23_读后总结与感想兼导读

1. 基本信息 SQL经典实例 SQL Cookbook [美]安东尼莫利纳罗(Anthony Molinaro) / 人民邮电出版社 / 2018-07 / 其他 人民邮电出版社,2018年7月出版第1版,2021年12月出版第2版 1.1. 读薄率 1版书籍总字数827千字,笔记总字数30…