了解机器学习的发展历史、计算原理、基本定义,熟悉机器学习方法的分类,常用机器学习方法,以及模型的评估与选择;熟悉数据预处理的流程,掌握python程序包的使用;理解机器学习在生态水文中的应用,掌握机器学习模型构建方法,学会构建机器学习模型用于地表参数的空间模拟与时间预测,并掌握生态水文过程分析。
基于python机器学习及深度学习在空间模拟与时间预测领域中的技术应用
机器学习方法
机器学习的发展历史、计算原理、基本定义与术语。
机器学习方法的分类
机器学习的任务主要可以分为监督学习和非监督学习两大类。根据是否拥有标记信息来区分监督/非监督学习。分类和回归是监督学习的代表,聚类是非监督学习的代表。
模型评估与选择
在选择机器学习模型时,首先要明确模型的目的,期望完成何种任务。因此要从误差,模型精度等方面进行评估和选择。
学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,在训练集上的误差又称为“经验误差”,在新样本上的误差称为“泛化误差”。拟合程度指的是机器学习过程中产生的模型对于测试集的适应效果怎么样,其中有“过拟合”和“欠拟合”两种情况。
同时,还会利用“测试集”来测试学习器对新样本的判别能力,以“测试误差”作为泛化误差的近似,常用的方法有留出法,交叉验证法,自助法等。
Python使用说明与代码库
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 基本语法格式:
注释格式:单行注释以 # 开头,多行注释可以用多个 # 号,或者"""和"""。
行与缩进:缩进来表示代码块,不需要使用大括号 {} 。
导入需要用到的库或函数:在 python 用 import 或者 from...import 来导入相应的模块。
数字类型:int(整数);bool(布尔型);float(浮点数);complex(复数)。
数据结构:字符串、列表、元组、字典和集合。
编译器的安装与文件的加载
下载Anaconda,官方网址Anaconda | Anaconda Distribution,具体安装教程可参考该网址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模型,根据需求设定模型参数
将训练好的模型进行预测,并进行反归一化,最后计算得分,绘制结果图像
点击查看原文