海老ノート

Google Earth Engine 苦闘の記録

石川チャレンジ3:Rで実験

教師データはいくつ?

とりあえず10000のランダムなポイントでとしてはじめたんでした。で、サンプリングしてRに持ってきてみたんですけど、データの偏りがすごい。

開放水域 耕作地 高木林 湿地 人工物 水田 草地 低木林 裸地
2723 225 5949 8 627 1083 236 231 82

いやー、どう考えても8点(湿地)だけではどうしようもない。なので100,000くらいに増やしてみたんです。が、そしたら後々のランダムフォレストの分類機を作る手順でデータ多すぎですエラーがでた。ちゃんと説明で、そういうことは止めてねと書いてあるので、するべきではありませんでした。

これを踏まえて、元のデータに湿地や裸地等のデータの少ないカテゴリ補うようポイントを追加してみた。これだと教師データが多くなりすぎないはず(計14,600)↓

開放水域 耕作地 高木林 湿地 人工物 水田 草地 低木林 裸地
2723 885 5949 89 1286 1083 896 891 798

で、何点くらいあったらそれなりの結果がでるのか見てみる。テストデータは植生図から別途取得したランダムな点。合計14,600のデータから適当な数を抽出して、Rでランダムフォレストを回してみる。

f:id:camarao:20210814134429p:plainf:id:camarao:20210814134448p:plain
正解率(左)とカッパ係数(右)
f:id:camarao:20210814135942j:plain
各クラスのBalanced Accuracy

右上がりのグラフだけど、8,000点くらい1あればそれなりになりそう。それ以上は努力に見合わなそうというざっくりとした見立てで、この14,600→8,000点をランダムに抽出して教師データとすることに。内訳はこのとおり。振り返ると、耕作地、湿地、低木林はもっと多めに取ったほうがよかったっぽい。

開放水域 耕作地 高木林 湿地 人工物 水田 草地 低木林 裸地
1483 487 3238 56 693 591 494 488 462

Rで実験

今回の目的である、いろんなデータをレイヤに入れるとどのくらいうまく分類できるかな?というのをRで実験。 普通にRのrandomForestパッケージを使いました。ntreeは500、それといちおうtuneRFでmtryを求めて入れ込んでます(スクリプトは省略)。

バンド B2-4, 8,8A, 11-12のメディアン +NDVIとNDWIのメディアン +NDVIとNDWIの10,90分位 +夜間光 +地形データ +Sentinel1
正解率 0.854 0.854 0.859 0.864 0.868 0.871
カッパ係数 0.767 0.768 0.777 0.783 0.792 0.796

なんか変化が地味。ガーっとよくなるのかなと期待してたんだけど。 全部入りから作ったRで出せる変数の重要度のよくあるグラフはこうなった↓ f:id:camarao:20210814141649p:plain Sentinel1はそれほど役に立ってなさそう。B8やらNDVIが大事っていうのは納得(続く)。


  1. 試したところ10,000点くらいまではGEE上での分析が可能だった。