2014-09-29 52 views
0

我想在python中構建和實現一些柵格數據的迴歸樹算法,並且似乎無法找到這樣做的最佳方法。我將嘗試解釋我想要做的事情:在柵格數據上實現迴歸樹的方法 - 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包裝器的所有例子中,我找不到一個處理空間數據的例子,我認爲這就是拋棄我的原因。爲了澄清,我想使用訓練數據(這是一個點形狀文件/表格,現在可以 - 如果需要的話)可以轉換成與反射柵格大小相同的柵格,所有單元格中都沒有數據除了我已經知道深度數據的少數幾個點外),建立一個迴歸樹,它將使用反射柵格來預測深度​​。然後,我想將該樹應用於同一組反射率柵格,以便獲得各處的預測深度值的柵格

我意識到這是令人困惑的,我可能不會做最好的解釋工作。除了試圖在python中實現weka,比如sklearn,只要它們是開源的,我對其他選擇都是開放的。我的問題是,我所描述的可以做什麼?我很確定它可以,因爲它與圖像分類非常相似,但目標值(深度)是連續的而不是離散類,但目前爲止我失敗了。如果是這樣,什麼是最好的/最直接的方法和/或是否有任何可能有用的例子?

感謝

回答

0

我曾使用陸地衛星數據用於土壤,這似乎是有點關係到您上述問題的環境性能的預測一些經驗。儘管我當時開發了自己的模型,但我可以描述爲了映射預測數據而經歷的一般過程。

對於訓練數據,我能夠提取LandSat值(除了其他屬性)以獲取已知土壤樣本的空間點。這樣,我可以使用LandSat數據作爲預測環境數據的輸入。這些數據的一部分也將被保留用於測試,以確認訓練的模型不適合訓練數據,並且預測結果良好。

完成此過程後,可以通過在所需區域的每個點(匹配所需圖像的分辨率)獲取空間信息來映射所需區域。從那裏,您應該能夠將這些LandSat因子輸入到預測模型和用於映射預測深度的輸出中。在這種情況下,您可能只需使用Weka預測所有案例,然後使用其他工具從估算中構建地圖。

我相信我很久以前就提出了一些代碼,以便在ArcGIS中提取每個我需要的因素,但是這樣做已經有一段時間了。應該有一些很好的教程可以幫助你朝這個方向發展。

我希望這有助於您的特殊情況。

0

這聽起來像你沒有使用任何空間信息來建立你的樹 (如鄰近像素的信息),只是反射。因此,您可以將決策樹應用於像素,就像像素全部位於一維列表或數組中一樣。

用於6000點訓練數據文件的600分支樹似乎可能是 overfit。考慮在節點上存在少於N個點或類似的東西時,要求樹停止拆分 。有可能 是可以設置的修剪因子。您可以測試不同的設置 ,直到您找到爲您提供交叉驗證或 最佳統計信息的設備爲止。