在栅格数据上实现回归树的方法 - python

时间:2014-09-29 16:21:24

标签: python regression weka raster landsat

我正在尝试在python中的某些栅格数据上构建和实现回归树算法,并且似乎无法找到最佳方法。我将尝试解释我正在尝试做的事情:

我想要的输出是光栅图像,其值代表湖泊深度,称之为depth.tif。我有一系列光栅图像,每个都代表不同Landsat频段的反射率值,比如[B1.tif,B2.tif,...,B7.tif],我想用它作为我的自变量来预测湖泊深度。

对于我的训练数据,我有一个约6000点已知湖泊深度的形状文件。为了创建树,我为每个点提取了相应的反射值,然后将其导出到表中。然后我在weka(机器学习软件)中使用该表来创建600分支回归树,该树将基于反射值集来预测深度​​值。但是因为树太大了,我不能手动在python中编写它。我遇到了python-weka-wrapper模块,所以我可以在python中使用weka,但是已经遇到了整个光栅部分。由于我的数据有一个额外的维度(如果转换为数组,每个自变量实际上是一组n列x nrows值而不是一行值,就像在所有示例中一样),我不知道它是否可以做我想要的是。在weka-python-wrapper的所有示例中,我都找不到处理空间数据的例子,我认为这就是让我失望的原因。

为了澄清,我想使用训练数据(现在是一个点形状文件/表格,但如果必要的话 - 可以转换成与反射光栅相同大小的光栅,除了所有单元格中没有数据对于我知道深度数据的几个点,建立一个回归树,使用反射光栅来预测深度​​。然后我想将该树应用于同一组反射光栅,以获得预测深度值的光栅。

我意识到这很令人困惑,我可能没有做出最好的解释工作。除了尝试在python中实现weka之外,我对其他选项持开放态度,例如sklearn,只要它们是开源的。我的问题是,我所描述的可以完成吗?我很确定它可以,因为它与图像分类非常相似,除了目标值(深度)是连续的而不是离散类,但到目前为止我都失败了。如果是这样,什么是最好/最直接的方法和/或是否有任何可能有帮助的例子?

由于

2 个答案:

答案 0 :(得分:0)

我有一些使用LandSat数据预测土壤环境特性的经验,这似乎与您上面描述的问题有些相关。虽然我当时开发了自己的模型,但我可以描述为了映射预测数据而经历的一般过程。

对于训练数据,我能够提取已知土壤样本的空间点的LandSat值(除了其他属性)。这样,我可以使用LandSat数据作为预测环境数据的输入。这些数据的一部分也将保留用于测试,以确认训练有素的模型不会过度拟合训练数据并且预测输出结果良好。

完成此过程后,可以通过在所需区域的每个点获取空间信息(匹配所需图像的分辨率)来映射所需区域。从那里,您应该能够将这些LandSat因子输入到模型中进行预测,并将输出用于映射预测的深度。在这种情况下,您可能只是使用Weka来预测所有情况,然后使用其他工具从估算中构建地图。

我相信我很久以前就提出了一些代码来提取我在ArcGIS中所需的每个因素,但是自从我这样做以来已经有一段时间了。应该有一些很好的教程可以帮助你朝这个方向发展。

我希望这有助于你的特殊情况。

答案 1 :(得分:0)

听起来您没有使用任何空间信息来构建树 (例如关于相邻像素的信息),只是反射率。所以你可以 将决策树应用于像素,就像像素全部在像素中一样 一维列表或数组。

6000点训练数据文件的600分支树似乎可能是 过拟合。考虑放入一个需要树停止拆分的选项 当一个节点或类似的东西少于N个点时。也许有 是一个可以设置的修剪因素。您可以测试不同的设置 直到你找到一个通过交叉验证或者给你最好的统计数据的那个 一个坚持不懈的测试集。