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) 数据结构:字符串、列表、元组、字典和集合。
1.5.2 编译器的安装与文件的加载
下载 Anaconda,官方网址 https://www.anaconda.com/products/individual ,具体安装教程可
参考该网址 https://www.jb51.net/article/199555.htm 。
本次课程所用到的程序文件后缀均为.ipynb,.ipynb 是 jupyter notebook 格式的 python 代码,
打开 jupyter notebook 之后点击下图 upload 即可添加,打开。
1.5.3 代码库的安装
Python 为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内
容。用 Python 开发,许多功能不必从零编写,直接使用现成的即可。
本课程将详细介绍三种功能强大且应用广泛的代码库,即 numpy, pandas 和 matplotlib。
Anaconda 中已经自带了某些库,可以打开 Anaconda Prompt,输入 pip list,就可以检查是否已经
安装了所需要的代码库。对于未安装的代码库,在 Anaconda Prompt 中输入 pip install (代码库
名称),即可完成代码库的安装。
1.5.4 NumPy 库
NumPy 代表 “
Numeric Python”,它是一个由多维数组对象和用于处理数组的例程集合组成的
库。NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型,它描述相同类型的元素集合,可
以使用基于零的索引访问集合中的项目。
数组的创建
数组的运算
1.5.5 Pandas 库
Pandas 是 Python 语言的一个扩展程序库,主要用于数据分析。它是基于 Numpy 的,具有强大分
析能力的,结构化数据的工具集。Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Excel 导入数
据。
DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结
构之一。一个表格型的数据结构,既有行标签(
index),又有列标签(
columns),它也被称异构数
据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。
其结构图示意图,如下所示:
DataFrame 的创建
1.5.6 Matplotlib 库
Matplotlib 是 Python 的绘图库,它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代
方案。
直方图
1.6 常用机器学习算法练习
1.6.1 支持向量机
支持向量机(
Support Vector Machine,SVM)是一类按监督学习(
supervised learning)方式
对数据进行二元分类的广义线性分类器。给定一组训练实例,每个训练实例被标记为属于两个类别中
的一个或另一个,SVM 训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二
元线性分类器。SVR(支持向量回归)是 SVM(支持向量机)中的一个重要的应用分支。SVR 回归与
SVM 分类的区别在于,SVR 的样本点最终只有一类,它所寻求的最优超平面不是 SVM 那样使两类或多
类样本点分的“最开”,而是使所有的样本点离超平面的总偏差最小。
模型结果展示:
1.6.2 随机森林
随机森林是一种集成算法(
Ensemble Learning),它属于 Bagging 类型,通过组合多个弱分类
器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。其可以取得不
错成绩,主要归功于“随机”和“森林”,一个使它具有抗过拟合能力,一个使它更加精准。其示意图如
下所示:
随机森林流程同支持向量机类似,不同之处仅体现在模型构建阶段,具体的模型构建阶段如下图所示:
1.7 应用机器学习模型的步骤
1.7.1 数据的收集
根据科学目标,收集相关数据,方法包括但不限于网络爬虫,RSS 反馈以及设备返回的实测数据
等。
1.7.2 输入数据的处理
确保数据格式符合机器学习算法的特定要求,如字符串类型转整型数据,量纲不同的数据做归一
化处理等。
1.7.3 输入数据的分析
利用绘图,特征工程,空值查询等方法,对输入数据进行清洗,剔除掉数据集中的异常值和垃圾
数据。
1.7.4 机器学习算法训练
将上述步骤得到的格式化数据输入道算法,从中抽取知识获信息。
1.7.5 机器学习算法测试
测试算法的工作效果,若不满意算法的输出结果,则应返回上述几个步骤进行改正并重新测试。
1.7.6 机器学习算法应用
将机器学习算法转换成应用程序,执行实际任务,以检验上述步骤是否可以在实际环境中正常工
作。
1.8 机器学习的未来发展
1.8.1 机器学习与物理限制
以物理模型为代表的机理模型和以机器学习为代表的数据驱动模型不会相互替代,相反,将二者
进行结合可能会成为未来的主流。目前混合模型主要可以分为两个方面,一是利用机理知识指导学习
算法关注物理一致性解,二是 Hybrid 模型的引入。
1.8.2 迁移学习
迁移学习是一种机器学习的方法,指的是一个预训练的模型被重新用在另一个任务中。主流的迁
移学习方法有基于实例的迁移,基于特征的迁移,基于共享参数的迁移和基于关系知识的迁移。
数据预处
理流程
&
机器学习
与地表参
数的空间
尺度扩展
2.1 机器学习的数据预处理
确保机器学习模型精度的关键在于输入数据的选择,如果输入数据就存在问题,就会使得模型学
到一些错误的信息,最终造成模型误差。
2.1.1 数据清洗
数据清洗主要涉及到的工作有空值查询,缺失值的插补,文本型变量的转换,异常值的剔除等。
空值查询与缺失值的插补
2.1.2 数据集成
合并来自多个数据存储的数据,优秀的集成有助于减少结果数据集的冗余和不一致,有助于提高
其后挖掘过程的准确性和速度。
2.1.3 数据变换
对数据进行规范化处理,以便于后续的信息挖掘。常见的数据变换包括:特征二值化、特征归一
化、连续特征变化,定性特征哑编码等。
2.1.4 数据可视化
利用直方图,散点图,相关系数热力图以及统计变量表格等直观地展现数据的范围、大小、波动
趋势,便于后续模型的选择。
2.2 空间尺度扩展模型的构建
2.2.1 特征工程
SHAP 是 Python 开发的一个"模型解释"包,可以解释任何机器学习模型的输出。其名称来源于
SH apley A dditive ex P lanation,在合作博弈论的启发下 SHAP 构建一个加性的解释模型,所有的特
征都视为“贡献者”。对于每个预测样本,模型都产生一个预测值,SHAP value 就是该样本中每个
特征所分配到的数值。
2.2.2 训练模型与调优
将处理好的数据放入到 XGBoost 模型中,对模型进行训练,并通过十折交叉,得到模型最佳超参
数。
2.2.3 模型的应用与误差的计算
将测试集输入到训练好的模型中,计算出 y 值,并绘制散点图,计算模型在训练集和测试集上的
R 2 (拟合系数)。
2.2.4 空间数据处理
对遥感图像进行辐射校正和几何纠正、图像整饰、投影变换、镶嵌、特征提取、分类以及各种专
题处理等一系列操作,得到更易于模型处理的遥感影像。
由于遥感影像数量较多,使用 ArcGIS 逐幅影像处理会耗费大量的时间和精力,因此利用 ArcGIS
中的 IDLE,通过 arcpy 调用 ArcToolBox 中的各项工具,实现对遥感图像的批量处理。
2.2.5 尺度扩展与验证
将处理好的遥感影像转为矩阵形式,保证数据形式与训练集保持一致,对整个流域上的蒸散发进
行生产。由于多种模型会得到多种产品结果,而又没有流域的真实值来验证结果的好坏,故采用三角
帽法对各种结果进行不确定性分析。
深度学习
&
机器学习
与地表参
数的时间
尺度扩展
3.1 深度学习
3.1.1 深度学习概论
深度学习是机器学习的一种。深度学习的概念源于人工神经网络的研究,含多个隐藏层的多层感
知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,
以发现数据的分布式特征表示。
3.1.2 深度学习经典模型
深度学习是机器学习的一种。深度学习的概念源于人工神经网络的研究,含多个隐藏层的多层感
知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,
以发现数据的分布式特征表示。
人工神经网络(
ANN)
人工神经网络从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接
方式组成不同的网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。
每个节点代表一种特定的输出函数,称为激活函数(
activation function)。每两个节点间的连接
都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出
则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者
函数的逼近,也可能是对一种逻辑策略的表达。
循环神经网络(
RNN)
循环神经网络是一类以序列(
sequence)数据为输入,在序列的演进方向进行递归(
recursion)
且所有节点(循环单元)按链式连接的递归神经网络。
卷积神经网络(
CNN)
卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络(
Feedforward Neural
Networks),是深度学习的代表算法之一。卷积神经网络与普通神经网络的区别在于,卷积神经网络
包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部
分邻层神经元连接。在 CNN 的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面
由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷
积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权
值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫
做池化(
pooling),通常有均值子采样(
mean pooling)和最大值子采样(
max pooling)两种形式。
子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。
3.2 时间尺度扩展模型的构建
3.2.1 数据准备
将 2017 年站点的蒸散发日尺度数据导入,并绘制折线图。
3.2.2 数据转换
将一列变成两列,第一列是 t 天的蒸散发值,第二列是 t+1 天的蒸散发值。look_back 就是预
测下一步所需要的 time steps,timesteps 就是 LSTM 认为每个输入数据与前多少个陆续输入的数
据有联系。
3.2.3 模型构建与预测
构建 LSTM 模型,根据需求设定模型参数
将训练好的模型进行预测,并进行反归一化,最后计算得分,绘制结果图像