Coursera Machine Learning - Week6-2 Machine Learning System Design
CourseraのMachine Learningについてまとめています。 前回は、Week6の前半、Advice for Applying Machine Learningついてまとめました。
Week6の後半のまとめです。ここでは、機械学習システムをどう設計していくかについて学びます。
Machine Learning System Design
受信したEmailがスパムか否かを判別する機械学習システムを構築するとして、精度を上げるためには、何を優先して対応する必要があるのか。下記のようにいくつか対応内容は考えられますが、何を優先すべきかについて今回は学びます。
- 多くのデータを集める
- EmailのHeaderから読み取れるルーティング情報を基に、洗練されたFeatureを開発する
- Emailの本文に関して洗練されたFeatureを開発する(例:"discount"と"discounts"は同じ言葉として扱うべきか、"deal"と"Dealer"の場合はどうか。句読点はどう扱うのか)
- スペルミスを検出するアルゴリズムを開発する。(例:m0rtgage, med1cine, w4tches)
Error analysis
機械学習システムを開発するにあたり、下記の進め方が推奨とのことです。
- 早く実装できるシンプルなアルゴリズムでまずは実装し、Cross validation dataを用いて検証する
- Learning curvesをプロットし、より多くのトレーニングデータが必要なのか、より多くのFeatureが必要なのか等、改善の道筋を探る
- Cross validation dataの中で、エラーが大きかったものに関して、そのエラーの分析を行い、エラーに傾向があるかどうかを検証する
Error analysisの進め方の例として、例えば、Emailのスパム検出で、100件のEmailを間違えて判別してしまった場合、まずは、そのEmailがどのようなカテゴリのEmailなのかを分類します。例えば、分類の結果、カテゴリとそのカテゴリに属するEmailの数が下記の通りであったとします。
- 薬事関連:12件
- 模造品販売:4件
- フィッシング:53件
- その他:31件
この場合、エラー件数の最も多いフィッシング関連のEmailの判別を改善することがシステムの改善に最も影響を与えるので、このカテゴリのEmailに関して、どのような手掛かり(Feature)がアルゴリズムの改善に影響を与えそうか、さらにEmailを分類します。
- ミススペル:5件
- 通常とは異なるルーティング:16件
- 通常とは異なる句読点の使い方:32件
この場合、通常とは異なる句読点の使い方を見分けるFeatureを開発することが、アルゴリズムの改善に役立ちそうだと考えられます。
また、エラー分析をしても、取ろうとしているソリューションがアルゴリズムの改善につながるのかよく分からない場合があり、そのような場合は、Cross validationのエラー値等、特定の数値を指標として、実際にトライ&エラーを繰り返して改善していく必要があるとのことです。
Error metrics for skewed classes
次に、腫瘍が悪性か否かを判別するアルゴリズムについて考えます。
開発したアルゴリズムの精度が99%であった場合、精度としてはかなり高いように思われます。しかしながら、そもそも悪性の割合が0.5%だった場合、この99%が本当に良い値なのか否かが分からなくなります。例えば、全て良性だと判別するアルゴリズムを開発した場合、明らかに意味のないアルゴリズムですが、その精度は99.5%となります。
このような間違った評価を行わないよう、Precision(適合率)とRecall(再現率)といった評価方法・考え方があります。
- Precision(適合率):1と予測・判断した対象のうち、実際に1だったものの割合
- Recall(再現率):実際に1である対象のうち、正しく1と予測・判断できた割合
しかしながら、このPrecisionとRecallには、トレードオフの関係があります。
例えば、確度が高いと判断したもののみ1と予測すると、Precisionは高くなりますが、Recallは低くなります。また、出来るだけ漏れ(False negative)を減らそうとすると、Recallは高くなりますが、Precisionは低くなります。つまり、どの程度の確度で1と判断するかの閾値によって、PrecisionとRecallの値はトレードオフで変わってきます。
このPrecisionとRecallの2つを合わせて評価する指標として、F1 Score(F Score / F値)があります。F1 Scoreは、下記の数式で表されます。
例えば、下記のような3つのアルゴリズムがあった場合、PrecisionとRecallの平均値では、アルゴリズム3の結果が良いですが、F1 scoreでは、アルゴリズム1が最も良いと評価されます。
Data for machine learning
学習に用いるデータ量の話です。
2001年にマイクロソフトのMichele Banko氏とEric Brill氏が自然言語解析において、データ量の与える影響について研究を行ったそうです。複数のアルゴリズムに対し、データ量を増やしていった場合の精度を計測し、その結果、下記のグラフを得たそうです。
このグラフの意味するところは、精度を決めるのは、用いたアルゴリズムではなく、データ量であるということです。データ量を増やすことによって、そこまで優れたアルゴリズムでなくとも、優れたアルゴリズムと同等かそれ以上の結果を出すことができるようです。
講義で参照されている論文は、おそらく、下記の論文だと思われるので、興味のある人は読んでみてください。
Scaling to Very Very Large Corpora for Natural Language Disambiguation
Michele Banko, Eric Brill
https://www.aclweb.org/anthology/P01-1005.pdf
ここで、データ量が重要であるという話をしていますが、前提となるのは、結果を予測するのに十分なFeatureが存在するということです。多くの十分なFeatureがあり(High Biasになりづらい状態)、多くのトレーニングデータがあれば(High varianceを防ぐ)、良い結果を出すことができるようです。
ちなみに、十分なFeatureが存在することを確認する方法として、そのデータから、人間のエキスパートが結果を予測可能かどうかを検証するという方法があるそうです。
Artificial data synthesis
多くのトレーニングデータを準備する方法として、データを作り出すという方法があります。例えば、文字認識では、下記の図のように、画像を歪ませたり、ノイズを加えることによって、データ量を水増しすることが可能なようです。
特に講義で語られている訳ではありませんが、最近は、シミュレータ上でAIのトレーニングデータ生成を行う企業も出てきているようなので、こういった手法でのデータ生成も今後増えていくのだと思います。
プログラミング演習
Week6のプログラミング演習では、 Regularized linear regressionを実装し、異なるBias-Varianceプロパティのモデルを学習します。演習の項目は、具体的には以下のものです。
- Regularized Linear Regression Cost Function
- Regularized Linear Regression Gra- dient
- Learning Curve
- Polynomial Feature Mapping
- Cross Validation Curve
次回は、Week7 Support Vector Machines(サポートベクターマシン)についてまとめます。
コース全体の目次とそのまとめ記事へのリンクは、下記の記事にまとめていますので、参照ください。
Coursera Machine Learningまとめ本記事を読んでいただきありがとうございます。
機械学習を実際に使うにあたり、Coursera MLと合わせておすすめしたい書籍を紹介します。
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
scikit-learnを用いた機械学習を学ぶのに最適な本です。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
Deep Learningと言えばこれ。TensorFlowやPyTorch等のフレームワークを用いずに、基礎の理論からDeep Learningを実装します。Week4、Week5の記事を読んで、より深く理解したいと思った人におすすめです。
Kaggleで勝つデータ分析の技術
データ分析について学び始めた人におすすめです。