1.
1
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
Introduction to Machine Learning Theory
for Software Engineers
ソフトウェアエンジニアのための
「機械学習理論」入門
ver1.2 2015/04/14
2.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
2
ソフトウェアエンジニアのための「機械学習理論」入門
目次
■ 第1部:データサイエンス入門
- データサイエンスと機械学習
- 機械学習アルゴリズムの分類
■ 第2部:回帰分析
- 誤差関数による回帰分析
- オーバーフィッティングの検出
- 最尤推定による回帰分析
■ 第3部:線形判別法
- パーセプトロン
- ロジスティック回帰
- 学習モデルの評価(ROC曲線)
■ 第4部:教師なし学習
- クラスタリング分析(k平均法)
■ その他の例
- ベイズ推定による回帰分析
- 参考資料
3.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
3
ソフトウェアエンジニアのための「機械学習理論」入門
第1部 データサイエンス入門
4.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
4
ソフトウェアエンジニアのための「機械学習理論」入門
データサイエンスと機械学習
5.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
5
ソフトウェアエンジニアのための「機械学習理論」入門
データサイエンスの全体像
データに基づいた
ビジネス判断
機械学習
過去のデータ 過去のデータ過去のデータ
分析に意味のある
データを選別
判断ルール
判断ルール
判断ルール
ビジネスとして意味のある
判断指標への変換
学習アルゴリズムの選定
これらすべてが
データサイエンス
の対象
6.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
6
ソフトウェアエンジニアのための「機械学習理論」入門
仮説検証のフィードバックプロセス
データに基づいた
ビジネス判断
機械学習
過去のデータ 過去のデータ過去のデータ
分析に意味のある
データを選別
判断ルール
判断ルール
判断ルール
ビジネスとして意味のある
判断指標への変換
学習アルゴリズムの選定
データの準備
データのモデル化
ビジネス適用と
結果の評価
7.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
7
ソフトウェアエンジニアのための「機械学習理論」入門
データサイエンスに必要な知識
データに基づいた
ビジネス判断
機械学習
過去のデータ 過去のデータ過去のデータ
分析に意味のある
データを選別
判断ルール
判断ルール
判断ルール
ビジネスとして意味のある
判断指標への変換
学習アルゴリズムの選定
データの準備
データのモデル化
ビジネス適用と
結果の評価
ビジネスの理解
データの理解
分析理論の理解
8.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
8
ソフトウェアエンジニアのための「機械学習理論」入門
ビジネスにおけるデータサイエンスの役割
■ データ分析を通して「ビジネス判断の質を向上」すること。
- 「未来のビジネス判断」に役立つ指標を「過去のデータ」から導きだすこと。
- 具体的なビジネス判断を「数値的根拠」を持って提案することが大切。
■ 例:台風が近づいているので、過去の台風の際にコンビニでどのような商品
が売れたか分析したデータサイエンティストはどんな結果を出すべきか?
- 水が通常よりも2割多く売れた。
●
水の在庫を増やせばいいの?売り切れてなかったら関係ないよね。
- 「アナ雪」のDVDが爆発的に売れた。
●
その時はたまたま「アナ雪」が人気だったからでしょ。
- コロッケが通常の10倍売れて、小さな店舗では品切れが続出した。
●
10倍売れても十分なコロッケを確保・・・・万一売れ残ったら廃棄するのか?
- ビールが通常の3倍売れて、小さな店舗では品切れが続出した。
●
ビールの在庫が少ない店舗は、3倍売れても十分な在庫を確保しよう。でもそれで
在庫確保にかけたコスト以上に儲かるの?
9.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
9
ソフトウェアエンジニアのための「機械学習理論」入門
データサイエンスにおける機械学習の役割
■ 決められたアルゴリズムにしたがって、過去のデータから「判断基準(判断
ルール)」を決定する手法。
- どのようなアルゴリズムを用いるかは、データサイエンティストが判断。
- 得られたルールの妥当性の評価も大切。過去のデータを正しく判断できるからと
言って、将来のデータを正しく判断できるとは限らない。
- 過去のデータは、「分析のために必要なデータ」として集めているとは限らない。
分析に意味のあるデータを選定するのもデータサイエンティストの役割
■ 機械学習をビジネスに活かすにはデータサイエンティストとしての「知見」
が必要
- 対象ビジネスの理解:ビジネスに役立つ結果がでないと意味がない。
- 分析データの理解:データは単なる数字の集まりではない。
- 分析理論の理解:データとビジネスを結びつける中核となる知識。
本セミナーのテーマ
10.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
10
ソフトウェアエンジニアのための「機械学習理論」入門
(イケテナイ)機械学習の例
■ 次の例は、データサイエンティストの活動として、どこに問題があるので
しょうか?
■ 例:携帯電話の契約更新時に解約しそうなユーザーを判別
- 過去に契約更新を迎えたユーザーのデータを元に、新たに契約更新を迎えるユー
ザーが解約しそうかどうかを判定するルールを作る。
- 使用するアルゴリズムは、「決定木(けっていぎ)」を用いる。
動物の種類を決定する決定木の例
11.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
11
ソフトウェアエンジニアのための「機械学習理論」入門
(イケテナイ)機械学習の例
■ データサイエンティストは、次のようなデータを収集しました。
- Yes: 解約したユーザー
- No : 解約しなかったユーザー
非公開
12.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
12
ソフトウェアエンジニアのための「機械学習理論」入門
(イケテナイ)機械学習の例
■ 機械学習ライブラリーに先のデータを入力し
て計算すると、右図の決定木が得られまた。
■ この結果を「解約の恐れがあるユーザーを判
定するルール」として事業部門に提出しまし
た。
■ 事業部門では、契約更新が近づいたユーザー
が解約しそうかどうかを判定するアプリケー
ションを作って、販売店に提供した上で、解
約防止キャンペーンに役立てるように指示し
ました。
■ その結果・・・???
非公開
13.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
13
ソフトウェアエンジニアのための「機械学習理論」入門
機械学習アルゴリズムの分類
14.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
14
ソフトウェアエンジニアのための「機械学習理論」入門
機械学習アルゴリズムの分類(代表例)
■ Classification / Class probability estimation
- 既存データを複数のクラスに分類して、新規データがどのクラスに属するかを予想
する。特定のクラスを予想する他、各クラスに属する確率を計算する方法もある。
●
携帯の機種変更時に「どの機種を選択するか」を予測する。
●
特別割引キャンペーンのDMを送ったら「申し込む/申し込まない」を予測する。
●
新規メールが「スパムである確率」を計算する。
■ Regression(回帰分析)
- 既存データの背後にある「関数」を推測して、具体的な「数値」を予測する。
●
新規サービスを提供したら「何人のユーザー」が利用するか予測する。
●
広告宣伝費を2倍にしたら売上は「何倍」になるか予測する。
■ Similarity matching
- 新規データが既存データの「どれと似ているか」を予測する。
●
新規顧客は、既存のどの顧客と似ているかを予測する。
15.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
15
ソフトウェアエンジニアのための「機械学習理論」入門
機械学習アルゴリズムの分類(代表例)
■ Clustering
- 既存データについて、具体的な指標を与えず、自然に分類されるグループを発見す
る。一般には、自然なグループを発見した後に、それぞれのグループの特性を他の
アルゴリズムで分析する。
●
既存顧客をグループに分けて、それぞれのグループに提供する製品/サービスを
決定する。
■ Co-occurrence grouping
- 既存データから、同時に発生する事象を発見する。
●
「Xを買った人はYも買っています」
17.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
17
ソフトウェアエンジニアのための「機械学習理論」入門
第2部 回帰分析
18.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
18
ソフトウェアエンジニアのための「機械学習理論」入門
誤差関数による回帰分析
19.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
19
ソフトウェアエンジニアのための「機械学習理論」入門
回帰分析の例題
■ 学習に使用するデータ(トレーニングセット)
- + 「標準偏差 0.3 の正規
分布ノイズ(*1)
」
- の範囲を等分した10個の観測点
から、10個の値 を取得
(N = 10)。
(*1) およそ ±0.3 の範囲に散らばる乱数の事
■ 解くべき問題
- データの背後にある関数を推測して、次に観
測点 x から得られる値を予測する。 ±0.3
標準偏差 0.3 の正規分布
トレーニングセット
20.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
20
ソフトウェアエンジニアのための「機械学習理論」入門
多項式近似と誤差関数による推定
■ 背後にある関数は M 次多項式と仮定して、係数 を決定します。
■ それぞれの観測データ について、 と の二乗誤差を
計算して、その合計(誤差関数)を与えます。
■ 誤差関数が最小になるように係数 を決定します。
21.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
21
ソフトウェアエンジニアのための「機械学習理論」入門
多項式近似と誤差関数による推定
■ 前ページの方程式は解析的に解けて、下記の結果が得られます。
※ 証明は下記を参照
http://enakai00.hatenablog.com/entry/2015/04/05/002239
22.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
22
ソフトウェアエンジニアのための「機械学習理論」入門
演習
■ この演習では、前ページの関係式を使って実際に w を求めるコードを実行しま
す。下記のブログ記事を参考にして、記事中に記載のコードを iPython から実
行します。
- PRML 第1章の多項式フィッティングの例を再現
- http://enakai00.hatenablog.com/entry/2015/04/05/002239
■ 入力・実行方法とコードの内容の解説は、インストラクターから行います。
■ 補足
- 誤差関数から計算される下記の値を「平方根平均二乗誤差(Root Mean
Square Error)と呼びます。これは、各データの平均的な誤差
に相当します。
23.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
23
ソフトウェアエンジニアのための「機械学習理論」入門
多項式近似の実行結果
■ 多項式の次数が上がると、平方根平均二乗誤差は減少していきます。
- M = 9 は、10個のパラメータを持つので10個の観測データを正確に再現します。
24.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
24
ソフトウェアエンジニアのための「機械学習理論」入門
オーバーフィッティングの検出
25.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
25
ソフトウェアエンジニアのための「機械学習理論」入門
オーバーフィッティングの検出
■ 先ほどの M = 9 の例は、観測データは正確に再現していますが、未知のデータ
の「予測性能」が高いかどうかは分かりません。
- トレーニングセットだけに固有の特徴を拾ってしまい、予測性能の一般性が失われる
ことを「オーバーフィッティング」と呼びます。
■ 機械学習を行う際は、学習用のデータ(トレーニングセット)とは別に検証用
のデータ(テストセット)を残しておき、テストセットに対する予測性能を見
て、オーバーフィッティングの発生を検出します。
- 次数 M を増やしていった際の「トレーニングセット」と「テストセット」それぞれの
「平方根平均二乗誤差」の変化の様子を見ます。
トレーニングセット テストセット
全データ
26.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
26
ソフトウェアエンジニアのための「機械学習理論」入門
オーバーフィッティングの検出
■ ここでは、トレーニングセットとは独立に取得したテストセット
があるものとして、検証します。
- 観測点 は同じですが、正規分布のノイズがあるので、取得値 は
異なります。)
■ 右図のように、M = 3 を超えると
テストセットの誤差は減少しなく
なります。
- つまり、M = 4 以上はオーバー
フィッティングが発生しています。
28.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
28
ソフトウェアエンジニアのための「機械学習理論」入門
オーバーフィッティングの発生理由
■ 一般に観測データ量に対して、モデルのパラメータが多すぎるとオーバー
フィッティングが発生します。
■ 逆に言うとオーバーフィッティングの発生の仕方は、データ数に依存します。
下記は N = 100 のデータを用いて学習した結果です。
- M = 3 を超えると誤差はほぼ一定の 0.3 で落ち着きます。もともと標準偏差 0.3 のノ
イズを持ったデータなので、0.3 程度の誤差は必ず残ります。
29.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
29
ソフトウェアエンジニアのための「機械学習理論」入門
オーバーフィッティングを意図的に抑える手法
- M = 9 の高次の項は絶対値が突出し
て大きくなっています。これは、パ
ラメータの過剰調整であり、オー
バーフィッティングの兆候と考えら
れます。
Table of the coefficients
M=0 M=1 M=3 M=9
0 -0.02844 0.498661 -0.575134 -0.528572
1 NaN -1.054202 12.210765 151.946893
2 NaN NaN -29.944028 -3569.939743
3 NaN NaN 17.917824 34234.907567
4 NaN NaN NaN -169228.812728
5 NaN NaN NaN 478363.615824
6 NaN NaN NaN -804309.985246
7 NaN NaN NaN 795239.975974
8 NaN NaN NaN -426702.757987
9 NaN NaN NaN 95821.189286
■ N = 10 の例で実際に計算された係数 の値を見ると下表のようにな
ります。
■ そこで、適当な定数 λ を用いて、下記のように修正した誤差関数を最小にする
という条件で係数を決めると、次数が高くでもオーバーフィッティングが発生
しにくくなります。
- 最適な λ の値は、試行錯誤で決める必要があります。
30.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
30
ソフトウェアエンジニアのための「機械学習理論」入門
最尤推定による回帰分析
31.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
31
ソフトウェアエンジニアのための「機械学習理論」入門
回帰分析の例題
■ 学習に使用するデータ(トレーニングセット)
- + 「標準偏差 0.3 の正規
分布ノイズ(*1)
」
- の範囲を等分した10個の観測点
から、10個の値 を取得
(N = 10)。
(*1) およそ ±0.3 の範囲に散らばる乱数の事
■ 解くべき問題
- データの背後にある関数を推測して、次に観
測点 x から得られる値を予測する。 ±0.3
標準偏差 0.3 の正規分布
トレーニングセット
確率
32.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
32
ソフトウェアエンジニアのための「機械学習理論」入門
尤度(ゆうど)関数による推定
■ 「誤差関数による回帰分析」では、誤差関数を最小とするように係数を決定し
ましたが、誤差関数のとり方によって結果は変わります。
- 「平均二乗誤差」は計算が簡単なのでよく使われるだけで、本質的にこれを採用する
べき理由はありません。どのような誤差関数がベストかは、問題ごとに試行錯誤する
必要があります。
■ ここでは誤差関数の代わりに、ある「確率」を考えて係数を決定します。
- この方法では、データに含まれる「ノイズ」の大きさも推定できるようになります。
■ この後の記法として、平均 μ 、分散 σ2
の正規分布を次の記号で表します。
- これは、およそ μ ± σ にちらばる乱数です。
±σ
確率
μ
33.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
33
ソフトウェアエンジニアのための「機械学習理論」入門
前提条件
■ 今回使用する観測データ は、「何らかの関数 y(x) に従うが、
未知の正規分布のノイズが含まれている」と予めわかっているものとします。
- ビジネス上のデータ分析では、一定のデータの性質が予めわかっていることもよくあ
ります。(分析するデータの性質を理解することもデータサイエンティストの役割で
したね。)
■ 未知の正規分布の分散を 1/β (つまり β = 1/σ2
)とすると、係数 w が決まっ
た後、次に観測点 x から得られる値 t は次の確率を持ちます。
太文字はベクトル(行列)表記
34.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
34
ソフトウェアエンジニアのための「機械学習理論」入門
尤度関数の計算
■ ここで、係数 w が決まったものとして、「観測データとして、
トレーニングセット と同じものが得られる確率」を考えます。
誤差関数と同じものが現れた!
35.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
35
ソフトウェアエンジニアのための「機械学習理論」入門
尤度関数を最大化するパラメータを決定
■ 先に求めた確率は、パラメータ (w, β) によって値が変わります。トレーニング
セットが得られる確率をパラメータの関数とみなしたものを「尤度関数」と呼
びます。
■ ここで次のような仮説を立てます。
「観測されたデータ(トレーニングセット)は、
最も発生確率が高いデータに違いない!」
■ これは必ずしも正しいとは限りませんが、この仮説が正しいものとして、尤度
関数が最大になるようにパラメータ (w, β) を決定する手法を「最尤推定」と呼
びます。
- 計算上は、次の対数尤度関数を最大するパラメータを求めます。
36.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
36
ソフトウェアエンジニアのための「機械学習理論」入門
尤度関数を最大化するパラメータを決定
■ 実際に計算してみると、次のことが分かります。
- w についての偏微分係数は、誤差関数の偏微分係数に等しく、パラメータ w
は、誤差関数を最小化する w と同じ結果になります。
- β についての偏微分係数からは、次の結果が得られます。これは、観測デー
タの分散を未知の正規分布の分散の推定値として採用することを意味しま
す。
■ このように観測データの既知の性質に合わせて、フィッティング手法(アルゴ
リズム)を選択することが可能です。
37.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
37
ソフトウェアエンジニアのための「機械学習理論」入門
演習
■ この演習では、もう少し簡単な例で最尤推定に基づく計算を行います。下記の
ブログ記事を参考にして、記事中に記載のコードを iPython から実行します。
- PRML 第1章の「最尤推定によるパラメータフィッティング」の解説
- http://enakai00.hatenablog.com/entry/2015/04/05/220817
■ 入力・実行方法とコードの内容の解説は、インストラクターから行います。
38.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
38
ソフトウェアエンジニアのための「機械学習理論」入門
演習内容の説明
■ 演習内容の説明
- ここでは、少し単純化した例として、単一の観測点 x から複数の観測データを取得し
て、それを元にその点における正規分布の平均と分散を推定します。
- 平均 μ、分散 1/β とすると、尤度関数と対数尤度関数は次のようになります。
- 対数尤度関数の μ、β による偏微分係数が 0 になる条件から計算すると下記が得られ
ます。これは、観測データの平均と分散を未知の正規分布の平均と分散の推定値とし
て採用することを表します。
39.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
39
ソフトウェアエンジニアのための「機械学習理論」入門
最尤推定の正確性
- データ数が少ないと不正確な結果
ですが、特に分散が小さく推定さ
れています。
- データ数が少ないと出現確率の低
い「裾野」のデータが得られない
ため、裾野の広がりが捉えられな
いことに起因します。
■ 実際に数値計算で確かめると図のような結果が得られます。緑の曲線が本来
の正規分布で、赤の曲線が推定された正規分布です。
40.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
40
ソフトウェアエンジニアのための「機械学習理論」入門
第3部 線形判別法
41.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
41
ソフトウェアエンジニアのための「機械学習理論」入門
パーセプトロン
42.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
42
ソフトウェアエンジニアのための「機械学習理論」入門
線形判別法の例題
■ 学習に使用するデータ(トレーニングセット)
- (x, y) 平面上の N 個のデータポイント
- データポイントは、2タイプに分かれて
おり、 にラベル付けされている。
■ 解くべき問題
- 2タイプのデータを分割する直線を求める。
- きれいに分割できない場合は、何らかの意味
で「最善」の分割を与える。
トレーニングセットと
判別直線の例
●:t = 1
×:t = 1
43.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
43
ソフトウェアエンジニアのための「機械学習理論」入門
パーセプトロンの考え方
■ 分割直線を次の式で表します。
■ この時、この平面は次の2つの領域に分
割されます。
- なら正解
- なら正解
■ これより、「正しく判別されていない
点」では、次の関係が成り立ちます。
- 分割直線から点が離れるほど(誤っ
た領域の内部に入り込むほど)、こ
の値の絶対値は大きくなります。
x
y
●:t = 1
×:t = 1
44.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
44
ソフトウェアエンジニアのための「機械学習理論」入門
誤差関数の定義
■ そこで、次の「誤差関数」を定義して、これをなるべく小さくする係数 w を
求めることにします。
- n の和は判定を誤っている点についてのみ取ります。
■ ここで、計算の便宜上、次のような記号で式を表します。
bias項
45.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
45
ソフトウェアエンジニアのための「機械学習理論」入門
誤差関数を最小化する手順
■ ある点 w において、EP
(w) の値を減らす方向のベクトルは、この関数の「勾
配」で決まります。
■ これは、「ある w において、誤って判定された点 があった場合、
ベクトル の方向に w を修正すると、EP
(w) の値を減らすことができる」
と解釈できます。(直感的には。)
■ 厳密に議論すると、誤って判定された点について、1つずつ順番に次の式で w
の値を修正していくことを何度も繰り返すと、(完全な分割が可能な場合は)
いつかは正しい分割線が得られることが証明されています。
46.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
46
ソフトウェアエンジニアのための「機械学習理論」入門
パーセプトロンのアルゴリズムに関する補足
■ 関数の最小値を与えるパラメータを求める際に、このように、関数が小さくな
る方向に修正を繰り返す手法を「確率的勾配降下法」と言います。
■ パーセプトロンの場合、完全な分割ができない問題だと w の修正はいつまで
たっても終わらない(誤って判定される点はなくならない)ので、適当な回数
で修正を打ち切って、その時点の w を答えとします。
■ 完全な分割が可能な場合でも、何回ほど繰り返せば正しい分割線に到達するか
(収束の速度)は分かりません。特に最後の答えとなる直線が「原点の近くを
通らない場合」は、収束が極端に遅くなります。
- このような場合は、下記の「bias項」を「データ群の座標値の平均的な大きさ」に近
い定数に修正することで収束速度が改善されます。
bias項
47.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
47
ソフトウェアエンジニアのための「機械学習理論」入門
演習
■ この演習では、前ページで説明したアルゴリズム(確率的勾配降下法)で w を
求めるコードを実行します。下記のブログ記事を参考にして、記事中に記載の
コードを iPython から実行します。
- Perceptronのパラメータ変化を見るコード
- http://enakai00.hatenablog.com/entry/2015/04/12/201156
■ 入力・実行方法とコードの内容の解説は、インストラクターから行います。
48.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
48
ソフトウェアエンジニアのための「機械学習理論」入門
パラメータの収束状況
■ 何度か実行して、いくつかのパターンを観測すると、典型例として次のような
結果が得られます。
- 左図のように完全に分離できない場合は、パラメータは変動を続けますが、
右図のように完全に分離できる場合は、パラメータは収束していることが分
かります。
49.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
49
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック回帰
50.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
50
ソフトウェアエンジニアのための「機械学習理論」入門
線形判別法の例題
■ 学習に使用するデータ(トレーニングセット)
- (x, y) 平面上の N 個のデータポイント
- データポイントは、2タイプに分かれて
おり、 にラベル付けされている。
■ 解くべき問題
- 2タイプのデータを分割する直線を求める。
- きれいに分割できない場合は、何らかの意味
で「最善」の分割を与える。
トレーニングセットと
判別直線の例
●:t = 1
×:t = 0
※ パーセプトロンの例題と本質的に同じですが、計算上の都合で t の値が異なります。
51.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
51
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック回帰の考え方
■ ロジスティック回帰では、分割線を次
式で与えます。ここまでは、パーセプ
トロンと同じです。
■ パラメータ w を決定するために「最
尤推定」を用います。
■ つまり、回帰分析と同様に、あるデー
タが得られる「確率」を決めて、ト
レーニングセットが得られる確率を最
大にします。
x
y
●:t = 1
×:t = 0
52.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
52
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック関数による確率
■ 点 (x, y) で新たに取得したデータが「t = 1」
である確率を P(x, y) とします。
■ 右図において分割線から右上に進むと P は大
きくなり、左下に進むと P は小さくなると考
えられます。
■ そこでこの確率を次式で定義します。
- σ(a) は、右図のように 0 から 1 になめらかに増
加する関数です。
- の分割線上では、確率はちょうど
0.5 になります。
●:t = 1
×:t = 0
:ロジスティック関数
53.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
53
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック回帰における尤度関数
■ 前ページで定義した確率 を元にして、トレーニングセット
が得られる確率を計算してみます。
- 点 から のデータが得られた場合、それが起きる確率は:
- 点 から のデータが得られた場合、それが起きる確率は:
- これら2つは、(技巧的ですが)次のように1つの式にまとめられます。
■ 従って、トレーニングセットが得られる確率(尤度関数)は次式になります。
54.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
54
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック回帰のIRLS法
■ 次の対数尤度関数を最大にするパラメータ を決定します。
■ この最大値問題の解は、パーセプトロンと同様に、一定のルールでパラメータ
の値をアップデートしていくことで得られることが証明されます。
: Iterative reweighted least squares
55.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
55
ソフトウェアエンジニアのための「機械学習理論」入門
演習
■ この演習では、前ページのアルゴリズム(IRLS法)で を
求めるコードを実行します。下記のブログ記事を参考にして、記事中に記載
コードを iPython から実行します。
- PerceptronとLogistic Regressionを比較するコード
- http://enakai00.hatenablog.com/entry/2015/04/11/235712
■ 入力・実行方法とコードの内容の解説は、インストラクターから行います。
※ このコードは、まれに「LinAlgError: Singular matrix」というエラーが発生します。
- これは数値演算精度の問題によるものです。下記の対角行列のどこかの値が 0 に丸め
られて、逆行列が計算できなくなると発生します。
- 特定のサンプルの確率が 0 か 1 に非常に近くなっており、一種のオーバーフィッティ
ングが発生していると考えられます。
56.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
56
ソフトウェアエンジニアのための「機械学習理論」入門
パーセプトロンとロジスティック回帰の比較
■ 先のコードの実行例です。青線はロジスティック回帰で、赤線はパーセプトロ
ンによる結果です。
- パーセプトロンは、一度、完全に分離できるとそれ以上はパラメータの調整を行わな
い点に注意して、結果を比較してみてください。
57.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
57
ソフトウェアエンジニアのための「機械学習理論」入門
学習モデルの評価(ROC曲線)
58.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
58
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック回帰による確率の推定
■ ロジスティック回帰では、「個々の観測点で
得られるデータが t = 1 に属する確率」が得ら
れます。
■ これを利用すると、トレーニングセットにつ
いて「確率順リスト」が作成できます。
●:t = 1
×:t = 0
この方向に
確率が大きくなる
x y type probability
0 25.100600 15.215185 1 0.972372
1 25.716642 10.509214 1 0.957894
2 26.328260 9.368392 1 0.955292
3 20.965230 6.646373 1 0.906886
4 16.940683 7.185182 1 0.876261
5 15.384313 4.033190 0 0.814820
6 -4.292937 19.269243 1 0.776546
7 19.822191 -3.042080 1 0.760062
...
59.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
59
ソフトウェアエンジニアのための「機械学習理論」入門
ロジスティック回帰の現実問題への適用
■ これまでに考えてきた下記の「分割線」は、「t = 1 の確率が 0.5」の境界線に
なります。
■ 現実の問題において、観測点 (x, y) の新たなデータのタイプを推定する際は、
必ずしも「確率 0.5」を堺に判定する必要はありません。
- 例1:「あるウィルスに感染しているか」を示すトレーニングセットにロジスティッ
ク回帰を適用して、検査結果の数値 (x, y) から t = 1 である(ウィルスに感染してい
る)確率 P(x, y) を求められるようになりました。医師であるあなたは、確率 P(x, y)
の値がいくら以上の人に精密検査を勧めるでしょうか?
- 例2:競馬の予想屋であるあなたは、馬の属性 (x, y) と勝敗 t を示すトレーニングセッ
トにロジスティック回帰を適用して、属性 (x, y) から t = 1 である(次のレースで勝
つ)確率 P(x, y) を求められるようになりました。「絶対勝つ馬の極秘情報」には、確
率 P(x, y) の値がいくら以上の馬を含めるでしょうか?
60.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
60
ソフトウェアエンジニアのための「機械学習理論」入門
真陽性率と偽陽性率のトレードオフ
■ 一般に、判定のしきい値(t = 1 と判断する最低確率)は、TP rate(True
Positive Rate: 真陽性率)と FP rate(False Positive Rate: 偽陽性率)のト
レードオフを考慮して設定します。
- TP Rate : 「陽性と判定した中で本当に陽性だった数」÷「陽性の総数」
- FP Rate : 「陽性と判定した中で本当は陰性だった数」÷「陰性の総数」
■ 感染者20名を含む1000人が検査を受け
て、50名が陽性と判定されたとして:
- 本当に陽性だったのは15人
⇒ TP rate = 15/20 = 0.75
- 実際は陰性だったのは35人
⇒ FP rate = 35/980 ≒ 0.04
Classifier metrics in a nutshell
http://enakai00.hatenablog.com/entry/20150205/1423086735
62.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
62
ソフトウェアエンジニアのための「機械学習理論」入門
ROC曲線によるしきい値の決定
■ さまざまなしきい値に対する、TP rate と FP rate の値をグラフ上にプロット
したものを「ROC曲線」と言います。
- ROCグラフから、「最適なしきい値」の検討ができます。
■ 理想は左上(TP=1, FP=0)ですので、
「ROCグラフがどれだけ左上に近づいている
か」は、その判定法そのものの評価基準とな
ります。
- ROC曲線の下側の面積(AUC: Area under the
curve)が大きいほど優秀な判定法と言えます。
理想の判定法
すべてを「陽性」
と判定する
すべてを「陰性」
と判定する
一定確率でランダムに
「陽性」と判定する
63.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
63
ソフトウェアエンジニアのための「機械学習理論」入門
演習
■ この演習では、ロジスティック回帰で決定した確率 P(x, y) に対するROC曲線を
描きます。下記のブログ記事を参考にして、記事中に記載のコードを iPython
から実行します。
- ロジスティック回帰のROC曲線を描くコード
- http://enakai00.hatenablog.com/entry/2015/04/12/104837
■ 入力・実行方法とコードの内容の解説は、インストラクターから行います。
64.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
64
ソフトウェアエンジニアのための「機械学習理論」入門
ROC曲線によるモデルの評価
■ 下記の実行例におけるROC曲線の違いは、対応する分割線の図と比較して理解
することができます。
- 左の例は比較的よく分類されているので、ROC曲線は左上に近づいています。
- 右の例は分類精度がよくないので、ROC曲線は左上に近づけていません。
65.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
65
ソフトウェアエンジニアのための「機械学習理論」入門
第4部 教師なし学習
66.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
66
ソフトウェアエンジニアのための「機械学習理論」入門
クラスタリング分析(k平均法)
67.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
67
ソフトウェアエンジニアのための「機械学習理論」入門
教師なし学習モデル
■ パーセプトロンやロジスティック回帰では、事前に分類された「トレーニング
セット」を元にして、未知のデータを分類する「ルール」を決定しました。
■ 一方、下図のように、もともと分類されていないデータが与えられたとして、
これを「自然なグループ」に分類することができるでしょうか?
- この例の場合は「心の目」で分類することもできますが、平面にプロットできない(3
次元以上の)データの場合は、機械的に分類する手法が望まれます。
■ 一般に「分類指標」が事前に与えられ
ていないデータを用いた機械学習を
「教師なし学習」と呼びます。
- この例は、教師なし学習の中でも、「ク
ラスタリング」と呼ばれる問題です。
68.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
68
ソフトウェアエンジニアのための「機械学習理論」入門
k平均法によるクラスタリング
■ 比較的シンプルなクラスタリングのアルゴリズムに「k平均法」があります。
事前にグループ数を「k個」と特定して分類します。
■ 次のようなアルゴリズムです。
- (1) k個の「代表点」をランダムに選びます。
- (2) データに含まれる各点を「もっとも近い代表点」のグループに属するものとして、
k個のグループに分類します。
- (3) それぞれのグループの重心(座標の
平均値)を各グループの新たな「代表
点」とします。
- (4) 新たな代表点を用いて、(2) の処理
を行います。
- これを何度も繰り返すと、「代表点」
と「グループの重心」が一致して、代
表点が変化しなくなるので、それを最
終的なグループ分けとします。
69.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
69
ソフトウェアエンジニアのための「機械学習理論」入門
演習
■ この演習では、k平均法を用いて、「画像ファイルの減色処理」を行います。
下記のブログ記事を参考にして、記事中に記載のコードを iPython から実行し
ます。
- ロジスティック回帰のROC曲線を描くコード
- http://enakai00.hatenablog.com/entry/2015/04/12/104837
■ 入力・実行方法とコードの内容の解説は、インストラクターから行います。
■ この処理では、次のようにして、k平均法を適用しています。
- 画像ファイルの各ピクセルの色を (R, G, B) 表記したものを3次元ベクトルの集合と見
なします。k個の代表点を選択する処理は、k個の「代表色」を選択していると考えら
れます。
- 代表色が決定された後に、各ピクセルの色をそれが属するグループの代表色に置き換
えることで、画像の減色処理を行っています。
70.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
70
ソフトウェアエンジニアのための「機械学習理論」入門
k平均法による「代表色」の選択
■ オリジナルの画像(左)を k = 3 で変換すると右図になります。
- 各グループの「平均値」として代表色が決まるため、ピクセル数の多い色が代表色と
して選ばれやすくなります。この例では、「赤」「白」「緑」が代表色になっている
ことが分かります。
71.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
71
ソフトウェアエンジニアのための「機械学習理論」入門
その他の例
72.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
72
ソフトウェアエンジニアのための「機械学習理論」入門
ベイズ推定による回帰分析
73.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
73
ソフトウェアエンジニアのための「機械学習理論」入門
ベイズ推定の考え方
■ 「最尤推定による回帰分析」では、「トレーニングセットが得られる確率」を
計算することで、パラメータ w の値を一意に決定しました。
■ 一方、ベイズ推定では「パラメータ w の値の確率 P(w)」を求めます。この
際、「ベイズの定理」を用いてこれを計算します。
8.5w
確率
8.5
最尤推定の結論は1つ
「w=8.5 (!)」
確率
w
ベイズ推定の結論は確率的
「w=8.5の確率が高いけど
他の可能性も・・・」
74.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
74
ソフトウェアエンジニアのための「機械学習理論」入門
ベイズの定理とは?
■ ベイズの定理は、「前提条件がない場合に事象 Y が起こる確率 P(Y)」がわ
かっているとして、「ある条件 X を前提とした場合の確率 P(Y|X)」を求める
定理です。
■ 例:ランダムにボールが1つ出る装置があります。
- 出たボールが「青」の確率は「5/12」
- 出たボールが大きい方だとわかっているとしたら、そのボールが「青」の確率は?
75.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
75
ソフトウェアエンジニアのための「機械学習理論」入門
ベイズ推定とは?
■ ベイズの定理の詳細は、次のブログ記事を参考にしてください。
- Bayesの定理とBayes推定を初心者向けに説明してみる
- http://enakai00.hatenablog.com/entry/2015/04/06/182708
■ 数式としては、次のとおりです。
- P(Y):前提条件がない時に Y が発生する確率
- P(Y|X):前提条件 X がある時に Y が発生する確率
■ これは、「情報 X」を得ることで、Y が発生する確率の「推定精度」を向上す
る手法と見ることができます。このように、追加情報を加えることで、ベイズ
の定理を使って推定精度を上げていく手法を「ベイズ推定」と呼びます。
76.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
76
ソフトウェアエンジニアのための「機械学習理論」入門
ベイズ推定の回帰分析への応用
■ 回帰分析は、パラメータ w を推定することが目的ですので、次のようにベイズ
推定を適用することができます。
- 前提条件が無いときの w の値の確率 を決めます。
- 観測点 で値 が観測されたという前提を加えた時の確率
をベイズの定理から計算します。
- 確率 を用いて、観測点 で次に得られる値 の期待値を計算します。
■ 詳細については、次のブログ記事が参考になります。
- PRML 第1章の「ベイズ推定によるパラメータフィッティング」の解説(その2)
- http://enakai00.hatenablog.com/entry/2015/04/10/105651
77.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
77
ソフトウェアエンジニアのための「機械学習理論」入門
参考資料
78.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
78
ソフトウェアエンジニアのための「機械学習理論」入門
参考資料
■ Python for Data Analysis(Wes McKinney)
- 本セミナーの演習で使用している「Pandas, NumPy, IPython」の解説書です。
- 邦題は「Pythonによるデータ分析入門」
■ Data Science for Business(Foster Provost, Tom Fawcett)
- データサイエンスのビジネス適用に必要な考え方が分かりやすく解説されています。
- 邦題は「戦略的データサイエンス入門」
■ Pattern Recognition and Machine Learning(Christopher Bishop)
- 本資料の例題の多くはこの書籍から引用しています。
- 邦題は「パターン認識と機械学習」
■ Information Theory, Inference, and Learning Algorithms(David J.C.MacKay)
- 情報エントロピーなど、情報理論の基礎から高度な応用まで解説されています。
79.
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
79
ソフトウェアエンジニアのための「機械学習理論」入門
メモとしてお使いください
80.
80
Copyright (C) 2015 National Institute of Informatics, All rights reserved.
Be the first to comment