Amazon Machine Learningによる機械学習を理解する
用語の意味が分からない!
Amazon Machine Learningを始めてみようとナビゲーションに沿ってサンプルを触ってみると、なんとなくできてしまう簡単さではありますが、実際のところ用語の意味がよく分かりません。そこで、この記事では、Amazon Machine Learningを学ぶ上で必要になるであろう単語の意味や、機械学習の勘所になりそうな部分についてご紹介したいと思います。
どんなタイプの機械学習なのか?
Amazon Machine Learningは、「教師あり学習」をすることができます。その中でも、「二項分類」、「多項分類」、「回帰分析」を行うことができます。
学習方法
教師あり学習(Supervised Learning)
事前に与えられた教師データ(訓練データ)を使って学習します。教師データに基づいて一般化(モデル化)し、未知のデータに対する出力を予測します。
教師なし学習(Unsupervised Learning)
データの本質的な構造を抽出するために用いる学習です。「クラスター分析(クラスタリング)」や「主成分分析」などがこれにあたります。クラスター分析は、集団の中から似たものを見つけ出してグループ化して分類する総称です。主成分分析は、「多変量解析」の一種で、複数の変数を統合して、データ全体の傾向・特徴を表す新たな変数を生成する方法です。例えば、複数科目の試験を行なって総合的に優秀な人を選出するなどです。
K-means法
クラスター分析の手法として代表的なものに「K-means 法(K平均法)」というものがあります。これは、クラスターをK個のグループに分ける方法です。クラスターの重心を計算することで割り出します。
分析方法
二項分類(Binary Classification)
この顧客はこの商品を買うか/買わないか?、このメールはスパムか/そうではないか?、このレビューは顧客が書いたか/ロボットが書いたか?など、出力が2つの内のどちらかになる分類を行います。
多項分類(Multiclass Classification)
この映画はコメディか/ドキュメンタリーか/スリラーか?、この顧客はどのカテゴリーの商品に最も興味があるか?など、3つ以上の出力になる分類を行います。
回帰分析(Regression)
明日の東京の気温は何度か?、この商品はどのくらい売れるか?、この家はどんな価格で販売されるか?など、過去のデータなどを用いて将来の予測を行います。
Amazon Machine Learningの機械学習プロセス
以下には、Amazon Machine Learningの基本的な機械学習プロセスについて記します。
データの準備
有効な訓練データとして扱われるように、データの収集をして、整えて、前処理をします。CSVを投入するのであれば、1行目はヘッダ行にしてください。二項分類であれば、0か1が入る「ターゲット属性(Target Attribute)」を指定しておきます。このデータが文字列で、Yes/Noとか、はい/いいえだと正しく学習できませんので、0か1にしてください。こういった前処理はとても重要です。Amazon Machine Learningは前処理自体を行う機能は入っていませんので、前処理済みのデータをS3やRedshiftに置いておきます。AWS Data PipelineなどのETL/ELTツールを使って前処理をスケジュール実行してもいいですね。
次に、データの準備によって作成されたデータ等をS3経由でインポートして「データソース(Datasource)」を作成します。データソースは、Amazon Machine Learningのオブジェクトとして扱われます。この際、各カラムのデータから自動的にカラムの属性候補が指定されます。カラム属性の種類は、「テキスト、数字、カテゴリ、バイナリ」の4種類です。これらのカラム属性を定義して「スキーマ(Schema)」とします。日付に関する型も欲しいですねー。
Garbage in, Garbage out
「GIGO(Garbage in, Garbage out)」は、ゴミデータからはゴミ結果しか生まれないと言っています。例えば、ニューヨークを表す入力データが、NY, ny, New York, new_yorkとなっているとします。これは、全て同じ意味ですが、入力データとして別物になってしまいます。
モデルの作成
スキーマ定義されたデータからモデルを作成します。作成済みのデータソースの中身を、70%と30%に分割して、前者を「訓練用データ」として扱い、後者を「評価用データ」として扱います。ざっくり言いますと、訓練用データから予測モデルを作成し、このモデルに評価用データを投入したら、どの程度実際の答えに近いデータが生成されるか確認します。
最適なモデルを作成するにあたって、Amazon Machine Learningは、オンライン学習アルゴリズムである「確率的勾配降下法(SGD:Stochastic Gradient Descent)」を用いています。二項分類には、「ロジスティック回帰(ロジスティック損失関数+SGD)」。多項分類には、「多項ロジスティック回帰(多項ロジスティック損失+SGD)」。回帰分析には、「線形回帰(二乗損失関数+SGD)」です。
ロジスティック回帰
データには上限があることを前提として、時間の経過とともに成長が成熟するような場合に用います。例えば、ある施策を打った時に10ポイント改善するとして、施策により延々と改善し続けることはありません。
過学習
過学習は、訓練データに正しいモデルではあるが、新しいデータに対して予測を間違うことです。訓練データを満たす複雑すぎるモデルを作成してしまいます。これを防ぐ方法の1つとして正則化が挙げられます。Amazon Machine Learningには正則化の処理が含まれています。
正則化
正則化のパラメータには、L1ノルム(ロッソ回帰)とL2ノルム(リッジ回帰)があります。正則化によって予測を間違った時にペナルティが与えられることにより、程よい予測モデルが出来上がります。
って、それっぽく説明していますが、デフォルト設定で勝手にやってくれますので詳しく知らなくても問題ありませんw。ポイントは、モデル作成において、過学習を避けるパラメータが入っているということです。
モデルのパフォーマンス評価
モデルの作成が終わったら、パフォーマンス評価をしましょう。完璧なモデルは存在しません。何かしらのトレードオフが必要です。モデルによって得られる予測の結果は4種類(True/FalseとPositive/Negativeの組合せ)あります。例えば、スパムメール判定で、間違ってスパムと検出してしまっては、正しいメールを見失ってしまう可能性がありますので、False Negativeの値が小さくなるようにスコアを調整します。スパムメール判定されないほうがマシです。逆に、疾病の判定をするときに、間違って出てこないで重症化するよりかは、間違って出てきて再検査するほうがマシです。このように、時と場合によって何が重要か異なるわけです。
- True Positive : 正しく出てきた
- True Negative : 正しく出てこなかった
- False Positive : 間違って出てきた
- False Negative : 間違って出てこなかった
二項分類の調整
閾値スコアを設定してモデルを調整します。スコアを決めるにあたって、参考にするメトリクスが幾つかあります。
メトリクス | 説明 |
---|---|
正答率(正解率)(Accuracy) | 予測が正解である確率 |
偽陽性率(False Positive Rate) | 間違って検出してしまう確率 |
適合率(精度)(Precision) | 正しく検出できる確率 |
再現率(Recall) | 正解が実際に検出される確率 |
F1値(F1-measure) | 精度と再現率の調和平均 |
AUC(Area Under the Curve) | アルゴリズムの精度の良さを表します。0.5がランダムで、1は完全な予測 |
以下の結果は、非常に良いという評価です。
モデルは、後から調整することができますので、次のステップとして、実際にモデルを利用した予測を行なってみましょう。
まとめ
今回は、Amazon Machine Learningが提供する予測分析の手法を把握しました。予測分析の前に整ったデータを用意することの重要性を確認しました。また、モデル作成にあたって過学習を防ぐ正則化が行われていることが分かりました。作成されたモデルはパラメータを調整することで、どんな傾向の検出をしたいか設定できることが分かりました。次回は、作成されたモデルに対して、バッチとリアルタイムで予測を行なってみたいと思います!明日は晴れるかな!?
参考資料
Amazon Machine Learning Concepts
Amazon Machine Learningのサンプルをちょっとチューニングしてみる
true positive, false positive, true negative, false negative