0

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

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

对于我的训练数据,我有一个已知湖深约 6000 点的 shapefile。为了创建一棵树,我为每个点提取了相应的反射率值,然后将其导出到表中。然后,我在机器学习软件 weka 中使用该表创建了一个包含 600 个分支的回归树,该树将根据一组反射率值预测深度值。但是因为树太大了,我不能手动用python写。我遇到了 python-weka-wrapper 模块,所以我可以在 python 中使用 weka,但被整个光栅部分卡住了。由于我的数据有一个额外的维度(如果转换为数组,每个自变量实际上是一组 ncolumns x nrows 值,而不是像所有示例中的一行值),我不知道它是否可以我想要的是。在 weka-python-wrapper 的所有示例中,

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

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

谢谢

4

2 回答 2

0

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

6000 点训练数据文件的 600 分支树似乎可能过拟合。考虑添加一个选项,当节点上的点少于 N 或类似的东西时,要求树停止分裂。也可以设置一个修剪因子。您可以测试不同的设置,直到找到能够通过交叉验证或保留测试集为您提供最佳统计数据的设置。

于 2014-09-30T14:20:41.077 回答
0

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

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

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

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

我希望这对您的特定情况有所帮助。

于 2014-09-30T01:47:33.790 回答