Q: カーネル密度推定で正規化したのに、なぜ 確率密度(Y軸)が1を超えるのか?
A: X軸の幅が非常に小さいからです。
(例えば、Y軸10*X軸の範囲0.1=面積1)
納得。
2020年1月10日金曜日
2020年1月4日土曜日
機械学習 メモ
技術評論社「Kaggleで勝つデータ分析の技術」を読みました。
一通り押さえていた内容でしたが、知識止まり。Kaggle に参加して勝てるほどの実力や経験はありません。説明されているテクニック等が既に血肉となっている方々に傍にいてほしいものです。
以下、気になった箇所のメモです。
*****************************************
特徴量作成(時系列データ)
・ラグ特徴量
・曜日
・時間帯
・期間:注文間隔最大-最後の注文からの経過時間(kaggle Instacart Market Basket Analysis)
・緯度経度→binning→文字列として連結→target encording
・GBDT:特徴量の加減はモデルが扱える, 乗除は追加する必要あり
対数
・log(x+1):np.log1p(x):0の取り扱い
・Box-Cox, Yeo-Johnson:負値の取り扱い
次元削減
・UMAP
モデル
・初手:GBDT
・次に検討:NN、線形モデル(アンサンブルの一つや、スタッキングの最終層)
・多様性:K-Neighbor、決定木ベース
(SVMなし)
モデル評価
・時系列データのバリデーション手法
・学習データとテストデータの分布が異なる:adversarial validation
モデルチューニング
・パラメータチューニング(xgboost の具体的なチューニング方法)
・特徴量選択と重要度
2019年12月31日火曜日
やり残し事項 2019
今年は研究職を半分担当しました。
内業が主体となり、時間的にも体力的にも楽になりました。報酬の対象となる勤務時間だけを見ると確実に短縮されています。働き方改革と銘打って時短を推奨されている御時世ですが、素直な後輩たちの動向を見ていると将来への危機感を抱かざるを得ません。
人のことを言えないのですが、やり残し事項は2年連続ほぼそのまま。
かわりではないですが、3Dレーザー関連を扱えるようになりました。python を利用したデータ分析、機械学習関連のテクニックもさらに身に付けることができました。
以下、やり残し事項です。昨年とほぼ同内容ですが、一応書いておきましょう。
道具
帯磁率計
ガンマ線測定器(携帯型)
技術
動的解析(耐震、液状化)
斜面設計
コード・ソフト
優先度低:DtransuのCUDA化・・・100万で購入可。
優先度低:PSInSAR・・・700万で購入可
優先度中:地表流+地下水・・・GSFLOW、HydroGeoSphere
優先度中:GMS・・・J-SHISの取り込みまではできました。いつか続きを。
優先度中:OpenMI・・・PHREEQCとDtransuの連成等
中期目標3年目はもがき中。あと2年。間に合うかな。
内業が主体となり、時間的にも体力的にも楽になりました。報酬の対象となる勤務時間だけを見ると確実に短縮されています。働き方改革と銘打って時短を推奨されている御時世ですが、素直な後輩たちの動向を見ていると将来への危機感を抱かざるを得ません。
人のことを言えないのですが、やり残し事項は2年連続ほぼそのまま。
かわりではないですが、3Dレーザー関連を扱えるようになりました。python を利用したデータ分析、機械学習関連のテクニックもさらに身に付けることができました。
以下、やり残し事項です。昨年とほぼ同内容ですが、一応書いておきましょう。
道具
帯磁率計
ガンマ線測定器(携帯型)
技術
動的解析(耐震、液状化)
斜面設計
コード・ソフト
優先度低:DtransuのCUDA化・・・100万で購入可。
優先度低:PSInSAR・・・700万で購入可
優先度中:地表流+地下水・・・GSFLOW、HydroGeoSphere
優先度中:GMS・・・J-SHISの取り込みまではできました。いつか続きを。
優先度中:OpenMI・・・PHREEQCとDtransuの連成等
中期目標3年目はもがき中。あと2年。間に合うかな。
的中率、見逃し率
砂防分野では「的中率」や「見逃し率」などの用語をよく聞きます。
独自に進化したのか、機械学習分野と同じ定義でも異なる用語が用いられています。毎回、変換に戸惑います。
先日、以下の論文に砂防分野での定義の記載がありました。書き留めておきましょう。
堤ほか「ストリームチューブによる地形分割を基にした表層崩壊解析手法」2019, 砂防学会誌, 72, 2, 343, 3-13
TP:A
FN:B
FP:C
TN:D
的中率=(A+D)/(A+B+C+D)
捕捉率=A/(A+B)
空振り率=C/(C+D)
見逃し率=B/(A+B)
正答率:accuracy rate = 的中率
再現率:recallのうち、感度:sensitivity = 捕捉率
特異度:pecificity = 空振り率
適合率:precisionの利用で、1-陰性的中率=見逃し率
imbalanced data のままだと、accuracy は機能しません。個々の評価指標を押さえておく必要があるのですが、重視すべきもののみ砂防分野で再定義されているということでしょう。
***********************************
20200304追記
「的中率」よりは「適中率」をよく見ますね(私は後者を使っています)。
また、上記の文献と気象庁では、一部の用語の定義が異なっています。ややこしや。
https://www.data.jma.go.jp/fcd/yoho/kensho/explanation.html
独自に進化したのか、機械学習分野と同じ定義でも異なる用語が用いられています。毎回、変換に戸惑います。
先日、以下の論文に砂防分野での定義の記載がありました。書き留めておきましょう。
堤ほか「ストリームチューブによる地形分割を基にした表層崩壊解析手法」2019, 砂防学会誌, 72, 2, 343, 3-13
TP:A
FN:B
FP:C
TN:D
的中率=(A+D)/(A+B+C+D)
捕捉率=A/(A+B)
空振り率=C/(C+D)
見逃し率=B/(A+B)
正答率:accuracy rate = 的中率
再現率:recallのうち、感度:sensitivity = 捕捉率
特異度:pecificity = 空振り率
適合率:precisionの利用で、1-陰性的中率=見逃し率
imbalanced data のままだと、accuracy は機能しません。個々の評価指標を押さえておく必要があるのですが、重視すべきもののみ砂防分野で再定義されているということでしょう。
***********************************
20200304追記
「的中率」よりは「適中率」をよく見ますね(私は後者を使っています)。
また、上記の文献と気象庁では、一部の用語の定義が異なっています。ややこしや。
https://www.data.jma.go.jp/fcd/yoho/kensho/explanation.html
| 予 報 | ||||
|---|---|---|---|---|
| 降水あり | 降水なし | 計 | ||
| 実況 | 降水あり | A | B | N1 = (A+B) |
| 降水なし | C | D | N2 = (C+D) | |
| 計 | M1 = (A+C) | M2 = (B+D) | N = (A+B+C+D) | |
- 適中率(降水の有無の適中率)(%)=(A+D)÷N×100
- 「降水あり」予報の適中率(%) =A÷M1×100 (一致率に同じ)
- 「降水なし」予報の適中率(%) =D÷M2×100
- 見逃し率(%) =B÷N×100
- 空振り率(%) =C÷N×100
- 捕捉率(%) =A÷N1×100
- 一致率(%) =A÷M1×100 (「降水あり」予報の適中率に同じ)
機械学習モデルの解釈可能性
機械学習モデルの解釈可能性に関する、素晴らしいスライドと kaggle マイクロコースです。スライドの1、マイクロコースの2が昨日の特徴量評価にあたります。
スライド
https://speakerdeck.com/line_developers/machine-learning-and-interpretability
1. どの特徴量が重要か
Feature Importance
2. 各特徴量が予測にどう影響するか
Partial Dependence
Surrogate Model
3. ある予測結果に対して特徴量がどう寄与するか
LIME, SHAP
Grad-CAM, Grad-CAM++
kaggle
https://www.kaggle.com/learn/machine-learning-explainability
1. Use Cases for Model Insights
Why and when do you need insights?
2. Permutation Importance
What features does your model think are important?
3.Partial Plots
How does each feature affect your predictions?
4.SHAP Values
Understand individual predictions
5.Advanced Uses of SHAP Values
Aggregate SHAP values for even more detailed model insights
両者に出てくるSHAP、発想は面白いですね。単純な数式でモデルの推定結果を模擬し、各特徴量にかかる係数で定量的に結果への寄与度を表現しています。これは決定木ベース以外の説明できなかったモデルに対する解釈性の要望を反映したものでしょう。
が、正解を模擬しないのはなぜでしょう。あくまでモデルの解釈性を加えることが目的だからでしょうか。それとも理解できていないのでしょうか?
精度を犠牲にしつつ解釈性を加えた簡易モデルの追加。そこまでして「ブラックボックス」を避ける必要はないと思います。最後に判断するのはヒトなので。
このあたり、機械学習分野の今後の動向が注目されます。
********************************
20200104追記
技術評論社「Kaggleで勝つデータ分析の技術」
6.2特徴量選択および特徴量の重要度
6.2.2 特徴量の重要度を用いる方法
・モデルから出力される重要度:RF、GBDT
・他の方法:Permutation Importance、null importance、boruta、特徴量の機械的大量生成
スライド
https://speakerdeck.com/line_developers/machine-learning-and-interpretability
1. どの特徴量が重要か
Feature Importance
2. 各特徴量が予測にどう影響するか
Partial Dependence
Surrogate Model
3. ある予測結果に対して特徴量がどう寄与するか
LIME, SHAP
Grad-CAM, Grad-CAM++
kaggle
https://www.kaggle.com/learn/machine-learning-explainability
1. Use Cases for Model Insights
Why and when do you need insights?
2. Permutation Importance
What features does your model think are important?
3.Partial Plots
How does each feature affect your predictions?
4.SHAP Values
Understand individual predictions
5.Advanced Uses of SHAP Values
Aggregate SHAP values for even more detailed model insights
両者に出てくるSHAP、発想は面白いですね。単純な数式でモデルの推定結果を模擬し、各特徴量にかかる係数で定量的に結果への寄与度を表現しています。これは決定木ベース以外の説明できなかったモデルに対する解釈性の要望を反映したものでしょう。
が、正解を模擬しないのはなぜでしょう。あくまでモデルの解釈性を加えることが目的だからでしょうか。それとも理解できていないのでしょうか?
精度を犠牲にしつつ解釈性を加えた簡易モデルの追加。そこまでして「ブラックボックス」を避ける必要はないと思います。最後に判断するのはヒトなので。
このあたり、機械学習分野の今後の動向が注目されます。
********************************
20200104追記
技術評論社「Kaggleで勝つデータ分析の技術」
6.2特徴量選択および特徴量の重要度
6.2.2 特徴量の重要度を用いる方法
・モデルから出力される重要度:RF、GBDT
・他の方法:Permutation Importance、null importance、boruta、特徴量の機械的大量生成
2019年12月29日日曜日
特徴量選択
機械学習の特徴量選択について。
機械学習にかける前に有効な特徴量を選択するのですが、その手法は以下のように区分されています。https://www.oreilly.co.jp/books/9784873117980/
********************************
20200104追記
技術評論社「Kaggleで勝つデータ分析の技術」でも同じ3区分でした。
6.2特徴量選択および特徴量の重要度
6.2.1 単変量統計を用いる方法
6.2.2 特徴量の重要度を用いる方法
6.2.3 反復して探索する方法
手法に関しては以下の記載がありました。
「なお、scikit-learn のドキュメントにはモデルの選び方として図4.8がありますが、データが十分にあるテーブルデータの回帰や分類のタスクでは、GBDT でうまくいくことが多く、このように細かに条件で分岐させる必要はあまりないでしょう。」p230
機械学習にかける前に有効な特徴量を選択するのですが、その手法は以下のように区分されています。https://www.oreilly.co.jp/books/9784873117980/
- filter method、単変量統計: 特徴量個々の分離性・相関係数・分散などを利用。
- wrapper method、反復特徴量選択: 再帰的特徴量削減(Recursive Feature Elimination, RFE)、Boruta など。feature_importance 利用。計算コスト高。
決定木ベースの手法による feature_importance を利用すれば、モデル作成と重要度の評価が同時に実施できます。3つ目の手法としてモデルベース特徴量選択と呼ぶそうです。
分類問題では、決定木ベースのモデルに依存した選択手法が主体でしょう。ライブラリも提供されており、環境は整っています。
逆に、決定木ベース以外のモデルでは feature_importance 属性を利用できませんので、RFE はダメ、モデルベース特徴量選択も当然ダメです(XGBoost や LightGBM 等のモデルが分類問題に対し高精度に機能することを示してきた中で、あえて他の手法に積極的に移行する動機はないのですが)。
決定木ベース以外では、モデルに依存しない指標を利用するようですね。例えば、Permutation importance(組もうかと思ったら、wrapper がありました)。
これは素人でも容易に思いつく手法なのですが、高コスト。完走させるために軽い手法を選択しても結果が良くないと、その中での指標の低下量、重要度を比較するだけになります(木を見て森を見ず状態)。
いずれにしても、何らかの評価・解釈を行って重要度の低い特徴量を破棄し、モデル全体の計算コスト低下、予測精度向上に努める必要があります。
特徴量の評価・選択は前処理に続き必要な作業だと、あらためて認識させられました。
********************************
20200104追記
技術評論社「Kaggleで勝つデータ分析の技術」でも同じ3区分でした。
6.2特徴量選択および特徴量の重要度
6.2.1 単変量統計を用いる方法
6.2.2 特徴量の重要度を用いる方法
6.2.3 反復して探索する方法
手法に関しては以下の記載がありました。
「なお、scikit-learn のドキュメントにはモデルの選び方として図4.8がありますが、データが十分にあるテーブルデータの回帰や分類のタスクでは、GBDT でうまくいくことが多く、このように細かに条件で分岐させる必要はあまりないでしょう。」p230
SVM
延長戦突入。
今日はサポートベクターマシン(support vector machine, SVM)。SVM はデータ数が少ない場合に用いられる手法で、昔よく利用されていました。が、今回は大量のデータを処理する必要があります。力技でこなそうと、scikit-Learn で組んでみました。が、やはり遅い。
********************************
20200104追記
結局、他のライブラリとの連携の関係で、scikit-Learn を選択。年末から調整を続けていますが、最終モデルは40時間以上経過した今でもまだ完走しません。遅すぎ。特徴量を減らさないとダメということはわかりました。
技術評論社「Kaggleで勝つデータ分析の技術」では以下の記載がありました。SVM の使われない理由が明記された書き物を見たのは初めてです。
********************************
20200109追記
O'REILLY「Pythonで始める機械学習」にも、以下のような記述がありました。
C、gamma の影響についてはp98に図解あり。
今日はサポートベクターマシン(support vector machine, SVM)。SVM はデータ数が少ない場合に用いられる手法で、昔よく利用されていました。が、今回は大量のデータを処理する必要があります。力技でこなそうと、scikit-Learn で組んでみました。が、やはり遅い。
SVCではなく、SVRだとどうか?と試しましたが、終わりません。
GPU版がないかな?と思い RAPIDS の中を覗いてみると、cuML の中に SVC がありました。が、fit()を使うと GTX1060 3GB のメモリに載りません(想定内)。scikit-Learn の cross validation に放り投げてみるも連携しません。
デモデータだと計算速度が40倍も違ったので、GPU は利用したいところです。
RTX8000 48GB なら動くでしょう。汎用性はなくなりますが、このマシンのみで動かすことを前提に、組んでみましょうか。
********************************
20200104追記
結局、他のライブラリとの連携の関係で、scikit-Learn を選択。年末から調整を続けていますが、最終モデルは40時間以上経過した今でもまだ完走しません。遅すぎ。特徴量を減らさないとダメということはわかりました。
技術評論社「Kaggleで勝つデータ分析の技術」では以下の記載がありました。SVM の使われない理由が明記された書き物を見たのは初めてです。
本章では、テーブルデータを扱う分析コンペにおいて使われるモデルとして以下を紹介します。・・・・・・ なお、教師あり学習のモデルとして良く紹介されるモデルのうち、サポートベクターマシンは精度や計算速度が見劣りするため、あまり使われることはありません。
********************************
20200109追記
O'REILLY「Pythonで始める機械学習」にも、以下のような記述がありました。
- サンプル数が大きくなるとうまく機能しない(10万サンプルぐらいまではうまく機能する)
- 10万サンプルぐらいになると、実行時間やメモリ使用量の面で難しくなる。
- 注意深い前処理とパラメータ調整が必要。→決定木ベースが良く用いられる理由の一つ。
- 検証が難しい。予測された理由を理解・説明することが困難。
C、gamma の影響についてはp98に図解あり。
登録:
投稿 (Atom)