diff --git a/12-spatial-cv-ja.Rmd b/12-spatial-cv-ja.Rmd index 1738e06..29c8280 100644 --- a/12-spatial-cv-ja.Rmd +++ b/12-spatial-cv-ja.Rmd @@ -43,17 +43,17 @@ library(progressr) # 進捗状況を報告 統計的学習\index{とうけいてきがくしゅう@統計的学習}とは、統計学\index{とうけいがく@統計学}と機械学習\index{きかいがくしゅう@機械学習}の手法を組み合わせたもので、教師あり手法と教師なし手法に分類される。 どちらも物理学、生物学、生態学から地理学、経済学に至るまで、ますます多くの分野で利用されるようになっている [@james_introduction_2013]。 -この章では、クラスタリング\index{くらすたりんぐ@クラスタリング}のような教師なし技術とは対照的に、学習データセットが存在する教師あり技術に焦点を当てていきたい。 -応答変数は、二値 (地滑りの発生など)、カテゴリ (土地利用)、整数 (種の豊富さ数)、数値 (土壌酸性度の測定された pH 値) のいずれでもよい。 -教師あり技術は、観測のサンプルについて既知の応答と、1つまたは複数の予測変数の間の関係をモデル化する。 +この章では、クラスタリング\index{くらすたりんぐ@クラスタリング}のような教師なし技術ではなく、学習データセットが存在する教師あり技術に焦点を当てていきたい。 +応答変数は、二値 (地すべりの発生など)、カテゴリ (土地利用)、整数 (種の豊富さ)、数値 (土壌酸性度の測定された pH 値) のいずれでもよい。 +教師あり技術は、観測のサンプルについて既知の応答と、1 つまたは複数の予測変数の間の関係をモデル化する。 多くの機械学習\index{きかいがくしゅう@機械学習}において、研究の主な目的は優れた予測を行うことである。 機械学習が「ビッグデータ」\index{びっぐでーた@ビッグデータ}の時代に繁栄しているのは、その手法が入力変数に関する仮定をほとんど必要とせず、巨大なデータセットを扱えるからである。 -機械学習は、将来の顧客行動予測、推薦サービス (音楽、映画、次に買うもの)、顔認識、自律走行、テキスト分類、予知保全 (インフラ、産業) などのタスクに資するものである。 +機械学習は、将来の顧客行動予測、推奨サービス (音楽、映画、次に買うもの)、顔認識、自律走行、テキスト分類、予知保全 (インフラ、産業) などのタスクに資するものである。 この章では、地すべりの発生モデルという事例をもとに説明する。 この応用例は、Chapter \@ref(intro) で定義されているジオコンピュテーションの応用的な性質とリンクしており、機械学習\index{きかいがくしゅう@機械学習}が、予測を唯一の目的とする場合に統計学の分野\index{とうけいがく@統計学}から借用する方法を示している。 -そこで、この章では、まず、一般化線形モデル\index{GLM} [@zuur_mixed_2009] の助けを借りて、モデリングと交差検証\index{こうさけんしょう@交差検証!くうかん@空間}の概念を紹介する。 +そこで、この章では、まず、一般化線形モデル\index{GLM} [@zuur_mixed_2009] の助けを借りて、モデリングと交差検証\index{こうさけんしょう@交差検証!くうかん@空間} (cross validation, CV) の概念を紹介する。 これを踏まえて、この章では、より典型的な機械学習\index{きかいがくしゅう@機械学習} アルゴリズム \index{あるごりずむ@アルゴリズム}、すなわちサポートベクタマシン (Support Vector Machine, SVM) \index{SVM}を実装している。 モデルの**予測性能**は、地理データが特殊であることを考慮した空間交差検証 (Cross Validation, CV) \index{こうさけんしょう@交差検証!くうかん@空間}を用いて評価していこう。 @@ -71,7 +71,7 @@ CV は過適合\index{かてきごう@過適合}を検出するのに役立つ ## ケーススタディ: 地すべりの発生しやすさ {#case-landslide} -このケーススタディは、Ecuador 南部の地滑り地点のデータセットに基づいている。図は Figure \@ref(fig:lsl-map)、詳細は @muenchow_geomorphic_2012 で説明されている。 +このケーススタディは、Ecuador 南部の地すべり地点のデータセットに基づいている。図は Figure \@ref(fig:lsl-map)、詳細は @muenchow_geomorphic_2012 で説明されている。 論文で使用されたデータセットの部分集合は **spDataLarge**\index{spDataLarge (package)} パッケージで提供されており、以下のように読み込むことができる。 ```{r 12-spatial-cv-2} @@ -151,7 +151,7 @@ fit = glm(lslpts ~ slope + cplan + cprof + elev + log10_carea, 3 つの入力引数のそれぞれを理解しておくとよいだろう。 - 地すべりの発生状況 (`lslpts`) を予測変数の関数として指定した式 -- モデルの種類を指定するファミリーで、この場合は応答が二値なので `binomial` としている (`?family` を参照) +- モデルの種類を指定する family で、この場合は応答が二値なので `binomial` としている (`?family` を参照) - 応答と予測変数 (列として) を含むデータフレーム このモデルの結果を表示すると次のようになる (`summary(fit)` にはより詳細な説明がある)。 @@ -164,7 +164,7 @@ fit クラス `glm` のモデルオブジェクト `fit` は、応答と予測変数の間の適合関係を定義する係数を含む。 また、予測にも利用することができる。 これは一般的な `predict()` メソッドで行われ、この場合、関数 `predict.glm()` を呼び出す。 -`type` を `response` に設定すると、下図のように `lsl` の各観測値に対する (地滑り発生の) 予測確率が返される (`?predict.glm` を参照)。 +`type` を `response` に設定すると、下図のように `lsl` の各観測値に対する (地すべり発生の) 予測確率が返される (`?predict.glm` を参照)。 ```{r 12-spatial-cv-8} pred_glm = predict(object = fit, type = "response") @@ -289,7 +289,7 @@ GLM\index{GLM} を **mlr3**\index{mlr3 (package)} で使うためには、地す 応答は二値 (2 カテゴリの変数) で、空間次元を持つので、**mlr3spatiotempcv** パッケージの `as_task_classif_st()` を使用し、分類\index{ぶんるい@分類}タスクを作成する [@schratz_mlr3spatiotempcv_2021 、非空間 task には `mlr3::as_task_classif()`、回帰\index{かいき@回帰}には `as_task_regr()` を使用。他の task の詳細は、`?Task` を参照。] 。^[**mlr3** エコシステムは **data.table** と **R6** というクラスを多用する。これらのクラスの仕様を知らなくても **mlr3** を使うことはできるが、知っておくと有利である。 **data.table**, の詳細は https://rdatatable.gitlab.io/data.table/。**R6** について学びたい方は、Advanced R book (日本語版は共立出版「R 言語徹底解説」だが、旧版を元にしている) [@wickham_advanced_2019] の [Chapter 14](https://adv-r.hadley.nz/fp.html) を参照。] `as_task_` 関数の最初の必須引数は、`x` である。 `x` は、入力データが応答変数と予測変数を含んでいることを想定している。 -`target` の引数は応答変数の名前を示し (ここでは `lslpts`)、`positive` は応答変数の 2 つの因子レベルのうちどちらが地滑り開始点を示すかを決定する (ここでは `TRUE`)。 +`target` の引数は応答変数の名前を示し (ここでは `lslpts`)、`positive` は応答変数の 2 つの因子レベルのうちどちらが地すべり開始点を示すかを決定する (ここでは `TRUE`)。 `lsl` データセットの他のすべての変数が予測因子として機能する。 空間 CV のためには、いくつかの追加引数を与える必要がある。 `coordinate_names` 引数は、座標列の名前を期待する (Section \@ref(intro-cv) と Figure \@ref(fig:partitioning) を参照)。 @@ -352,9 +352,9 @@ knitr::kable(lrns_df, caption.short = "Sample of available learners.", booktabs = TRUE) ``` -これにより、すべての学習器が 2 クラス問題 (地滑りの有無) をモデル化することができるようになった。 +これにより、すべての学習器が 2 クラス問題 (地すべりの有無) をモデル化することができるようになった。 Section \@ref(conventional-model) で使用され、**mlr3learners** では `classif.log_reg` として実装されている二項分類\index{ぶんるい@分類}方式を選択することにする。 -さらに、予測の種類を決める `predict.type` を指定する必要がある。`prob` は、地滑り発生の予測確率を 0 から 1 の間で決定する (これは `type = response` の `predict.glm()` に対応する)。 +さらに、予測の種類を決める `predict.type` を指定する必要がある。`prob` は、地すべり発生の予測確率を 0 から 1 の間で決定する (これは `type = response` の `predict.glm()` に対応する)。 ```{r 12-spatial-cv-13, eval=FALSE} # 2. 学習器を指定 @@ -468,7 +468,7 @@ Section \@ref(intro-cv) では、統計的学習\index{とうけいてきがく > 機械学習、より具体的には予測モデリングの分野では、説明可能性を犠牲にして、モデルの誤差を最小化すること、あるいは可能な限り正確な予測を行うことに主眼が置かれている。 応用機械学習では、統計学を含む多くの異なる分野からアルゴリズムを借用、再利用、盗用し、こうした目的のために使用する。 -Section \@ref(glm) では、GLM を用いて地滑りしやすさを予測した。 +Section \@ref(glm) では、GLM を用いて地すべりしやすさを予測した。 ここでは、同じ目的のためにサポートベクタマシン (SVM) \index{SVM}を紹介する。 ランダムフォレスト\index{らんだむふぉれすと@ランダムフォレスト}モデルは SVM よりも人気があるだろう。しかし、ハイパーパラメータ\index{はいぱーぱらめーた@ハイパーパラメータ}のチューニングがモデル性能に与えるプラスの効果は、SVM の場合の方が顕著である [@probst_hyperparameters_2018]。 本節では、 (空間) ハイパーパラメータのチューニングが主な目的であるため、SVM を用いることにする。 @@ -563,9 +563,9 @@ at_ksvm = mlr3tuning::auto_tuner( 1. パフォーマンスレベル ( Figure \@ref(fig:inner-outer) の左上部分) - データセットを 5 つの空間的に不連続な (外側の) サブフォールドに分割する。 1. チューニング・レベル ( Figure \@ref(fig:inner-outer) の左下部分) - パフォーマンス・レベルの最初のフォールドを使用し、ハイパーパラメータのチューニングのために、それを再び5つの (内側の) サブフォールドに空間的に分割する。 -これらの内部サブフォールドのそれぞれで、ランダムに選択された 50 個のハイパーパラメータ\index{はいぱーぱらめーた@ハイパーパラメータ} を使用する、つまり、250 個のモデルを適合させる。 +これらの内部サブフォールドのそれぞれで、ランダムに選択された 50 個のハイパーパラメータ\index{はいぱーぱらめーた@ハイパーパラメータ}を使用する、つまり、250 個のモデルを適合させる。 1. 性能推定 - 前のステップ (チューニング・レベル) から最適なハイパーパラメータの組み合わせを使用し、性能レベルの最初の外側のフォールドに適用して性能を推定する (AUROC \index{AUROC} )。 -1. 残りの 4 つの外側の折り目について、手順 2 と 3 を繰り返す +1. 残りの 4 つの外側のフォールドについて、手順 2 と 3 を繰り返す 1. 手順 2~4 を 100 回繰り返す ハイパーパラメータのチューニングと性能推定のプロセスには、計算量が必要である。 @@ -583,7 +583,7 @@ future::plan(list("sequential", "multisession"), さらに、**future** には、利用可能なすべてのコア (デフォルト) ではなく、半分だけを使用するように指示した。これは、1 つのコアを使用する場合に、他のユーザーが同じ高性能計算機クラスタで作業する可能性を考慮した設定である。 -これで、ネストされた空間交差検証 を計算するための準備ができた。 +これで、ネストされた空間交差検証を計算するための準備ができた。 `resample()` パラメータの指定は、GLM\index{GLM} を使用したときと全く同じ手順で行う。唯一の違いは、`store_models` と `encapsulate` の引数である。 前者を `TRUE` に設定すると、ハイパーパラメータ\index{はいぱーぱらめーた@ハイパーパラメータ}のチューニング結果を抽出できる。これは、チューニングに関するフォローアップ分析を計画する場合に重要である。 後者は、モデルの 1 つがエラーを投げても処理が継続されるようにするものである。 @@ -629,7 +629,7 @@ score_spcv_svm = score[learner_id == "classif.ksvm.tuned" & round(mean(score_spcv_svm$classif.auc), 2) ``` -GLM\index{GLM} (集計された AUROC\index{AUROC} は `r score [score $resampling_id == "repeated_spcv_coords" & score$ learner_id == "classif.log_reg", round(mean(score$classif.auc), 2)] `) は、この特定のケースでは、SVM\index{SVM} よりもわずかに優れているようである。 +GLM\index{GLM} は、この特定のケースでは、SVM\index{SVM} よりもわずかに優れているようである (集計された AUROC\index{AUROC} は `r score[resampling_id == "repeated_spcv_coords" & learner_id == "classif.log_reg", round(mean(classif.auc), 2)]`)。 絶対的に公平な比較を保証するためには、2 つのモデルが全く同じパーティションを使用していることを確認する必要がある。ここでは示していないが、バックグラウンドで黙々と使用しているものである (詳しくは本書の GitHub リポジトリにある `code/12_cv.R` を参照)。 そのために、**mlr3** は関数 `benchmark_grid()` と `benchmark()` を提供している [https://mlr3book.mlr-org.com/chapters/chapter3/evaluation_and_benchmarking.html#sec-benchmarking, @becker_mlr3_2022 参照] 。 これらの機能については、「演習」でより詳しく解説する。