当前位置: 首页 > news >正文

基于机器学习的地震预测(Earthquake Prediction with Machine Learning)

基于机器学习的地震预测(Earthquake Prediction with Machine Learning)

  • 一、地震是什么
  • 二、数据组
  • 三、使用的工具和库
  • 四、预测要求
  • 五、机器学习进行地震检测的步骤
  • 六、总结

一、地震是什么

地震几乎是每个人都听说过或经历过的事情。地震基本上是一种自然发生的事件,当地壳中突然释放能量导致地面振动或晃动时,就会发生地震。在地球表面之下,有很大一部分被称为构造板块,它们构成了地球的外层。这些部分经常移动并相互作用。由于这种相互作用和运动,这些板块可能会因摩擦而锁定,这反过来又会导致压力增加。

随着时间的推移,随着压力的不断积累,在某一点上,它达到了一个点,沿着板块边界的岩石破裂,释放出大量储存的能量。这种释放出来的能量以地震波的形式在地壳中传播,从而导致地面震动和颤抖。地震的强度和强度都是用里氏震级来测量的。

二、数据组

地震数据集包含2001年1月1日至2023年1月1日在世界各地发生的各种地震的详细信息。它是与地震事件相关的结构化数据。这些数据是由地震研究所、研究机构等组织收集和维护的。这个数据集可以用来建立和训练各种机器学习模型,这些模型可以预测地震,这将有助于拯救人们的生命,并采取必要的措施来减少造成的损害。
数据集可以使用此此链接下载: dataset

该数据集总共包含782行和19个属性(列)。属性的简要描述如下:

标题: 指给地震起的名称/标题

震级: 用来描述地震的强度或强度

日期: 地震发生的日期和时间

cdi: cdi表示给定地震记录的最高烈度

mmi: mmi代表修正Mercalli烈度,表示地震的最大仪器报告烈度

alert: 此属性指的是与特定地震相关的可能威胁或风险的警报级别

tsunami: 表示本次地震是否引起海啸

震级: 用来描述地震的严重程度。地震的重要性与这个数字成正比

net: 表示采集数据的源的id。

nst: 此属性用于描述用于确定地震位置的地震台站的总数。

dmin: 表示离震中最近的监测站的水平距离。

缺口: 用于确定地震的水平位置。数值越小,表明确定地震水平位置的可靠性越高

magType: 这是指用于计算地震震级的算法类型

深度: 表示地震开始破裂的深度

纬度,经度: 用坐标系统表示地震发生的位置

location: 该国家的具体位置

大陆: 指发生地震的大陆

country: 表示受地震影响的国家

三、使用的工具和库

该项目使用了以下Python库:

● Numpy
● Matplotlib
● Seaborn
● Pandas
● Scikit-learn

四、预测要求

先决条件是:

NumPy:

  • 理解数组和矩阵运算。

  • 能够有效地进行数值计算。

Pandas:

  • 熟练处理和分析结构化数据。

  • 了解数据框架和系列。

  • 能够处理和预处理地震数据,包括清理、过滤和转换数据。

Matplotlib:

  • 掌握基本的绘图技术,包括线形图、散点图和直方图。

  • 理解子图,以便在单个图中创建多个图。

  • 熟悉高级绘图类型,如热图、等高线图和地理可视化。

Seaborn:

  • 了解统计数据可视化技术。

  • Seaborn功能的知识,创建视觉吸引力和信息丰富的情节。

Scikit-learn:

  • 熟悉机器学习概念,如监督学习和无监督学习。

  • 了解模型选择、培训和评估程序。

五、机器学习进行地震检测的步骤

  1. 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
  1. 导入所需库后,可以读取和显示数据集。可以使用**read_csv()**函数读取数据集,并且可以使用head()函数显示数据集的前5行。
data = pd.read_csv('earthquake_data.csv')
data.head()

输出:

输出显示数据集的前5行。
在这里插入图片描述
3. 一旦数据被读取,就可以对数据进行一些基本的探索性数据分析,以获得对数据的一些见解,并对数据有更多的了解。

data.info()

输出:

info()函数用于获取有关数据集中存在的属性、数据集中的行数、每个属性中缺失值的数量、每个属性的数据类型等信息。在这里插入图片描述
4. 除了info()函数,description()函数还可用于获取数据集的统计信息。

data.describe().transpose()

输出:

description()函数为属于数据集的所有属性提供最小值,最大值,平均值,标准差等统计见解。

在这里插入图片描述
5. isnull()函数可用于查找数据集中是否存在任何空值,聚合函数sum()用于获取数据集中每个属性中空值的总数。

data.isnull().sum()

输出:

输出图像显示数据集所有属性中空值的总数。列alert、continent和country分别有367,576和298个空值。
在这里插入图片描述
6. 在获得关于数据的一些基本见解之后,我们可以继续清理数据集。清理数据集将有助于将其转换为更好的形式,以便以后用于训练各种机器学习模型。

features = ["magnitude", "depth", "cdi", "mmi", "sig"]
target = "alert"
data = data[features + [target]]
data.head()

输出:

在上面给出的代码中,我们创建了一个名为features的列表,其中包含名为震级,深度,cdi, mmi, sig。我们将使用机器学习模型来预测警报属性。

警报属性存储在一个名为target的变量中。在下一步中,我们将创建一个数据框架,并只选择功能列表中提到的列/属性以及目标变量。
新数据框的前10行可以使用head()函数显示。在这里插入图片描述
在这里插入图片描述

  1. 警报属性中所有值的计数可以使用饼图显示。
plt.figure(figsize = (6,12))
plt.pie(x = data[target].value_counts(), labels = ['blue','orange','green','red'], autopct = '%.2f')
plt.title("Distribution of values in alert column")
plt.legend()
plt.show()

输出:

饼状图显示警报列中出现的各种值的分布。各种值出现的百分比为:蓝色= 78.31%,橙色= 13.49%,绿色= 5.30%,红色= 2.89%。
在这里插入图片描述
8. 前面我们已经看到数据集中的一些属性包含某些空值。由于空值不多,因此可以使用dropna()函数从数据集中删除这些值。

data.dropna(inplace=True)
data.info()

输出:

使用dropna()函数删除空值,在下一行中,使用info()函数获取有关数据集的一些基本信息。
在这里插入图片描述
9. 在下一步中,我们将对数据进行预处理。在此步骤中,将更改某些属性的数据类型。代码中将属性cdi、mmi、sig从int64类型转换为int8类型,将属性depth从float64类型转换为int16类型。属性警报也从类型对象转换为类别。这些转换主要是为了内存优化。转换数据类型的其他原因是,使用整数而不是浮点数以更好的方式表示数据。

data = data.astype({'cdi': 'int8', 'mmi': 'int8', 'sig': 'int8', 'depth': 'int16', 'alert': 'category'})
data.info()

输出:一旦转换了属性的数据类型,就可以使用info()函数来显示属性关于属性及其数据类型的信息。
在这里插入图片描述
10. 现在,让我们检查目标(警报)列中出现的各种值的计数。我们可以使用条形图来实现这个目的。

data[target].value_counts().plot(kind='bar', title='Count (target)', color=['green', 'yellow', 'orange', 'red']);

输出:输出图像是一个条形图,显示alert属性中所有值的计数。的值是绿色,黄色,橙色,红色。大多数值是绿色的,其次是黄色、橙色和红色。在这里插入图片描述
11. 在前面的步骤中,可以看到alert属性中最常出现的值是绿色的价值。这表明alert属性是不平衡的,即alert属性中的值没有相同的出现次数。为了克服alert属性不平衡的问题,我们可以执行over-sampling过采样也有助于模型表现良好,因为它消除了被偏向于出现次数最高的值的可能性。

X = data[features]
y = data[target]X = X.loc[:,~X.columns.duplicated()]sm = SMOTE(random_state=42)
X_res, y_res= sm.fit_resample(X, y,)y_res.value_counts().plot(kind='bar', title='Count (target)', color=['green', 'orange', 'red', 'yellow']);

在前两行中,变量X被初始化为名为data的数据框。这是一个功能列表先前指定的属性。变量y是用数据框架的目标(警报)列初始化的。在下一行中,代码从X值中删除所有重复的列。只有那些列不会重复,并将存储在X中。完成此操作后,我们将创建SMOTE算法的一个新实例。SMOTE代表合成少数过采样技术。这是一种常用的解决问题的技术机器学习中的类不平衡。创建SMOTE算法的实例后,可以使用该实例应用SMOTE算法对变量X和y进行重采样,应用SMOTE算法得到的值为分别存储在x_res和y_res变量中。完成后,我们可以使用条形图绘制y_res变量中的值。

输出:从柱状图中可以明显看出,y_res变量中存在的所有值具有相同数量的出现了。在这里插入图片描述
12. 接下来,我们可以使用train_test_split()将数据分割为训练数据和测试数据函数。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=42)

注意,在上面的代码中,我们使用变量X_res和y_res作为独立变量和因变量分别为。我们使用X_res和y_res,因为它没有问题alert属性不平衡。原始数据帧在告警中面临着不平衡的问题属性。

  1. 在我们开始在数据集上实现模型之前,我们必须使数据符合标准这将最终帮助机器学习模型以更好的方式理解数据。这可以使用StandardScaler()函数来完成。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
  1. 我们可以绘制出数据集中存在的各种值之间的相关性。相关矩阵表示数据集中存在的各种变量之间的关系,以及每个变量如何受到其他变量的影响。也可以使用下面的代码绘制它。
plt.figure(figsize = (10,6))
sns.heatmap(data.corr(), annot=True, fmt=".2f")
plt.plot()

输出:
相关矩阵表示数据集中存在的各种值之间的相关系数。在这里插入图片描述
15. 下一步,我们可以在训练数据集上训练各种机器学习模型这些模型的性能可以使用测试数据集进行评估。

models = []
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(random_state=42)
dt.fit(X_train, y_train)

可以使用predict()方法对模型进行预测。模型的性能可以使用指标accuracy_score、classification_report、confusion_matrix。

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
dt_pred = dt.predict(X_test)
print(accuracy_score(dt_pred,y_test)*100)
print(classification_report(dt_pred, y_test))
sns.heatmap(confusion_matrix(dt_pred, y_test), annot = True)
plt.plot()

输出:出现在混淆矩阵对角线上的值(54,64,60,51)表示被模型正确分类的数据点的数量。从准确性来看得分,显然决策树分类器的准确率为88.07%。在这里插入图片描述
16. 我们要实现的下一个模型是KNN。

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)

该模型的预测方式与之前的预测方式相似

knn_pred = knn.predict(X_test)
print(accuracy_score(knn_pred, y_test)*100)
print(classification_report(knn_pred, y_test))
sns.heatmap(confusion_matrix(knn_pred, y_test), annot = True)
plt.plot()

输出:
混淆矩阵和准确度分数可以像前面一样显示。从输出可以明显看出KNN的准确率为89.23%。在这里插入图片描述
在这里插入图片描述
17. 在使用KNN算法之后,我们可以在数据集上使用随机森林分类器。

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=42)
rf.fit(X_train, y_train)

来自随机森林分类器的预测可以使用predict()方法进行。混淆矩阵和准确性评分可以像前面一样显示。

rf_pred = rf.predict(X_test)
print(accuracy_score(rf_pred, y_test)*100)
print(classification_report(rf_pred, y_test))
sns.heatmap(confusion_matrix(rf_pred, y_test), annot = True)
plt.plot()

输出:可以看出随机森林分类器的准确率为91.15%。
在这里插入图片描述
在这里插入图片描述
18. 我们将实现的最后一个模型是梯度增强分类器。

from sklearn.ensemble import GradientBoostingClassifier
gb = GradientBoostingClassifier(random_state=42)
gb.fit(X_train, y_train)

混淆矩阵和精度可以像前面那样显示。

gb_pred = gb.predict(X_test)
print(accuracy_score(gb_pred, y_test)*100)
print(classification_report(gb_pred, y_test))
sns.heatmap(confusion_matrix(gb_pred, y_test), annot = True)
plt.plot()

输出:梯度增强算法的准确率为92.69%。
在这里插入图片描述
在这里插入图片描述

六、总结

总之,机器学习技术在地震预测方面显示出了很好的结果。通过分析各种数据源,如地震记录、地理空间信息等,机器学习模型可以学习模式、趋势和关系,这些可以帮助识别潜在的地震发生。

虽然机器学习模型可以帮助预测地震,但重要的是要注意,这是一个正在进行的研究领域,实现可靠和准确的预测仍然是一项复杂的任务。领域专家和机器学习工程师之间的合作努力对于推进该领域和开发可以帮助早期检测地震的强大模型至关重要。

相关文章:

基于机器学习的地震预测(Earthquake Prediction with Machine Learning)

基于机器学习的地震预测(Earthquake Prediction with Machine Learning) 一、地震是什么二、数据组三、使用的工具和库四、预测要求五、机器学习进行地震检测的步骤六、总结 一、地震是什么 地震几乎是每个人都听说过或经历过的事情。地震基本上是一种自…...

《30天自制操作系统》 第一周(D1-D7) 笔记

前言:这是我2023年5月份做的一个小项目,最终是完成了整个OS。笔记的话,只记录了第一周。想完善,却扔在草稿箱里许久。最终决定,还是发出来存个档吧。 一、汇编语言 基础指令 MOV: move赋值,数据传送指令…...

SQL注入:报错注入

SQL注入系列文章:初识SQL注入-CSDN博客 SQL注入:联合查询的三个绕过技巧-CSDN博客 目录 什么是报错注入? 报错注入常用的3个函数 UpdateXML ExtractValue Floor rand(随机数) floor(向上取整&…...

K8s 安装部署-Master和Minion(Node)文档

K8s 安装部署-Master和Minion(Node)文档 操作系统版本:CentOS 7.4 Master :172.20.26.167 Minion-1:172.20.26.198 Minion-2:172.20.26.210(后增加节点) ETCD:172.20.27.218 先安装部署ETC…...

OpenAI 降低价格并修复拒绝工作的“懒惰”GPT-4,另外ChatGPT 新增了两个小功能

OpenAI降低了GPT-3.5 Turbo模型的API访问价格,输入和输出价格分别降低了50%和25%。这对于使用API进行文本密集型应用程序的用户来说是一个好消息。 OpenAI官网:OpenAI AIGC专区:aigc 教程专区:AI绘画,AI视频&#x…...

springboot+value静态属性获取配置文件中的值的操作方法

1.配置类需要让spring管理 2.set方法不要加static 3.如果静态属性是private修饰,则在使用的时候,需要 类名.getXXX方法 如果静态属性是public修饰,则在使用的时候,需要 类名.属性名 import org.springframework.beans.factory.an…...

Prometheus 架构全面解析

在本指南中,我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统,能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标,并根据阈值收到警报。 此外,在当今世界,可观…...

把批量M3U8网络视频地址转为MP4视频

在数字媒体时代,视频格式的转换已成为一项常见的需求。尤其对于那些经常处理网络视频的用户来说,将M3U8格式的视频转换为更常见的MP4格式是一项必备技能。幸运的是,现在有了固乔剪辑助手这款强大的工具,这一过程变得异常简单。下面…...

联合 Maxlinear 迈凌 与 Elitestek 易灵思 - WPI 世平推出基于 FPGA 芯片的好用高效电源解决方案

近期 WPI 世平公司联合 Maxlinear 迈凌电源产品搭配 Elitestek 易灵思 FPGA 共同合作推出基于 FPGA 芯片的好用高效电源解决方案。 Elitestek 易灵思 FPGA 核心产品有 2 大系列 : Trion 系列与钛金系列。Trion 系列主要特点是 : 1. 40nm 工艺 2. 超低功耗 ( 可低至竞争对手的 …...

Keycloak - docker 运行 前端集成

Keycloak - docker 运行 & 前端集成 这里的记录主要是跟我们的项目相关的一些本地运行/测试,云端用的 keycloak 版本不一样,不过本地我能找到的最简单的配置是这样的 docker 配置 & 运行 keycloak keycloak 有官方(Red Hat Inc.)的镜像&#…...

架构篇27:如何设计计算高可用架构?

文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…...

Python 有用的库模块

简介 Python中有许多常用的库或者模块,在写代码的时候或多或少会遇到,本文对其进行总结,方便日后查阅。 pprint Python中的pprint模块是用于打印数据结构(如字典,列表等)的模块,提供了一种以…...

vivado DDS学习

实现DDS通常有两种方式,一种是读取ROM存放的正弦/余弦信号的查表法,另一种是用DDS IP核。这篇学习笔记中,我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT(DDS)的standard模式…...

微信小程序(十六)slot插槽

注释很详细&#xff0c;直接上代码 上一篇 温馨提醒&#xff1a;此篇需要自定义组件的基础&#xff0c;如果不清楚请先看上一篇 新增内容&#xff1a; 1.单个插槽 2.多个插槽 单个插糟 源码&#xff1a; myNav.wxml <view class"navigationBar custom-class">…...

gtest 单元测试

文章目录 前言一、Google Test介绍1.1 gtest源码下载编译1.2 常用API介绍1.3 gtest运行参数介绍 二、Google Mock参考资料 前言 Google Test&#xff08;简称gtest&#xff09;是一个开源的C单元测试框架。和常见的测试工具一样&#xff0c;gtest提供了单体测试常见的工具和组…...

掌握assert的使用:断言在错误检查和调试中不可或缺

断言在错误检查和调试中不可或缺 一、简介二、断言的基本语法和用法三、错误检查与断言四、 调试与断言五、避免滥用断言六、总结 一、简介 断言是一种在程序中用于检查特定条件是否满足的工具。一般用于验证开发者的假设&#xff0c;如果条件不成立&#xff0c;就会导致程序报…...

概念杂记--到底啥是啥?(数据库篇)

文章目录 1.聚集索引&#xff08;clustered index&#xff09;2.非聚集索引&#xff08;Non-clustered index&#xff09;3.聚集索引和非聚集索引区别&#xff1f;4.覆盖索引&#xff08;covering index&#xff09;5、复合索引 &#xff08;Composite Index&#xff09;6.索引…...

Ubuntu20.4 Mono C# gtk 编程习练笔记(四)

连续实时绘图 图看上去不是很清晰&#xff0c;KAZAM录屏AVI尺寸80MB&#xff0c; 转换成gif后10MB, 按CSDN对GIF要求&#xff0c;把它剪裁缩小压缩成了上面的GIF&#xff0c;图像质量大不如原屏AVI&#xff0c;但应该能说明原意&#xff1a;随机数据随时间绘制在 gtk 的 drawin…...

1 月 26日算法练习

文章目录 九宫幻方穿越雷区走迷宫 九宫幻方 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三阶幻方指的是将1~9不重复的填入一个33的矩阵当中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称…...

今日AI大热潮,明日智能风向标

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...