MLS勉強メモ
基礎レベルやアソシエイトレベルの試験は暗記ゲー
スペシャリティはシナリオ重視の試験が出るから暗記じゃ厳しい
修飾語やキーフレーズが問題に含まれることが多い
修飾語
- 最も多く
- 最も高い
キーフレーズ
- 変換ジョブの実行の自動化
- 最小限の管理
受験時の戦略
- 解答の選択肢を読む前に、問題を読んで理解する
- 問題のキーフレーズと修飾語を特定する
- 解答の選択肢を確認する前に解答を考えてから、選択肢のどれかと自分の解答が一致しているか確認する
- それまでに特定したキーフレーズや修飾語など、問題に関する知識に基づいて解答の選択肢を除外する
- それでもわからない場合は、一旦飛ばして後から解答する
データエンジニアリング
機械学習のデータリポジトリの作成
- MLではデータがすべて
- クリーンなデータがあれば、重要なビジネスインサイトが得られる
- 一元化されたリポジトリにデータを保存する手段が必要
- データは様々な形式で様々な場所に保存されているから
- データレイクがあれば構造化データと非構造化データを保存できる
- AWS Lake Formationをデータレイクとして使用
- S3 ストレージクラスでデータ管理のコストを削減
- S3 標準:処理済みのデータセットやトレーニングデータセットのような高頻度アクセス
- S3 Intelligent-Tiering:アクセスパターンが変化するデータ
- S3 標準 - IA:長期保存されるアクセス頻度の低いデータを管理
- S3 Glacier:rawデータとバックアップ向けの低コストのデータアーカイブ向け
- S3 は SageMakerと統合できる
- FSx for Lustre を使ってトレーニングジョブを高速化
- S3 -> FSx for Lustre -> SageMaker
- S3 のデータを SageMaker 高速で提供できる
- S3 からのデータのコピーも自動でできる
- 同じ FSx を使うことで、共通のオブジェクトが繰り返しダウンロードされるのを防げる
- トレーニングデータがすでに EFS にある場合は、それをトレーニングデータソースとして使う
後で調べる
- AWS Lake Formation
- S3 (データレイクとして)
- FSx for Lustre
- EFS
データ収集ソリューションの特定と実装
- 様々な形式で様々な場所に保存されているデータを S3 などに取り込む必要がある
バッチ処理でソースデータを定期的に収集しグループ化
- ウェブサーバー -> バッチ処理 -> S3 (raw バケット) -> Glue -> S3 (処理済みバケット) -> SageMaker
- DMS もバッチ取り込みに使える
- ウェブサーバー -> ストリーム処理 -> SageMaker
- コスト効率が低い
- リアルタイム性が重視される場合に使う
- Kinesis はストリーミングデータのプラットフォーム
後で調べる
- Apache Kafka
- Kinesis Data Analytics
- Kinesis Video Streams
データ変換ソリューションの特定と実装
- 未加工の取り込みデータはMLに対応していない
- データの変換とクリーンアップを行う必要がある
- 重複排除
- 不完全なデータの管理
- 属性の標準化
- データを簡単にクエリできるように構造を変えることもある
- データの変換とクリーンアップを行う必要がある
データを ML 用に変換
- データ変換は大量のデータを処理するときに必要になる
- Map Reduse
- Apache Spark
- EMR で Apache Spark を使用するとマネージドなフレームワークを構成できる
- S3 (rawデータ) -> EMR -> S3 (分析バケット)
- HPC に最適
- ML 用のデータ変換における重要なステップはデータセットの分割
後で調べる
- EMR の Apache Spark
- Apache Spark と SageMaker
- Glue
機械学習基礎
機械学習のプロセス
- データの収集
- データのクレンジング
- 特徴量エンジニアリングの実行
- モデルの定義
- モデルのトレーニング(学習)
- テストの実行
- 結果の予測(推論)
データのクレンジング
データの品質を向上させるために、データを洗浄(クレンジング)すること。
データの粒度や入力方法の違いにより、データが十分に活用できない場合がある。
- 半角 / 全角
- 空白や区切り文字
- 電話番号や住所
エラーや矛盾があるデータはダーティデータと呼ばれる
ダーティデータが生まれる原因 - 誤登録
- 重複登録
- 表記の揺れ
- 情報の欠如など
特徴量エンジニアリング
参考
特徴量とは、モデルにインプットする変数のこと
特徴量エンジニアリングとは、手持ちのデータからドメイン知識などを駆使し、新たな特徴量(モデルにインプットする変数)を生成する取り組み
データの質を向上させ、より無駄なく、より意味のあるデータを学習させることで、予測モデルの予測性能(汎化性能)を向上できるから
ドメイン
ドメインとは、手持ちデータが属する業界や事業等、その領域における専門知識・知見・トレンドなどを表す概念
ドメインを用いる理由:データが生み出される仕組みや背景・経緯を知っていることで、データの構造、特徴や傾向をより深く、広く把握することができるから
ドメイン知識がデータ解析の結果・精度に大きく影響する為、データサイエンティストはドメイン知識の習得・理解が不可欠
逆にいえば、ドメイン知識のある人が機械学習を学べばいいのでは?
データ構造の理解・構造把握
不均衡データ
データの全体概要を把握することが肝要
データの正例・負例や件数を把握すると良い
予測したい事象が「頻繁に起こるものなのか」または「稀にしか発生しない事象なのか」を把握する
予測したい事象(正例)が非常に少ないデータを不均衡データといい、その場合は特別な対応が必要となる
特別対応の参考情報
不均衡データをそのまま学習させてもAccuracy(正解率)は高いが、Recall(適合率)が悪くなる
例えば、病気の予測をしたい場合に10000件のデータが以下の配分だったとする
- 正例:病気の人のデータ 20件
- 負例:健康な人のデータ 9980件
これをそのまま学習させた場合、予測モデルは10000件を健康と扱ってしまう
Accuracyは99.8%だが、Recallは0%となり、本来予測したい病気の可能性を全て見逃してしまう
不均衡データを扱う場合、どのような背景でそうなっているのかを考察しておく必要がある
外れ値
- 分布から大きく外れた値のこと
- そのままの状態では、モデルの予測結果に想定外の影響を出してしまうものもある
参考
欠損データ
- 欠損値とは値を持たない(Null値)のこと
- 欠損値は、欠損していること自体に意味があるものもあり、また意味のある欠損値から新たに特徴量を生成することも有用
参考
時系列データ
- 時間の順序に従って並べられたデータ
- そのままの状態では解析に適さないデータもあり、扱いには工夫が必要
参考
特徴量エンジニアリングのテクニック
数値変換
- 数値(量的)変数を、より説明力の高い、意味のある値に変換する手法
- データ分析の過程では、データの解釈性を高めたり、アルゴリズムに適合する形に変換する目的でも使用される
参考
エンコーディング
- カテゴリ(質的)変数を、数値(量的)変数に変換する手法
- よりデータの特徴を捉えたエンコーディングを行うことで、質の高いデータセットを作ることができる
参考
欠損値処理
- 欠損値自体に意味がある場合、無意味な欠損値が数多くある場合に対処する手法
- アルゴリズムによっては欠損値をインプットできないものもあるので、事前に前処理が必要
参考
クラスタリング
- あるデータを特定の規則に則ってグループ分けする手法
- クラスター分析などは、データ分析時にもよく使われる手法
参考
主成分分析
- より少ない情報に手持ちのデータをようやくする手法
- 冗長な情報が多く含まれたデータセットでは、データの誤差(ノイズ)をモデルが学習してしまい、正確な予測が行えなくなってしまう危険がある
- ノイズにモデルが適合しすぎることを過学習(オーバーフィット)
参考
相互作用特徴量
- 相関関係の強い変数が複数存在した場合、それら二つ以上の変数を掛け合わせた新しい変数を作る方法がある
参考
特徴選択
- 上記の方法で生成した特徴量は、本当に効果的な特徴量か検証・精査する必要がありその手法
参考
不均衡データへのアプローチ
アンダーサンプリング
- 多数派のデータを少数派のデータ数に合わせて削除する
- 先ほどの例だと、どちらのデータも20件にして学習させるということ
- シンプルな方法だが、多数派のデータを削除しているため、重要なデータも欠損し、元の多数派のデータに対し、バイアスが生じる原因になってしまう
- 確率予測をする場合、アンダーサンプリングを行ったデータで構築したモデルが出力する予測確率に生じるバイアスを除去し、補正する必要がある
アンダーバギング
簡単にいうとアンダーサンプリングで複数の学習器を作ってそれを組み合わせて、より強力な学習器を作る手法
- 学習データからブートストラップサンプリング(重複を許してランダムサンプリング)によって複数の部分データセットを作成する
- それぞれの部分データセットから、単体の学習器(決定木など)を構築する
- 構築された複数の学習器を組み合わせて、最終的な予測を行う(例えば分類の場合は多数決で判断する)
- アンダーサンプリングには、予測器の出力の分散が大きくなることがあるという問題がある
- アンダーサンプリング後のデータ量が十分でない場合、的確な予測ができず予測結果に散らばりが生じることがある
- そのため、アンダーバギングという手法が有効なケースがある
- アンダーサンプリングを実施して、n通りの部分集合を作成し、各部分集合ごとに分類器を学習し、バギングでアンサンブルする手法
- ここでのバグングとは、ブートストラップサンプリング手法を用いて生成したデータを複数のモデルでそれぞれ学習する方法
- ブートストラップサンプリングとは、置換を伴うランダムサンプリングのことで、データの平均化(偏りをなくす)を行う
オーバーサンプリング
- アンダーサンプリングとは反対に、少数派のデータを多数派のデータ数に合わせて増やしていく手法
- 単純にデータを複製するだけでは、データセットに新しいバリエーションを持たせることができない
- 注意点として、無秩序に少数派のデータを量増ししたところで、同じようなデータが増えることで過学習に陥り、汎化性能の低い予測モデルができてしまう
- 対処法としてSMOTEという手法が使われる
k近傍法
- 学習データ中の既知のデータ点から、未知の入力データ点までの距離を計算する
- 距離が最も近い順にk個のデータ点を選ぶ(kは任意の正の整数)
- 選んだk個のデータ点のラベル(分類の場合)または値(回帰の場合)から、未知の入力に対する出力値を決定する
- 分類問題の場合は、k個の近傍点のうち最も多いクラスに未知の入力を分類する
- 回帰問題の場合は、k個の近傍点の値の平均や中央値を出力値とする
- kの値が小さすぎると局所的な特徴に過剰反応し、大きすぎると大域的な特徴を捉えられなくなるトレードオフがある
- 距離の定義次第で性能が大きく変わる
SMOTE
- ランダムサンプリングのデータと、k近傍法のアルゴリズムで求められたデータにより、合成データを作成する方法
- SMOTEは、まず少数派のデータからランダムでデータを選択し、そのデータからランダムで、選択された近傍点を用いて、両者の合成データを作成する
- k=3の時、サンプリングデータの点から近傍点を3つ選択し、その中からランダムで1つの近傍点を選択し中心点と近傍点の間に新たなサンプルを生成する
重み付け
- 少数派のサンプルに重み付けを行い(重要視して)、少数派のカテゴリをより明確に分類できるようにする手法
- 重み付けとは、目的関数の誤差に対し(少数派データのラベルごとに)ペナルティを与え、少数派のデータの学習を重視して学習させること
- 例えば、決定木系のモデルでは、損失関数を元に分類を行うが、そもそも正例または負例のサンプルが少ない場合は、損失に影響を及ぼしにくいので、重み付けを行う必要がある
- メリットとして、メモリを節約して不均衡データに対応できるようになる
- オーバーサンプリングのようにデータ量の増加が発生しないから
- 注意点としては、重み付けは学習データのみに対して行い、検証データ、テストデータに対しては重み付けを行ってはいけない
- 実際のデータの比率に対しての精度を見て評価をしないといけないから
異常検知問題として扱う
- あまりにもデータに偏りがあり、正例データが不足しているかつ、少数派のデータクラスターを作れていない場合、分類問題として扱うのが困難なケースがある
- その時は、分類問題ではなく、異常検知問題としてのアプローチが有効なケースがある
- 正常データ群からの距離や密度の違いに着目し、事前に定めた閾値を超えたデータを異常値として判定する手法
- Local Outlier Factor(LOF)
- One-class SVM
- Isolation Forest(iForest)などがある
不均衡データの評価指標
・正解率:Accuracy
・適合率:Precision どれだけ間違いなく正例データを予測できているか TP / TP + FP
・再現率:Recall どれだけ漏れなく正例データを予測できているか TP / TP + FN
・F値(F-measure) 適合率と再現率の調和平均
アルゴリズム
- モデルの学習をするための学習方法のことで、大きく以下の3つに分けられる
- 教師あり:各データと「解答(のラベル)」のセットを入力とする
- 教師なし:データセットのみを入力とし、特徴に基づき分類する
- 強化学習:機械自身が試行錯誤し、より高い「報酬」を得られる結果を探す
教師あり学習
- 分類 / discrete(離散値)
- データが属するクラスを予測する
- 結果が2値(合否など)の場合2値分類
- 3値以上の場合多クラス分類
- データが属するクラスを予測する
- 回帰 / quantitative(定量的)
- 連続する数値から、今後の数値の変化を予測する
教師なし学習
- クラスタリング
- データを特徴によってグループ化
- 次元削除
- 多次元のデータに対し、分析に不要な情報や冗長な情報を削除し圧縮する
- 高速化やグラフによる可視化を可能にする(次元数が多いと平面で図示できない)
自然言語処理(NLP)
- 人間の言語(自然言語)を機械で処理し、内容を抽出すること
- NLPの代表的なアルゴリズムとして以下がある
- OSB(直行スパースダイアグラム)
- 単語のグループから「先頭の単語 + その他の単語のペア」を複数作る
- 例文:Please call the number below
- Please_call, Please__the, Please___number, Please____below の3つのペアができる
- 単語間には"_"(アンダースコア)が入る
- 参考
- TF-IDF(Term Frequency-Inverse Document Frequency)
- 自然言語処理において、各文書(document)の中に含まれる各単語(term)が「その文書内でどれくらい重要か」を表す統計的尺度の一つ
- 「どれくらい多い頻度で出現するか」を表す TF値 と、「全文書中」で「ある単語を含む文書」が「(逆に)どれくらい少ない頻度で存在するか」を表すIDF値を掛け合わせた値
- 参考
- Bag-of-Words
- 単語の出現回数から分類 / 評価を行う
- 参考
- N-gram
- N-gram = 連続するn個の単語や文字のまとまり
- 1-gram / unigram
- 2-gram / bigram
- 3-gram / trigram
- 例文:Please call the number below
- Please, call, the, number, below の5個のユニグラム
- Please call, call the, the number, number below の4個のバイグラム
- Bag-of-wordsと違い、連続する複数単語を組み合わせるため、コンテキスト(文脈)による分析ができる
- 参考
- N-gram = 連続するn個の単語や文字のまとまり
- OSB(直行スパースダイアグラム)
コーパス
- AIが自然言語を扱う際に使う文章を構造化し、データベース化したもの
- 自分で作るか以下のような公開されているものを利用する
- Brown Corpus: 様々な分野の文書から構成される英語コーパス
- British National Corpus: 現代の英語使用を反映した大規模コーパス
- Penn Treebank: 構文解析用に注釈付けされた英語コーパス
- Reuters Corpus: ロイター通信の記事からなるコーパス
バイアスとバリアンス
- バイアスとバリアンスはトレードオフの関係であり、学習が足りないと高バイアスになりやすく、学習をしすぎると高バリアンスになりやすい
バイアス
- 機械学習において実際値と予測値の差をバイアスという
- この差が小さいほど精度が高く、正確に予測できているということ
- 誤差が大きい状態を高バイアスと呼び、精度が低いことを表す
バリアンス
- 機械学習において予測値が散らばっている度合い(予測値の最小と最大の差の大きさ)をバリアンスという
- 散らばり度合いが高い状態を高バリアンスと呼び、精度が低いことになる
- 高バリアンスは過学習が原因
- 学習を重ねることにより、結果は多く得られるが、大きく外れた予測値も増えてしまう
ハイパーパラメータ
- 機械学習アルゴリズムの挙動を設定するパラメータ
- エポック数
- 学習率
- 閾値
- ミニバッチサイズ
- 層の数
- 一層あたりのニューロン数など
- 精度を上げるためにチューニングしていく
参考
学習率
- 機械学習の最適化において、重みパラメータを一度にどの程度変化させるかを表す調整パラメータ
- 機械学習では反復的に重みパラメータを変更していくが、学習率の値が高いほど一度に変更する重みパラメータの大きさが大きくなるので学習スピードは上がる
- しかし、学習率を高く設定しすぎると、一部の偏ったデータから学習しすぎてしまい、正確性が下がる可能性がある
参考
オーバーフィッティング
- 過学習 / 過剰適合のこと
- 回帰分析や機械学習で、学習データに対して適合しすぎて本来データが示唆する傾向から大きく外れてしまう現象
- トレーニング対象のデータに足しては、高い精度が出るのに対し、未知のデータに対しては期待する精度が出ない状態になってしまう
- オーバーフィッティングが起きていた場合の対策としては以下が挙げられる
- 次元削減
- 正則化(regularization)
- ドロップアウトなど
参考
正則化
- 不良設定問題を解いたり、過学習を防いだりするために、情報を追加する手法
- 重みの絶対値が大きくなると、誤差関数の値が大きくなるようなペナルティーをかけるなどをする
参考
ドロップアウト
- ニューラルネットワークにおいて過学習を防止する手法の一つ
参考
損失関数(loss function)
- 機械学習モデルが算出した予測値と実際の正解値のズレを損失という
- 損失を計算するための関数が損失関数
- 計算の結果出力される損失は、実際の正解値と予測値の距離や差、違いの総量や平均とみなすことができる