kids+cooking学習シート...Title kids+cooking学習シート.ol Created Date 5/11/2020 2:00:38 PM
機械学習(2)small-island.work/trial/ml2.pdf教師あり学習は多くの場合でブラックボックスとして使える...
Transcript of 機械学習(2)small-island.work/trial/ml2.pdf教師あり学習は多くの場合でブラックボックスとして使える...
機械学習(2)
概要1. 機械学習の基礎
• 概論• 教師あり学習• 教師なし学習• 強化学習
2. 教師あり学習• 最近傍法・線形識別・決定木• ランダムフォレスト• サポートベクターマシン
3. 確率モデリングと教師なし学習• クラスタリング• ナイーブベイズモデル• 混合ガウスモデル• クロスバリデーション・モデル選択
4. データ構造と機械学習アルゴリズム実践• テーブルデータ• 行列データ• スパースモデリング• 時系列データ• グラフデータ
補助資料:http://small-island.work/trial/
教師あり学習は多くの場合でブラックボックスとして使える
まず始めに
問い:なぜ教師あり学習を学ぶ必要があるのか回答:1. 不測の事態が起こった場合にも正しく対処ができる
(実際に使うときには結構起こる)
2. 正しい使い方・チューニングができる(似非科学的なものを回避できる)
携帯電話のように中身の仕組みを知らなくてもある程度使える
この講義の目的
目的1.ブラックボックスのまま、教師あり学習手法を使うことができるようになる
2.機械学習手法の基本原理を知って、正しい使い方ができる。また、不測の事態が起こった場合にも正しく対処ができるようにする
3.細かい手法よりも考え方を重視
途中、数式も出てきますが、イメージがつかめればオッケーです(むしろ途中式とかは省略しています)
関連分野計算と人工知能
論理・探索 機械学習 ニューラルネットワーク
1958年:パーセプトロン1967年:k-means法(教師なし学習:クラスタリング)
1989年:Q学習(強化学習)
1972年: Prolog
第1次AIブーム: 推論と探索1956年−1974年
1992年:非線形SVM(教師あり学習)
第2次AIブーム:知識(エキスパートシステム)1980年−1987年
第3次AIブーム:深層学習2006年−
1969年:パーセプトロンの限界
1986年:誤差逆伝搬法
2006年:オートエンコーダー1990年~:統計的機械学習・確率モデル・汎化誤差理論・ベイズモデル
1950年: チューリングテスト1956年: ダートマス会議
深層学習
機械学習人工知能
教師あり学習学習
テスト・予測
画像認識の例
学習用データセット
テスト用データ
Cifer10: 60000 32x32 color images in 10 classes
dog
モデル
モデル
多変量データ
0
1
2
3
4
11 11.5 12 12.5 13 13.5 14 14.5 15
基本2次元の場合で説明するが、多次元の場合にもそのまま使える(多変量解析の考え方)
色:3つのブドウ品種
アルコール度数
フラボノイド
(ポリフェノールの一種) 品種 アルコール
度数フラボノイド・・・
1 14.23 3.06・・・1 13.2 2.76・・・2 12.37 0.57・・・2 12.33 1.09・・・3 12.86 1.25・・・3 12.88 1.22・・・
多変量の場合は列が増えるだけ
問題:リンゴとミカンを自動で識別する
https://ml.berkeley.edu/blog/tutorials/
色
大きさ
問題:リンゴとミカンを自動で識別する
色
大きさ
問題:リンゴとミカンを自動で識別する
https://ml.berkeley.edu/blog/tutorials/
色
大きさ
方法1:最も近い点を探す
色
最近傍法(Nearest neighbor: NN法)
大きさ
Nearest neighbor 法の欠点
色
外れ値(outlier)に弱い(偶に他と大きく違うサンプルが含まれるようなデータ)
大きさ
改善法:k近傍(k-nearest neighbor:k-NN) 法近い順にk個を見て、多数決で決定する
方法1:最も近い点と同じにする
k-nearest neighbor / nearest neighbor 法の欠点:データ点をすべて保存しておく必要がある→データ数が多い時には使いにくい
応用例• 大規模なシステムで複雑なアルゴリズムが実装しにくい
場合• 高速なデータベース・検索システムが必要
• ヒューリスティックな変更が加えやすい• オンライン化・逐次化など
方法2:直線で分離する
色
線形分類器(Linear classifier)利点:曲線の式(傾きと切片)のみで識別できる
(データを覚えておく必要はない)何らかの基準で直線を一つに決める必要がある
大きさ
方法2:直線で識別する
色
フィッシャーの線形識別データの集合に注目し、同じクラスの集合の分散を考慮して、異なるクラスを分離する
大きさ
平均𝒎𝒎 = 𝐸𝐸 𝑿𝑿 =
1𝑁𝑁�𝑖𝑖
𝑁𝑁
𝒙𝒙𝑖𝑖
平均と分散
色
大きさ
分散𝐒𝐒 = 𝐸𝐸 𝒙𝒙𝑖𝑖 − 𝐸𝐸 𝑿𝑿 2
=1𝑁𝑁�𝑖𝑖
𝑁𝑁
𝒙𝒙𝑖𝑖 − 𝐸𝐸 𝑿𝑿 𝒙𝒙𝑖𝑖 − 𝐸𝐸 𝑿𝑿 𝑇𝑇
𝑿𝑿:データの集合𝒙𝒙𝑖𝑖: データ点𝑁𝑁:データの数
平均: 𝒎𝒎1
フィッシャーの線形判別
分散: 𝐒𝐒1
色
大きさ
平均: 𝒎𝒎2
分散: 𝐒𝐒2
直線𝑤𝑤1𝑥𝑥 + 𝑤𝑤2𝑦𝑦 + 𝑏𝑏 = 0
𝒘𝒘 = 𝑤𝑤1,𝑤𝑤2 :境界の傾き𝒅𝒅 = 𝒎𝒎1 −𝒎𝒎𝟐𝟐 :クラス間の距離
𝑱𝑱 𝒘𝒘 =𝒘𝒘𝑇𝑇 𝒅𝒅 ⋅ 𝒅𝒅𝑇𝑇 𝒘𝒘𝒘𝒘𝑇𝑇 𝐒𝐒1 + 𝐒𝐒2 𝒘𝒘
max𝒘𝒘
𝑱𝑱 𝒘𝒘
具体的には以下を解くと境界の直線を計算できる
クラス間の距離を大きく
クラスごとの分散を小さく
フィッシャーの線形判別
色
大きさ
利点:直線の式(傾きと切片)のみで識別できる• 単純に平均の中間で切るよりは良い性能(グレーのライン)• シンプルなので改良したものなどが多くある
線形識別の応用では次に説明するサポートベクターマシンの方がよくつかわれる
サポートベクターマシン(詳細は後半で)
色
基本は二つのクラスを直線で分けるとき、マージンが最大となるように決定する方法
大きさマージン
方法3:ルールで識別する
より分かりやすい識別をしたい→ ルールによる識別:決定木(decision tree)
大きさ
色
≦ 4cm> 4cm
直線で分けることが必ずしも分かりやすいとは限らない
方法3:ルールで識別する
色
決定木(decision tree)
大きさ
大きさ
色
≦ 4cm>4cm
ルールでの分割は軸に沿った直線で分けるのと同じ
アプローチ 手法 性能 特徴方法1:最も近い点を探す NN法
k-NN法中~高 データをすべて
保存する必要シンプルで強力
方法2:直線で分離する フィッシャーの線形分離 低 改良しやすい
サポートベクターマシン 高 性能が高い
方法3:ルールで分ける 決定木 低 人間が理解しやすい
ここまでのまとめ
より複雑なモデルを使った(曲線などを用いた)識別をしたい!• 例えば手書き文字認識などの境界線は複雑→
https://nlml.github.io/in-raw-numpy/in-raw-numpy-t-sne/
目標:ランダムフォレストの特性・重要なパラメータを理解して、使いこなせるようになる
例:ランダムフォレスト
Rにもrandom forest パッケージがある( 29ページからなるマニュアル付き)
Pythonのrandom forest classifier のマニュアル
第一回講義で使ったロジスティック回帰のプログラムをランダムフォレストを使ったプログラムに置き換える
課題:理解せず使ってみる
ヒント1:必要なモジュールをインポートするヒント2:ロジスティック回帰とランダムフォレストを入れ替える
(両者の使い方は同じ)
参照プログラムlecture_logreg.ipynb
from sklearn.ensemble import RandomForestClassifierを追加model = LogisticRegression()をmodel = RandomForestClassifier()に変更
解答プログラムlecture_rf.ipynb
過学習(overfitting)複雑なモデルを使う際の注意すべきこと
単純にデータとの誤差が小さくなるようにすると複雑すぎる境界になる→単に誤差が少なくなるのが分けるのが良いというわけではない
識別法1 識別法2 識別法3
誤差 大 小
訓練誤差と汎化誤差
実際の問題では未知のデータセットに関する期待値計算を含むので汎化誤差を計算できないが、仮想的にこのような状況を考えることで、識別器の性能を正しく測ることができる
訓練データ
未知のデータセット𝐷𝐷
汎化誤差=E𝐷𝐷 𝑅𝑅(𝐷𝐷)(期待損失)
𝑅𝑅(𝑥𝑥): データに対する誤差訓練誤差=1
N∑𝑖𝑖𝑁𝑁 𝑅𝑅(𝑥𝑥𝑖𝑖)
大 小
大 小 大
= 𝐸𝐸𝐷𝐷 𝑅𝑅(𝑦𝑦(𝑥𝑥;𝐷𝐷), 𝑡𝑡) =
バイアスーバリアンス分解
∫ 𝐸𝐸𝐷𝐷[𝑦𝑦 𝑥𝑥;𝐷𝐷 ] − 𝐸𝐸 𝑡𝑡 𝑥𝑥;𝐷𝐷 2 𝑝𝑝 𝑥𝑥 𝑑𝑑𝑥𝑥
+∫ 𝐸𝐸𝐷𝐷 [ 𝑦𝑦 𝑥𝑥;𝐷𝐷 − 𝐸𝐸𝐷𝐷 𝑦𝑦 𝑥𝑥;𝐷𝐷 2 𝑝𝑝 𝑥𝑥 𝑑𝑑𝑥𝑥
+∫ ∫ 𝐸𝐸𝐷𝐷 𝐸𝐸 𝑡𝑡 𝑥𝑥;𝐷𝐷 − 𝑡𝑡 2 𝑝𝑝 𝑥𝑥, 𝑡𝑡 𝑑𝑑𝑥𝑥𝑑𝑑𝑡𝑡
= 𝐸𝐸 学習したモデルの予測の平均−最適な予測 2
+𝐸𝐸 学習したモデルの予測−学習したモデルの予測の平均 2の平均
+𝐸𝐸 最適な予測−未知データのラベル 2
ℎ 𝑥𝑥 = 𝐸𝐸 𝑡𝑡 𝑥𝑥;𝐷𝐷 = ∫ 𝑡𝑡𝑝𝑝 𝑡𝑡|𝑥𝑥 𝑑𝑑𝑡𝑡二乗損失の場合にはこれが最適な予測
汎化誤差=E𝐷𝐷 𝑅𝑅(𝐷𝐷)(期待損失)
バイアス:学習モデルが最適な予測とどれだけずれているか
バリアンス:学習したモデルの出力がどれだけばらつくか
ノイズ:最適な予測をした場合の誤差
汎化誤差=⤵♦♤♽+バリアンス+ノイズ
バイアスとバリアンス
バリアンス訓練データによるばらつき
バイアス平均でどれくらい間違えるか
汎化誤差未知のデータを含めた誤差
大 小 大
小 大
小大
ノイズ機械学習ではどうにもならない部分
未知のデータセット𝐷𝐷
うまく複数のデータセットを用意して、独立にそれらから学習を行い平均をとることで、疑似的に汎化誤差をさげることができないか?
アイデア
データ1
データ2
手順1. データからT個のサブセッ
トを作成(ブートストラップサンプリング)
2. 各T本のサブセットから決定木を作成する• 説明変数のうち、m 個を
ランダムに選択する• 木を徐々に大きくする• 終了条件を満たす
3. 全ての木を集約する
ランダムフォレスト(Random Forest)
アンサンブル学習の一種個々に学習した識別器を複数個用意し、それらをまとめて一つの識別器を構築 する手法
大きさ
色
≦ 4cm>4cm
決定木A 決定木B 決定木C
森
N個の学習データからN個をランダムに抽出(リサンプリング)してサブセットを作成する
• 重複を許す(復元抽出)• 重複した分使われないデータがある(Out-of-bag:OOB)
• M回繰り返す
ブートストラップサンプリング
様々な場面で使われる手法(検定・そのほかの機械学習)
M個
ブートストラップ
バギング: Bootstrap AGGregatING
識別器の学習 Voting
𝑦𝑦𝑅𝑅𝑅𝑅 =1T�𝑖𝑖=1
T
𝑦𝑦𝑖𝑖
性能を上げるためにはどうすればいいか
𝑣𝑣𝑣𝑣𝑣𝑣 𝑦𝑦𝑅𝑅𝑅𝑅 = ⋯ = 𝜌𝜌𝜎𝜎2 +1 − 𝜌𝜌𝜎𝜎2
𝑇𝑇
𝑦𝑦𝑅𝑅𝑅𝑅 =1T�𝑖𝑖=1
T
𝑦𝑦𝑖𝑖T個の識別器
𝑚𝑚 = 𝐸𝐸 𝑦𝑦𝑖𝑖𝜎𝜎2 = 𝑣𝑣𝑣𝑣𝑣𝑣 𝑦𝑦𝑖𝑖 = 𝐸𝐸 𝑦𝑦𝑖𝑖 − 𝑚𝑚 2
𝜌𝜌 = 𝑐𝑐𝑐𝑐𝑣𝑣 𝑦𝑦𝑖𝑖 ,𝑦𝑦𝑗𝑗 =𝐸𝐸 𝑦𝑦𝑖𝑖 − 𝑚𝑚 𝑦𝑦𝑗𝑗 − 𝑚𝑚
𝜎𝜎2
各識別器がどれくらいばらついているか
全体の識別器がどれくらいばらついているか
性能を上げるためには?• 識別器をたくさん用意する( 𝑇𝑇 を大きくする)• 識別器の相関𝜌𝜌を小さくする
識別器の相関
識別器の出力の平均と分散
バリアンス訓練データによるばらつき
バイアス平均でどれくらい間違えるか
汎化誤差=バイアス+バリアンス+ノイズ未知のデータを含めた誤差
できる限り各識別器の相関が小さくなってほしい
𝑐𝑐𝑐𝑐𝑣𝑣 𝑦𝑦𝑖𝑖 ,𝑦𝑦𝑗𝑗 = 𝜌𝜌
ランダムに説明変数を選択する
𝑦𝑦𝑅𝑅𝑅𝑅 =1T�𝑖𝑖=1
T
𝑦𝑦𝑖𝑖T個の識別器
ランダムに選んだ変数以外を消すことで、多様な識別器が学習されるようにする
どれくらいの変数を選ぶのか?→チューニングが必要
ブートストラップ+変数のランダム選択
ランダムフォレスト全体の流れ
識別器の学習 Voting
どれだけの変数を選択するか? いくつの識別器を
作るか?
例:ランダムフォレスト(再掲)Pythonのrandom forest classifier のマニュアル
事例:オーバーフィットに気づいたら?
汎化誤差を小さくしたい• 対処1:識別器をたくさん用意する( 𝑇𝑇を大きくする)
n_estimators というパラメータを大きくする• 対処2:識別器の相関を小さくする=選択する変数を少なくする
max_features というパラメータを小さくする
サポートベクターマシン
少し前まではかなり流行の単語だった今でも、データの数が多くない時には有効な方法の一つ
サポートベクターマシン
Pythonのsupport vector classifier のマニュアル
課題:理解せず使ってみる ヒント:ランダムフォレストの場合と同じ参照プログラムlecture_logreg.ipynb
解答プログラムlecture_svm.ipynb
from sklearn.svm import SVCを追加model = LogisticRegression()をmodel = SVC ()に変更
サポートベクターマシン基本は二つのクラスを直線で分けるとき、マージンが最大となるように決定する方法
色
大きさマージン以下の要素が必要
1. マージンの定式化2. 分類に寄与するデータ
(サポートベクター)とそうでないデータを計算したい(双対表現)
3. 直線でない場合も扱いたい
(カーネル・トリック)
マージンの定式化
色
大きさ
𝑓𝑓 𝑥𝑥,𝑦𝑦 = 0
𝑥𝑥𝑗𝑗 ,𝑦𝑦𝑗𝑗 = 𝒙𝒙𝑗𝑗𝑡𝑡𝑗𝑗 = −1
𝑓𝑓 𝑥𝑥,𝑦𝑦 = 1
𝑓𝑓 𝑥𝑥,𝑦𝑦 = −1
𝑓𝑓 𝑥𝑥,𝑦𝑦 = 𝑤𝑤1𝑥𝑥 + 𝑤𝑤2𝑦𝑦 + 𝑏𝑏
𝑥𝑥𝑖𝑖 ,𝑦𝑦𝑖𝑖 = 𝒙𝒙𝑖𝑖𝑡𝑡𝑖𝑖 = 1
|1 − 𝑏𝑏|| 𝒘𝒘 | −
𝑏𝑏| 𝒘𝒘 |
=1
| 𝒘𝒘 |
𝒘𝒘 = √(𝑤𝑤12 + 𝑤𝑤22)
式変形
maxw
1| 𝒘𝒘 |
s.t. 𝑓𝑓 𝑥𝑥𝑖𝑖 ,𝑦𝑦𝑖𝑖 ≥ 𝑡𝑡𝑖𝑖
マージン最大化
minw
12𝒘𝒘 2
𝑡𝑡𝑖𝑖𝑓𝑓 𝑥𝑥𝑖𝑖 ,𝑦𝑦𝑖𝑖 ≥ 1
整理して最小化問題にする
𝐿𝐿 𝒘𝒘,𝑏𝑏,𝒂𝒂 =12
𝒘𝒘 2 −�𝑖𝑖
𝑣𝑣𝑖𝑖 𝑡𝑡𝑖𝑖𝑓𝑓 𝑥𝑥𝑖𝑖 ,𝑦𝑦𝑖𝑖 − 1
max𝒂𝒂
min𝒘𝒘,𝑏𝑏
𝐿𝐿 𝒘𝒘, 𝑏𝑏,𝒂𝒂ラグランジュの未定乗数法
𝜕𝜕𝐿𝐿 𝒘𝒘,𝑏𝑏,𝒂𝒂𝜕𝜕𝒘𝒘
= 𝒘𝒘−�𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 𝒙𝒙𝑖𝑖 = 0 𝒘𝒘 = �𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 𝒙𝒙𝑖𝑖
𝜕𝜕𝐿𝐿 𝒘𝒘, 𝑏𝑏,𝒂𝒂𝜕𝜕𝑏𝑏
= −�𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 = 0 �𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 = 0
𝒂𝒂のみの式にするため𝒘𝒘と 𝒃𝒃で微分𝑓𝑓 𝑥𝑥,𝑦𝑦 = 𝑤𝑤1𝑥𝑥 + 𝑤𝑤2𝑦𝑦 + 𝑏𝑏𝐿𝐿 𝒘𝒘, 𝑏𝑏,𝒂𝒂 =
12
𝒘𝒘 2 −�𝑖𝑖
𝑣𝑣𝑖𝑖 𝑡𝑡𝑖𝑖 𝒘𝒘𝑇𝑇𝒙𝒙𝑖𝑖 + 𝑏𝑏 − 1
双対表現
max𝒘𝒘,𝑏𝑏
1| 𝒘𝒘 |
マージン最大化
𝑓𝑓 𝑥𝑥𝑖𝑖 ,𝑦𝑦𝑖𝑖 ≥ 𝑡𝑡𝑖𝑖
𝑓𝑓 𝑥𝑥,𝑦𝑦 = 𝑤𝑤1𝑥𝑥 + 𝑤𝑤2𝑦𝑦 + 𝑏𝑏
条件:𝑖𝑖番目のデータが境界線で分けられている
境界線(新たなデータはこれが正負で判断)
max𝒂𝒂
𝐿𝐿 𝒂𝒂 =
max𝒂𝒂
−12�𝑖𝑖
�𝑗𝑗
𝑣𝑣𝑖𝑖𝑣𝑣𝑗𝑗𝑡𝑡𝑖𝑖𝑡𝑡𝑗𝑗𝒙𝒙𝑖𝑖𝑇𝑇𝒙𝒙𝑗𝑗 + �𝑖𝑖
𝑣𝑣𝑖𝑖
データの重み𝑣𝑣𝑖𝑖に関する最大化
異なるラベルのデータは𝑣𝑣を大きくしたい
2つのデータの近さ
境界付近のデータの𝑣𝑣は大きくなり、それ以外は0となるデータ点について述べている
𝑣𝑣𝑖𝑖 ≥ 0 �𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 = 0
𝑓𝑓 𝒙𝒙 = 𝒘𝒘𝒙𝒙 + 𝑏𝑏 = �𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 𝒙𝒙𝑖𝑖𝒙𝒙 + b
境界線(新たなデータはこれが正負で判断)
条件:
色
大きさ
等価
直線について述べている
双対表現
max𝒘𝒘,𝑏𝑏
1| 𝒘𝒘 |
マージン最大化
𝑓𝑓 𝑥𝑥𝑖𝑖 ,𝑦𝑦𝑖𝑖 ≥ 𝑡𝑡𝑖𝑖
𝑓𝑓 𝑥𝑥,𝑦𝑦 = 𝑤𝑤1𝑥𝑥 + 𝑤𝑤2𝑦𝑦 + 𝑏𝑏
条件:𝑖𝑖番目のデータが境界線で分けられている
境界線(新たなデータはこれが正負で判断)
max𝒂𝒂
𝐿𝐿 𝒂𝒂 =
max𝒂𝒂
−12�𝑖𝑖
�𝑗𝑗
𝑣𝑣𝑖𝑖𝑣𝑣𝑗𝑗𝑡𝑡𝑖𝑖𝑡𝑡𝑗𝑗𝒙𝒙𝑖𝑖𝑇𝑇𝒙𝒙𝑗𝑗 + �𝑖𝑖
𝑣𝑣𝑖𝑖
データの重み𝑣𝑣𝑖𝑖に関する最大化
異なるラベルのデータは𝑣𝑣を大きくしたい
2つのデータの近さ
境界付近のデータの𝑣𝑣は大きくなり、それ以外は0となるデータ点について述べている
𝑣𝑣𝑖𝑖 ≥ 0 �𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 = 0
𝑓𝑓 𝒙𝒙 = 𝒘𝒘𝒙𝒙 + 𝑏𝑏 = �𝑖𝑖
𝑣𝑣𝑖𝑖𝑡𝑡𝑖𝑖 𝒙𝒙𝑖𝑖𝒙𝒙 + b
境界線(新たなデータはこれが正負で判断)
条件:
色
大きさ
等価
直線について述べている
サポートベクター
カーネル・トリック
max𝒂𝒂
𝐿𝐿 𝒂𝒂 =
max𝒂𝒂
−12�𝑖𝑖
�𝑗𝑗
𝑣𝑣𝑖𝑖𝑣𝑣𝑗𝑗𝑡𝑡𝑖𝑖𝑡𝑡𝑗𝑗𝒙𝒙𝑖𝑖𝑇𝑇𝒙𝒙𝑗𝑗 + �𝑖𝑖
𝑣𝑣𝑖𝑖
双対関数の最大化
𝑖𝑖と𝑗𝑗が異なるラベルのデータは𝑣𝑣を大きくしたい
データ間の近さ𝑘𝑘(𝒙𝒙𝑖𝑖 ,𝒙𝒙𝑗𝑗)
データ間の近さを測る関数(カーネル関数)ならば何でもよい
𝑘𝑘 𝒙𝒙𝑖𝑖 ,𝒙𝒙𝑗𝑗 = 𝑔𝑔 𝒙𝒙𝑖𝑖 𝑇𝑇𝑔𝑔 𝒙𝒙𝑗𝑗2次元から3次元に写した先で近さを測ってもよい
3次元ならば線形で切れる→サポートベクトルマシン+カーネルトリックで曲線で分離することも可能
特徴空間
適切に選ぶ必要があるが、実際には…• 多項式カーネル
• 多項式の次数に応じた特徴空間へ写像• 𝑘𝑘 𝒙𝒙𝑖𝑖 ,𝒙𝒙𝑗𝑗 = �埻�
• RBF(radial basis function)カーネル• 無限次元の特徴空間へ写像• 𝑘𝑘 𝒙𝒙𝑖𝑖 ,𝒙𝒙𝑗𝑗 = exp −𝛾𝛾 𝒙𝒙𝑖𝑖 − 𝒙𝒙𝑗𝑗
• 文字列カーネル• 2つの文字列の共通部分を見て、文字列同士の近さを決める• 𝑘𝑘 𝒙𝒙𝑖𝑖 ,𝒙𝒙𝑗𝑗 = ����▲唱▔�
• 数式で書くのが難しいものでも数値さえ計算できればカーネルとして使える
カーネルの例
• きれいに分離できない場合を許す• どれくらい許すかを表すかは、パラメータを決める必要がある
サポートベクターマシンのさらなる工夫
色
大きさ
• Kクラス識別の場合– One-vs-rest : あるクラスとそれ以外の識別をK回行う
• 調整する場所はそれほど多くない• カーネルの種類を選ぶ
• きれいに分離できない場合を許すパラメータ
サポートベクターマシンの使い方
• 実際には両方試すことが多い
• サポートベクターマシンにはデータ数が多いと極端に時間がかかるという欠点がある
• 今回の議論の他にも計算時間に関する議論がある
• サポートベクターマシンはカーネルトリックにより数値以外のデータも直接利用できる(例:文字列カーネル)
Random forest vs サポートベクターマシン
で、結局どれを使えばいいのアプローチ 手法 性能 特徴
方法1:最も近い点を探す NN法k-NN法
中~高 データをすべて保存する必要シンプルで強力
方法2:直線で分離する フィッシャーの線形判別 低 改良しやすい
サポートベクターマシン 高 性能が高い
方法3:ルールで分ける 決定木 低 人間が理解しやすい
より複雑なモデルで識別 Random forest 高 性能が高い
サポートベクターマシン+カーネルトリック
高 カーネルにより多様なデータを扱えるデータが多いと時間がかかる
• シンプルであることは利点である• 最近傍法・k近傍法
• 分かりやすさは性能に勝る場合もある• 決定木
• 目先にとらわれることは将来の損失• 過学習・汎化誤差
• 多様性は大事• ランダムフォレスト
• 見方を変えると違ったものが見えるし、今まで見ていたものを見なくてよくなる(当たり前)
• サポートベクターマシン、カーネル法
教師あり学習まとめ
次回予告
1. 機械学習の基礎• 概論
• 教師あり学習• 教師なし学習• 強化学習
2. 教師あり学習• 最近傍法・線形識別・決定木• ランダムフォレスト• サポートベクターマシン
3. 確率モデリングと教師なし学習• クラスタリング• ナイーブベイズモデル• 混合ガウスモデル• クロスバリデーション・モデル選択
4. データ構造と機械学習アルゴリズム実践• テーブルデータ• 行列データ• スパースモデリング• 時系列データ• グラフデータ