アンサンブル学習（Ensemble learning）とバスケット分析（basket analysis）

[実践 機械学習システム](http://www.oreilly.co.jp/books/9784873116983/)の7章と8章が、やりたいことに近かったので、ザクザクっとまとめました。（数式とコードには一切触れず、概要だけ）
アソシエーション・ルール・マイニングもキレイにまとまった資料があったので書きませんでした。（一番下の参考のところ）

## アンサンブル学習（Ensemble learning）
個々に学習した複数の学習器を融合させて汎化能力（未学習データに対する予測能力）を向上させ、一つの学習器を作成することをアンサンブル学習と呼ばれます。

特徴として、各学習器を新しい特徴量として考えることができ、訓練データを基にその新しい組み合わせ方を学習する。

諺の**３人寄れば文殊の知恵**な感じです。学習器の個数を増加することにより識別能力が向上して行く。アンサンブル学習は、高い識別能力に加え単純性（学習器を複数個用意するだけ）と 汎用性（任意の学習器に適用可能）という利点がある。

そのためには、各学習器の重みを調整する必要がある。（全ての学習器の重みが均一になることは稀ってこと）。つまり、各学習器が予想したレーティングと決めらた重みの積を全て足し合わせた値を最終的な予測レーティングとして採用する。（[加重平均 weighted average](http://www.stat.go.jp/koukou/howto/math/)）
最適な**重み**はデータから学習する。

図（ニューラルネットワークの複数学習器版みたいな）
![](http://cse-wiki.unl.edu/wiki/images/5/54/Combining_classifiers_overview.png)

PythonのScikit-Learnにも入ってました。
[1.9. Ensemble methods — scikit-learn 0.15.2 documentation](http://scikit-learn.org/stable/modules/ensemble.html)

### 代表的なアンサンブル学習アルゴリズム
#### [バギング(Bagging, Bootstrap Aggregating)](http://ibisforest.org/index.php?%E3%83%90%E3%82%AE%E3%83%B3%E3%82%B0)
##### 仕組み	
* 例題を複数回サンプリングして仮説を多数作る	
* それらの集合体で最終仮説を作成する	

##### 特徴	
* 不安定な学習モデル（ニューラルネットなど）の安定化が行える	

##### 特徴
* それほど能力の高くない機械学習をたくさん集めて、個々の学習器より本質的に高い能力を持つ予測器を作り出すこと	

#### [ランダムフォレスト(Random Forest)](http://ibisforest.org/index.php?%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%83%95%E3%82%A9%E3%83%AC%E3%82%B9%E3%83%88)

##### 仕組み
* 学習を行ないたい観測データから、ランダムサンプリングによりB組のサブサンプルを生成するブートストラップサンプル
* 各サブサンプルをトレーニングデータとし、$B$本の決定木を作成する
* 指定したノード数 $n_{\mathit{min}}$ に達するまで、以下の方法でノードを作成する
* トレーニングデータの説明変数のうち、$m$個をランダムに選択する
* 選ばれた説明変数のうち、トレーニングデータを最も良く分類するものとそのときの閾値を用いて、ノードのスプリット関数を決定する

##### 特徴
* 説明変数が多数であっても、うまく働く
* 学習と評価が高速
* 決定木の学習は完全に独立しており、並列に処理可能
* 説明変数の重要度（寄与度）を算出可能
* Out of Bagエラー(学習データのうち、平均で1/3ぐらいんの学習に使われないデータ)の計算により、クロスバリデーションのような評価が可能
* AdaBoostと比べて特定の説明変数への依存が少ないので、クエリデータの説明変数が欠損していても良い出力を与える


#### [ブースティング(Boosting)](http://ibisforest.org/index.php?%E3%83%96%E3%83%BC%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0) 
##### 仕組み	
* 逐次的に例題の重みを変えて学習	
* 組み合わせて精度をあげる	

##### 手法
* AdaBoostは学習データに対するリサンプリング（ランダムにデータを抽出することを繰り返すことにより，標本間のデータにおいて生じる差異を把握すること）の際に重みを逐次的に更新していき，できた機械学習を最後に機械学習に対する重みをつけて足し合わせて統合学習器をつくる。
* 事例を捨てずに重みをつけて何度も学習する	
* 不得手な事例に対して重みを増して学習する	
* Ｔ個の仮説を学習して多数決をとる　　	
* ノイズの混じってないデータにはAdaBoostの効果は顕著


## バスケット分析（basket analysis）
推薦システムを学習するための別の分析手法。
バスケット分析で扱うデータは、どのアイテムが一緒に購入されているか、ということだけで、そのアイテムが気に入ったかどうか、などの情報は必要としません。（協調フィルタリングにおけるアイテムベースぽっい）

![](http://clicccar.com/wp-content/uploads/b8d0f7a003316593b6687e186597679d-618x372.jpg)

このバスケット分析は「買い物かご」だけに適用可能という訳ではないです。一緒にグループとしてまとめることができ、その中のアイテムをレコメンドする必要があれば、どのような対象でも適用することができます。
例えば、ブラウザの閲覧履歴から、そのユーザにお薦めのwebページを推薦するなど。

[バスケット分析の有名な、ビールとおむつの話](http://goo.gl/eNT8wh)

## 参考
[実践 機械学習システム](http://www.oreilly.co.jp/books/9784873116983/)
[アンサンブル学習](http://www.slideshare.net/holidayworking/ss-11948523)
[アンサンブル学習の勉強をした話（雑記？）](http://tomoshige-n.hatenablog.com/entry/2014/12/07/011221)
[SplusによるAdaBoostの実装](http://www.msi.co.jp/splus/events/student/2003pdf/sano.pdf)
[【Rによるデータサイエンス】集団学習](http://d.hatena.ne.jp/graySpace/20140510/1399696175)
[Random forest](http://ja.wikipedia.org/wiki/Random_forest)
[What is out of bag error in Random Forests?]
(http://stackoverflow.com/questions/18541923/what-is-out-of-bag-error-in-random-forests)
[第2回「ある商品といっしょによく売れる商品は何か？」を見つけるには　～マーケット・バスケット分析の考え方](http://gihyo.jp/dev/serial/01/mahout/0002)
[6.商品分析の手法（ABC分析、アソシエーション分析）](http://www.albert2005.co.jp/technology/mining/method2.html)
[第2回：アソシエーション分析~「使ってみたくなる統計」シリーズ ~](http://bdm.change-jp.com/?p=1341)
[アソシエーション分析](http://www.itmedia.co.jp/im/articles/0504/18/news084.html)