はじめに
何をするにあたってもゼロからできることは限られています。
「巨人の肩の上に立つ」という言葉もありますが、先人の知恵として参考になる記事を活用して、レベルアップを図りたいものです。
- 機械学習に関する個人的なメモとリンク集①(機械学習編)
- 機械学習に関する個人的なメモとリンク集②(DeepLearning編)
- [機械学習に関する個人的なメモとリンク集③(BI・見える化編)]
(https://qiita.com/CraveOwl/items/7846abccbbaebed6ce63)
機械学習手法
機械学習に関しては、様々な手法があり、次の様に整理されているのが参考になります。
Classification
決定木(Decision Tree)
決して精度が高いわけではないが、ツリーによる見える化が説明力が高い
サポートベクターマシン(Support Vector Machine)
- A Benchmark of scikit-learn SVMs
- pythonの機械学習ライブラリscikit-learnの紹介
- scikit-learnを用いた機械学習入門 -データの取得からパラメータ最適化まで
- Making SVM run faster in python
- scikit-learnによる多クラスSVM
ランダムフォレスト(Random Forrest)
-パッケージユーザーのための機械学習(5):ランダムフォレスト
-実務でRandomForestを使ったときに聞かれたこと
-Random Forestで計算できる特徴量の重要度
-[Pythonのscikit-learnでRandomForest vs SVMを比較してみた]
(http://yut.hatenablog.com/entry/20121012/1349997641)
-tuneRF関数の挙動の検証
Regression
線形回帰
LASSO回帰
L1正則化を目的とした回帰モデル
SVR
時系列分析
- How to Grid Search ARIMA Model Hyperparameters with Python
- Pythonの覚え書き(Scikit-learn, statsmodels編)
- 時系列データの予測ライブラリ--PyFlux--
- サーバーレスでも機械学習がしたい - Time Series Edition -
- 状態空間モデル
- Prophet入門【Python編】Facebookの時系列予測ツール
Clustering
階層型クラスター分析(凝集法)
対象同士の近さを表すデンドログラム(樹形図)を描写することで、クラスター数を何個に分けるのが適切かをビジュアルで表す手法。
但し、樹形図で表現できる範囲になるため、対象の数は数百が限度。それを超えると、読み込みが大変。
Data Mining, Big Dataの世の中になる中で、データ量が莫大に増えていき、あまり使われなくなった。
-Python+matplotlibでDendrogram付きHeatmap
-Python: 階層的クラスタリングのデンドログラム描画と閾値による区分け
Tweet
非階層型クラスター分析(k-means)
最も有名な非階層クラスタリングの手法。クラスター数をK個に分けるとした場合に、どの様に分けるのが最適化をインプット情報を元に、自動的に判断してくれる。
クラスター数(K)を事前に決めることが必要であるというのが、この手法の最大の特徴であり弱点。これを回避するために、K-means++やX-meansといった、自動的に最適なクラスター数を導き出してくれる手法も開発されている。
顧客を購買傾向によってクラスタリングを行う場合にも使われるが、数万人が入るクラスターと数人しか入らないクラスターが同時に存在するなど、極端な分かれ方になることが多く、それを回避するためのパラメーターの調整が大変なため、個人的にはあまり使用しない。
スペクトラルクラスタリング
自己組織化マップ(SOM, Kohonen)
ニューラルネットワークの一種で与えられた入力情報の類似度をマップ上での距離で表現するモデル。
マップ上(2次元)で表現するため、クラスター数を決める際に、3×3のマップなど縦横を意識した掛け算で考える必要がある。
(そのため、クラスター数5とか、7とかの素数は、1×5, 1×7にしかならず、なんとなく気持ち悪い)
個人的に、顧客クラスタリングといえば、この手法を用いるべきというくらい愛用している。
K-meansなどの他の手法に比べて、極端な分かれ方になることが少なく、縦横で傾向がでやすいため、結果の解釈が誰にとっても分かりやすい。
T. Kohonen博士が考案したモデルなので、自己組織化マップ(SOM)ではなく、Kohonenと呼ばれることも多い。
トピックモデル
元々は文章中の「単語が出現する確率」を推定する、自然言語処理における統計的潜在意味解析の手法として用いられてきたが、数値確率モデルの一種で、「出現する確率」を推定する。データで用いることで1:1ではないネットワーキング(例:1人の顧客が、1つのクラスターに属するのではなく、複数のクラスターに属する。クラスターAに属する確率が60%、Bは30%・・・と属する確率が分かれる)にも用いられる。
トピックモデルといっても、様々な手法があるがLDA(Latent Dirichlet Allocation)が用いられるケースが多い。
所属確率が分かれるモデルのため、商品DNAの考え方と相性が良い(と個人的に思っている)。
- 「トピックモデルによる統計的潜在意味解析」読書会「第1章 統計的潜在意味解析とは」
- LDAで,トピックと文書の生成確率を考える
- 機械学習_潜在意味解析_pythonで実装
- PLSA(確率的潜在意味解析法)
次元圧縮
学習を支える仕組み(こっちがメインの場合も)
パラメータチューニング
- Scikit learnより グリッドサーチによるパラメータ最適化
- Rで機械学習するならチューニングもグリッドサーチ関数orオプションでお手軽に
- 機械学習のハイパーパラメーターを自動最適化、Preferred Networksがライブラリを公開
- ハイパーパラメータ自動最適化ツール「Optuna」公開
- Optuna+KerasでCNNのハイパーパラメータを最適化
特徴量選択
- 【機械学習】RFEを用いた特徴量の選別
- 第1回 Google Colaboratoryで始める機械学習のための特徴量エンジニアリング
- 第2回 Google Colaboratoryで始める機械学習のための特徴量エンジニアリング