勉強の記録

機械学習、情報処理について勉強した事柄など

O'Reilly「機械学習のための特徴量エンジニアリング」を読んだが期待ハズレだった

2020.1.15 追記:特にテーブルデータにおける「特徴量エンジニアリング」であれば,『Kaggleで勝つデータ分析の技術』が良かった.特徴量設計は試行錯誤の面も大きいのだけど,実際のコンペの場面でどのように考えて特徴量設計をおこなっているかや,上位陣のsolutionに対する考察なども載っていて参考になる.

Kaggle Grand Master推薦,といった帯がついて話題になっていたので読んでみた.

結論から言うと,正直なところ期待はずれだった.ネットでは良書との評判も高いので,逆にちょっと煽ったタイトルにしてしまった.. 特徴選択を期待していたのだが,そこは範囲外だった.

対象読者としては,logistic regressionやSVMMLPなどの理論を学んだけどその先はやったことないというあたりの層か.でもそういう人って「特徴量エンジニアリング」と聞いて読みたいと思うのかな?

期待していたこと

非線形な効果を持つような特徴量や,周期的な変化をする特徴量(曜日や月・季節)をどう使うか.それぞれどんなモデルと親和性が高いか.

・外れ値への対応

・欠損値への対応

・決定木以外のモデルにおいて,間隔が一定でない順位尺度の特徴量をどう使うか.

・離散化するのであればその閾値はどう設定するか.gini係数なのか,エントロピーなのか.bin数はどう決めるか.

・交互作用項への対処.例えば都道府県ごとの何らかの予測をするときに,人口データと面積データがあったとして人口密度を特徴量として加えるか否か.和や差であればほとんどのモデルで捉えられると思うが,和や差であってもそれが価値を持つなら特徴量として加えたほうが良いのか.モデルごとに捉えやすい交互作用が違うのではないか(2つの特徴量の積や商を捉えられるか,また2乗項や3乗項などの非線形作用を捉えられるか否か)と思うが,実際に明示的に加えた場合とそうでない場合の実験結果など.

・ロジスティック回帰やGBDTなど個々のモデルに分けて,特徴量設計のベストプラクティス

残念ながら,上記のような情報はほとんど得られなかった.

実際の中身

・連続変数のスケーリング各種.

・離散化の閾値については固定幅か分位数かを紹介するくらい.

・カテゴリカル変数のビンカウンティングは知らなかったので良かった.が,targetのleakになるので実際には使いづらそう...

・categorical embeddingについては言及なし

・特徴選択については1ページのみ.フィルタ法(閾値をつかって有用でない特徴量を削減する),ラッパー法(特徴量のサブセットを使って実際にモデルを学習し,精度を比較することで使用すべき特徴量か判断する),組み込み法(決定木など,モデルの学習プロセス自体に特徴量選択が組み込まれている)の簡単な紹介のみ.「特徴選択の詳細については本書の範囲を超えます.」とのこと.

・テキストの特徴量抽出:BoWとTF-IDFの計算方法.

・画像の特徴量抽出:SIFTおよびHOGという古典的な特徴量計算方法.そしてAlexNetのごくごく簡単な紹介.

感想

・このタイトルとこの厚さの本で,テキストや画像は要らない.別の本を読む.

・「特徴選択の詳細は本書の範囲を超える」ってそれは....有用でない特徴量を作り出しては害悪しかないので,特徴量の有用性をどう評価するかは特徴量エンジニアリングにおいて極めて重要で,ほぼほぼ表裏一体と思うのだけど.そこを放棄して,ただいかにモデルに突っ込むかだけの浅い議論になってしまっている.

・特徴量エンジニアリング≒特徴選択くらいの勢いで期待していたので,ほんとに残念だった.

・特徴量選択についてのGuynoの論文を知ることができたのは良かった.

・画像からCNNで特徴抽出するとして,それをどう他の特徴量と組み合わせるかについてはあまり示唆がなかった.KaggleのPetFinderコンペのように,画像とともに複数の特徴量が与えられて,それらを合わせて何かを予測するタスクがある.画像部分にCNNをかけて,他の特徴量との合流させてMLPをかけるのか,画像だけからtargetを予測するモデルを組んで,stackingするような形でその予測値を2段めの入力として利用するのかなどいくつか方法があると思うが,そういったことへの示唆がほしかった.(もちろんno free lunchで試行錯誤になるのだろうが,実例とともにどうやって比較検証したかを載せてくれるとありがたかった.)

・もっと具体的な事例を紹介してほしかった.

・たぶん対象読者としては,一度も機械学習モデルを組んだことがない人,なのかも.Kaggleで投稿したことあるくらいの人には,恐らくあまり読む価値ない気がする.