python机器学习及深度学习在空间模拟与时间预测

原文链接icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzUyNzczMTI4Mg==&mid=2247628504&idx=2&sn=6fe3aeb9f63203cfe941a6bb63b49b85&chksm=fa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token=2124656491&lang=zh_CN&scene=21#wechat_redirect

机器学习理论知识

了解机器学习的发展历史、计算原理、基本定义,熟悉机器学习方法的分类,常用机器学习方法,以及模型的评估与选择;熟悉数据预处理的流程,掌握python程序包的使用;理解机器学习在生态水文中的应用,掌握机器学习模型构建方法,学会构建机器学习模型用于地表参数的空间模拟与时间预测,并掌握生态水文过程分析。

机器学习方法

机器学习的发展历史、计算原理、基本定义与术语。

机器学习方法的分类

机器学习的任务主要可以分为监督学习和非监督学习两大类。根据是否拥有标记信息来区分监督/非监督学习。分类和回归是监督学习的代表,聚类是非监督学习的代表。

模型评估与选择

在选择机器学习模型时,首先要明确模型的目的,期望完成何种任务。因此要从误差,模型精度等方面进行评估和选择。

学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,在训练集上的误差又称为“经验误差”,在新样本上的误差称为“泛化误差”。拟合程度指的是机器学习过程中产生的模型对于测试集的适应效果怎么样,其中有“过拟合”和“欠拟合”两种情况。

同时,还会利用“测试集”来测试学习器对新样本的判别能力,以“测试误差”作为泛化误差的近似,常用的方法有留出法,交叉验证法,自助法等。

  1. Python使用说明与代码库
  2. Python简介

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。

Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。

Python是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

Python的发展历史:

Python 是由荷兰人Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。

1991年,Python的第一个解释器诞生了。他是由C语言实现的,有很多语法来自C,又受到了很多ABC语言的影响。

Python1.0版本于1994年1月发布,这个版本的主要新功能是lambda, map, filter和reduce,但是Guido不喜欢这个版本。

Python2.0版本于2000年10月份发布,这个版本的主要新功能是内存管理和循环检测垃圾收集器以及对Unicode的支持。然而,尤为重要的变化是开发的流程的改变,Python此时有了一个更透明的社区。

Python3.0版本于2008年12月份发布,Python3.x不向后兼容Python2.x,这意味着Python3.x可能无法运行Python2.x的代码。Python3代表着Python语言的未来
    Python 2.7 被确定为最后一个 Python 2.x 版本。

Python3 基本语法格式:

a)注释格式:单行注释以 # 开头,多行注释可以用多个 # 号,或者"""和"""。

b)行与缩进:缩进来表示代码块,不需要使用大括号 {} 。

c)导入需要用到的库或函数:在 python 用 import 或者 from...import 来导入相应的模块。

d)数字类型:int(整数);bool(布尔型);float(浮点数);complex(复数)。

e)数据结构:字符串、列表、元组、字典和集合。

编译器的安装与文件的加载

下载Anaconda,官方网址https://www.anaconda.com/products/individual,具体安装教程可参考该网址https://www.jb51.net/article/199555.htm。

本次课程所用到的程序文件后缀均为.ipynb,.ipynb是jupyter notebook格式的python代码,打开jupyter notebook之后点击下图upload即可添加,打开。

​​​​​​​代码库的安装

Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容。用Python开发,许多功能不必从零编写,直接使用现成的即可。

本课程将详细介绍三种功能强大且应用广泛的代码库,即numpy, pandas和matplotlib。Anaconda中已经自带了某些库,可以打开Anaconda Prompt,输入pip list,就可以检查是否已经安装了所需要的代码库。对于未安装的代码库,在Anaconda Prompt中输入pip install (代码库名称),即可完成代码库的安装。

​​​​​​​NumPy库

NumPy代表 “Numeric Python”,它是一个由多维数组对象和用于处理数组的例程集合组成的库。NumPy 中定义的最重要的对象是称为ndarray的N维数组类型,它描述相同类型的元素集合,可以使用基于零的索引访问集合中的项目。

数组的创建

数组的运算

​​​​​​​Pandas库

Pandas是Python语言的一个扩展程序库,主要用于数据分析。它是基于Numpy的,具有强大分析能力的,结构化数据的工具集。Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Excel 导入数据。

DataFrame是Pandas的重要数据结构之一,也是在使用Pandas进行数据分析过程中最常用的结构之一。一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:

DataFrame的创建

​​​​​​​Matplotlib

Matplotlib是Python的绘图库,它可与NumPy一起使用,提供了一种有效的MatLab开源替代方案。

直方图

散点图

常用机器学习算法练习

支持向量机

支持向量机(Support Vector Machine,SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVR(支持向量回归)是SVM(支持向量机)中的一个重要的应用分支。SVR回归与SVM分类的区别在于,SVR的样本点最终只有一类,它所寻求的最优超平面不是SVM那样使两类或多类样本点分的“最开”,而是使所有的样本点离超平面的总偏差最小。

支持向量机框架:

具体的实现代码:

模型结果展示:

​​​​​​​随机森林

随机森林是一种集成算法(Ensemble Learning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。其可以取得不错成绩,主要归功于“随机”和“森林”,一个使它具有抗过拟合能力,一个使它更加精准。其示意图如下所示:

随机森林流程同支持向量机类似,不同之处仅体现在模型构建阶段,具体的模型构建阶段如下图所示:

随机森林的结果展示如下所示:

应用机器学习模型的步骤

数据的收集

根据科学目标,收集相关数据,方法包括但不限于网络爬虫,RSS反馈以及设备返回的实测数据等。

​​​​​​​输入数据的处理

确保数据格式符合机器学习算法的特定要求,如字符串类型转整型数据,量纲不同的数据做归一化处理等。

​​​​​​​输入数据的分析

利用绘图,特征工程,空值查询等方法,对输入数据进行清洗,剔除掉数据集中的异常值和垃圾数据。​​​​​​​

机器学习算法训练

将上述步骤得到的格式化数据输入道算法,从中抽取知识获信息。

​​​​​​​机器学习算法测试

测试算法的工作效果,若不满意算法的输出结果,则应返回上述几个步骤进行改正并重新测试。

​​​​​​​机器学习算法应用

将机器学习算法转换成应用程序,执行实际任务,以检验上述步骤是否可以在实际环境中正常工作。

机器学习的未来发展

机器学习与物理限制

以物理模型为代表的机理模型和以机器学习为代表的数据驱动模型不会相互替代,相反,将二者进行结合可能会成为未来的主流。目前混合模型主要可以分为两个方面,一是利用机理知识指导学习算法关注物理一致性解,二是Hybrid模型的引入。

​​​​​​​迁移学习

迁移学习是一种机器学习的方法,指的是一个预训练的模型被重新用在另一个任务中。主流的迁移学习方法有基于实例的迁移,基于特征的迁移,基于共享参数的迁移和基于关系知识的迁移。

机器学习的数据预处理

确保机器学习模型精度的关键在于输入数据的选择,如果输入数据就存在问题,就会使得模型学到一些错误的信息,最终造成模型误差。

​​​​​​​数据清洗

数据清洗主要涉及到的工作有空值查询,缺失值的插补,文本型变量的转换,异常值的剔除等。

空值查询与缺失值的插补

文本型变量的转换

数据异常值的剔除

​​​​​​​数据集成

合并来自多个数据存储的数据,优秀的集成有助于减少结果数据集的冗余和不一致,有助于提高其后挖掘过程的准确性和速度。

​​​​​​​数据变换

对数据进行规范化处理,以便于后续的信息挖掘。常见的数据变换包括:特征二值化、特征归一化、连续特征变化,定性特征哑编码等。

​​​​​​​数据可视化

利用直方图,散点图,相关系数热力图以及统计变量表格等直观地展现数据的范围、大小、波动趋势,便于后续模型的选择。

空间尺度扩展模型的构建

特征工程

SHAP是Python开发的一个"模型解释"包,可以解释任何机器学习模型的输出。其名称来源于SHapley Additive exPlanation,在合作博弈论的启发下SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”。对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。

训练模型与调优

将处理好的数据放入到XGBoost模型中,对模型进行训练,并通过十折交叉,得到模型最佳超参数。

模型的应用与误差的计算

将测试集输入到训练好的模型中,计算出y值,并绘制散点图,计算模型在训练集和测试集上的R2(拟合系数)。

空间数据处理

对遥感图像进行辐射校正和几何纠正、图像整饰、投影变换、镶嵌、特征提取、分类以及各种专题处理等一系列操作,得到更易于模型处理的遥感影像。

由于遥感影像数量较多,使用ArcGIS逐幅影像处理会耗费大量的时间和精力,因此利用ArcGIS中的IDLE,通过arcpy调用ArcToolBox中的各项工具,实现对遥感图像的批量处理。

尺度扩展与验证

将处理好的遥感影像转为矩阵形式,保证数据形式与训练集保持一致,对整个流域上的蒸散发进行生产。由于多种模型会得到多种产品结果,而又没有流域的真实值来验证结果的好坏,故采用三角帽法对各种结果进行不确定性分析。

深度学习

深度学习概论

深度学习是机器学习的一种。深度学习的概念源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

​​​​​​​深度学习经典模型

深度学习是机器学习的一种。深度学习的概念源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

人工神经网络(ANN)

人工神经网络从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激活函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。

循环神经网络(RNN)

循环神经网络是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络。

卷积神经网络(CNN)

卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习的代表算法之一。卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。

时间尺度扩展模型的构建

数据准备

将2017年站点的蒸散发日尺度数据导入,并绘制折线图。

数据转换

将一列变成两列,第一列是 t 天的蒸散发值,第二列是 t+1 天的蒸散发值。look_back 就是预测下一步所需要的 time steps,timesteps 就是 LSTM 认为每个输入数据与前多少个陆续输入的数据有联系。

模型构建与预测

构建LSTM模型,根据需求设定模型参数

将训练好的模型进行预测,并进行反归一化,最后计算得分,绘制结果图像

原文链接icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzUyNzczMTI4Mg==&mid=2247628504&idx=2&sn=6fe3aeb9f63203cfe941a6bb63b49b85&chksm=fa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token=2124656491&lang=zh_CN&scene=21#wechat_redirect

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试干货】完全平方数

【面试干货】完全平方数 1、实现思想2、代码实现 💖The Begin💖点点关注,收藏不迷路💖 一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少? 1、…

MyBatis复习笔记

3.Mybatis复习 3.1 xml配置 properties&#xff1a;加载配置文件 settings&#xff1a;设置驼峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;类型别名设置 #这样在映射…

数据分析工程师——什么是数据分析?

数据分析工程师 对于目前就业市场上的技术岗位,除了开发、测试、运维等常见职位之外,数据类岗位也越来越成为热门的求职方向。本文将重点介绍 数据分析 这一新兴岗位。 看到「数据分析」这几个字,也许大家的第一印象一样,觉得要做的工作似乎并不难,有大量数据后根据业务…

酷黑简洁大气体育直播自适应模板赛事直播门户网站源码

源码名称&#xff1a;酷黑简洁大气体育直播自适应模板赛事直播门户网站源码 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 支持PC与手机端同步生成html&#xff08;多端同步生成插件&#xff09; 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无…

动态规划专题

leecode 221 class Solution { public:int maximalSquare(vector<vector<char>>& matrix) {int n matrix.size();if (n 0) return 0; // 如果矩阵为空&#xff0c;则直接返回0 int m matrix[0].size();vector<vector<int>> ans(n, vector<i…

数据库(4)——DDL数据库操作

SQL标准没有提供修改数据库模式定义的语句&#xff0c;用户想修改次对象只能将它删除后重建。 查询 查询所有数据库&#xff1a; SHOW DATABASES; 在安装完MySQL数据库之后&#xff0c;自带了4个数据库&#xff0c;如下图&#xff1a; 创建数据库 数据库的创建语言为 CREATE…

JavaSE——集合框架二(1/6)-前置知识-可变参数、Collections工具类

目录 可变参数 Collections工具类 Collections的常用静态方法 实例演示 可变参数 可变参数 就是一种特殊形参&#xff0c;定义在方法、构造器的形参列表里&#xff0c;格式是&#xff1a;数据类型...参数名称 可变参数的特点和好处 特点&#xff1a;可以不传数据给它&am…

安全设计 | 安全设计不得马虎!微软STRIDE威胁建模方法让你事半功倍,快速发现应用安全隐患!

STRIDE威胁建模方法最早发表于2006年11月的《MSDN杂志》&#xff0c;作者是微软的工程师Shawn Hernan、Scott Lambert 、Tomasz Ostwald 和 Adam Shostack。那我们为什么要进行威胁建模&#xff1f; 如何使用数据流图对系统进行威胁建模&#xff1f;如何减轻威胁&#xff1f;接…

【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树

文章目录 0. 概述1. 无前缀冲突编码2. 编码成本3. 带权编码成本4. 编码算法5. 算法实现流程6. 时间复杂度与改进方案 0. 概述 学习Huffman树。 1. 无前缀冲突编码 在加载到信道上之前&#xff0c;信息被转换为二进制形式的过程称作编码&#xff08;encoding&#xff09;&…

java: 无法访问org.springframework.ldap.core.LdapTemplate

完整错误&#xff1a; java: 无法访问org.springframework.ldap.core.LdapTemplate错误的类文件: /E:/apache-maven-3.6.3/repository/org/springframework/ldap/spring-ldap-core/3.2.3/spring-ldap-core-3.2.3.jar!/org/springframework/ldap/core/LdapTemplate.class类文件具…

【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 工具栏 | QToolBar的使用及说明 文章编号&#xff1a;Qt 学习…

Android14 - 绘制系统 - 概览

从Android 12开始&#xff0c;Android的绘制系统有结构性变化&#xff0c; 在绘制的生产消费者模式中&#xff0c;新增BLASTBufferQueue&#xff0c;客户端进程自行进行queue的生产和消费&#xff0c;随后通过Transation提交到SurfaceFlinger&#xff0c;如此可以使得各进程将缓…

Golang | Leetcode Golang题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; func minDepth(root *TreeNode) int {if root nil {return 0}queue : []*TreeNode{}count : []int{}queue append(queue, root)count append(count, 1)for i : 0; i < len(queue); i {node : queue[i]depth : count[i]if node.Left …

软件项目详细设计说明书实际项目参考(word原件下载及全套软件资料包)

系统详细设计说明书案例&#xff08;直接套用&#xff09; 1.系统总体设计 2.性能设计 3.系统功能模块详细设计 4.数据库设计 5.接口设计 6.系统出错处理设计 7.系统处理规定 软件开发全文档下载&#xff08;下面链接或者本文末个人名片直接获取)&#xff1a;软件开发全套资料-…

转行一年了

关注、星标公众号&#xff0c;直达精彩内容 ID&#xff1a;技术让梦想更伟大 整理&#xff1a;李肖遥 来公司一年了。 说是转行其实还是在半导体行业&#xff0c;熟悉我的朋友知道 &#xff0c;我在18年开始进入半导体行业&#xff0c;那个时候想着行业很重要&#xff0c;站对了…

高校网站群及融媒体中心建设方案

一、项目背景 随着信息技术的飞速发展&#xff0c;互联网已成为高校展示形象、传播信息、服务师生、沟通社会的重要渠道。然而&#xff0c;目前许多高校在网站建设和媒体传播方面存在以下问题&#xff1a; 网站分散、缺乏统一规划&#xff1a;各高校内部往往存在多个部门或学院…

常见 JVM 面试题补充

原文地址 : 26 福利&#xff1a;常见 JVM 面试题补充 (lianglianglee.com) CMS 是老年代垃圾回收器&#xff1f; 初步印象是&#xff0c;但实际上不是。根据 CMS 的各个收集过程&#xff0c;它其实是一个涉及年轻代和老年代的综合性垃圾回收器。在很多文章和书籍的划分中&…

springboot里面自带的测试用法

1. 依赖项配置 首先&#xff0c;确保你的 pom.xml 或 build.gradle 文件中包含必要的依赖项。以下是 Maven 配置示例&#xff1a; <dependencies><!-- Spring Boot Starter Test --><dependency><groupId>org.springframework.boot</groupId>&l…

TypeScript-函数类型

函数类型 指给函数添加类型注解&#xff0c;本质上就是给函数的参数和返回值添加类型约束 function add(a: number,b: number) :number {return a b } let res: number res add(2 3) // 函数参数注解类型之后&#xff0c;不但限制了参数的类型还限制了参数为必填 优点&…

【Flutter】有状态组件StatefulWidgetScaffold组件属性

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月26日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…