機械学習ド素人が２週間で、AWS Certified Machine Learning - Specialty（MLS）に合格した要点まとめ

# はじめに
全くの機械学習の素人が２週間で、`AWS Certified Machine Learning - Specialty（MLS）`に合格するために猛烈に勉強した内容をまとめます。


# 基礎単語
- **ストップワード**
    - 処理対処外とする単語

## 前処理
- **ハイパーパラメータ**
    - 機械学習モデルが学習を開始する前に、設定するパラメータ
    - 人間の手によってハイパーパラメータチューニングを行うことで予測精度を向上させる
    - 深さを調整することで、**モデルの複雑さを調整できる**
    - **ベイズ探索**
        - 最適なハイパーパラメータを調整するために、トレーニングジョブが少なくて済む
        - 確立を最適化していく

- 【種類】
     - **バッチサイズ**
        - データセットの件数
        - 大きくすると汎化性能が落ちる

    - **学習率**
        - 機械学習の最適化において、重みパラメータを一度にどの程度変化させるかを表す
        - 学習率の値が高いほど一度に変更する重みパラメータの大きさが大きくなるので学習のスピードは上がり、反対に低ければ学習のスピードは下がります
        - バッチサイズに合わせた最適な学習率を選択。バッチサイズと学習率は比例の関係にあるので、**バッチサイズを下げたら学習率も下げる**
    - **エポック数**
        - 「一つの訓練データを何回繰り返して学習させるか」の数のこと



- **One-hotエンコーディング**
    - 機械学習をつかう前処理の1つ
    - 離散的な値のセットを持つ、カテゴリ的な特徴量に使用できる
![スクリーンショット 2022-12-15 9.49.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/dd7119f4-ad21-eb9d-282c-71b00d1273d5.png)

- **オーバーサンプリング**
    - 件数が少ないデータを増やす
- **アンダーサンプリング**
    - 件数の多いデータを減らす

### ニューラルネットワーク
- **ドロップアウト**
    - 深層ニューラルネットワークにおける、重み更新の際に一定の割合でランダムに枝を無効化する
    - 過学習の回避
- **勾配チェック**
    - デバッグに役立つ
    - コードの正確さに対する信頼が大幅に高まる
- **勾配消失**
    - 勾配消失問題とは、機械学習手法のひとつであるニューラルネットワークの設計において、勾配が消失することで学習が進まなくなる技術的な問題のこと


# アルゴリズム
## ▼ 教師あり
### 分類と回帰の違い
分類：出力が**カテゴリ**
回帰：出力が**実際の値**（過去のデータによる予測）

### 線形回帰とロジスティック回帰の違い
- 線形回帰は実際の値を予測するのに対して、ロジスティック回帰は発生確率（0~1の値）を予測する
- 例：
    - 線形回帰は「年齢から平均握力そのものを予測する」のに対して、ロジスティック回帰は「（例えば）30歳での平均握力が30kgとなる確率」

### サポートベクターマシン（SVM）
- 画像分類等で使われる、認識性能を発揮する教師あり学習モデル
- **線形SVM**
    - 線形分類の場合に使用
- **カーネルSVM**
    - 非線形分類の場合に使用

### XGBoost
- 誤差を目的変数として決定木を構築し、誤差を小さくしていく教師ありアルゴリズム。
- 過学習（学習データにだけ適応した学習ばかりが過剰に進んでしまい、AIの、未知のデータに対して推定する性能が下がってしまうこと）低減、併せて高速演算を実現しています。
- つまりXGboostでは時間をかけずに簡単に、それなりの結果を得ることができます。またこちらもバイナリ分類やSageMaker組み込みアルゴリズム、複数クラスの分類に使用できます。
- 例：　チャーン分析（解約予測）

https://qiita.com/dai_zamurai/items/8e60ba064d56e0574945

### 因数分解機アルゴリズム
- レコメンデーション上位を予測できる、教師あり学習アルゴリズム。
- **高次元スパースデータセット**を処理するタスクに適したアルゴリズム
- 分類と回帰の両方に使用できる。

### ニューラルネットワーク
- **畳み込みニューラルネットワーク（CNN)**
    - データから直接学習できるディープラーニング
    - 画像処理に強い
    - 例：　物体や顔、シーンを認識するために画像の中からパターンを見つけるのに特に有効
- **再起型ニューラルネットワーク(RNN）**
    - 翻訳や対話といった言葉を扱う自然言語処理に強い

### DeepAR予測
- 再帰型ニューラルネットワーク (RNN) を使用してスカラー (1 次元) 時系列を予測するための、教師あり学習アルゴリズム
- 新しい時系列データの予測にも使用できる

### ナイーブベイズ分類器
- テキストをいくつかのクラスに分類する分類器
- 線形分類

## ▼ 教師なし
### ランダムカットフォレスト（RCF）
- データセット内の**異常なデータポイントを検出**する教師なしアルゴリズム
- 決定木ベースなので決定木をイメージするとわかりやすいです
- 分類と回帰の両方で使えます

### K-Means（k平均法）
- 外れ値の検出ができる、教師なしの学習アルゴリズム。
- クラスタリング(グループわけ)で最も使われる手法のひとつ
- 1つのグループのメンバーができるだけ類似し、他のグループのメンバーとできるだけ異なる離散グループをデータ内に見つけようとします


## トピック関連のアルゴリズム
- **【潜在的ディリクレ（LDA）配分アルゴリズム】**
    - 一連の観測値を異なるカテゴリの混合として記述しようとする教師なし学習アルゴリズム
    - テキストコーパス内のドキュメントに共有されるユーザー指定数のトピックを検出するために最も一般的に使用される
    - **テキストのグループ化**に使用
- **【BlazingTextアルゴリズム】**
    - BlazingText アルゴリズムは、感情分析や名前付きエンティティの認識などの自然言語処理タスクに使用される
- **【ニューラルトピックモデル】**
    - 文章がどういうトピックで構成されているかを調べるための教師なし学習アルゴリズム
    - 例：自転車・車・走行距離などの単語がでてくれば「交通」に関するトピックだなとか
- **【Term Frequency - Inverse Document Frequency (TF-IDF、単語出現頻度－逆文書頻度)】**
    - ドキュメント内で一般的およびあまり一般的でない単語に重みを付けることにより、ドキュメント内の単語の重要性を決定します
- **【Object2Vec】**
    - 意味的に類似している単語の検索
- **【Bag of Words】**
    - ドキュメント内の各単語の出現した回数を示す
- **【N-Gram】**
    - 自然言語処理アルゴリズム
    - ドキュメントのテキスト内の複数の単語のフレーズを見つけるために使用される

## 参考
アルゴリズムのついては、こちらがすごく良くまとまっていてとても参考になりました

https://qiita.com/tomomoto/items/b3fd1ec7f9b68ab6dfe2#%E5%9B%9E%E5%B8%B0

# 評価指標
## 【二値分類（バイナリ分類】
- **特異性**
    - プロモーション出力を最大にするためには、この値を最大化する

- **リコール（再現率）**
    - 結果としてでてくるべきもののうち、実際にでてきたものの割合。適合率とはトレードオフの関係。
    - モデルが不正なトランザクションを検出できるかどうか判断するのに役立つ
    - 非線形なアルゴリズムのほうが高いリコールを提供する
    - いつ使うか？
        - 見逃しをなるべく抑えたいとき。例えば、障害や異常検知課題など

## 【分類】
- **正解率**
    - 分類モデルのメトリクス
    - モデルが正しかったすべての予測を返す
    - いつ使うか？
        - すべてのクラスが同じように重要であるとき。例えば、猫と犬の分類課題など 
- **適合率**
    - 分類モデルのメトリクス
    - 正に分類されたもののうち、何個が関連しているかを判断するために指標を提供する
    - いつ使うか？
        - 誤認識・誤検知をなるべく抑えたいとき

https://www.cresco.co.jp/blog/entry/5987/

## 【その他】
バイナリ分類に使用する
- **ROC**
    - 各軸が TPR、FPR を表し、Postitive と Negative に分類する際の閾値を変更し、各閾値時の TPR、FPR をプロットしたグラフ。
    - **TPR : True Positive Rate**
        - 全ての Positive のうち、実際に Postitive だったものを正しく Positive と判定できた割合。
    - **FPR : False Positive Rate**
        - 全ての Negative のうち、実際には Negative だったが間違えて Positive と判定した割合。


- **AUC（ROCの曲面下面積）**
    - 0~1の値で推移
    - 1に近いほど優れた分類モデルである
    - 分類問題で、リコールと精度のバランスを評価するモデル指標

## 参考
https://tech-blog.optim.co.jp/entry/2021/05/31/100000

# 過学習の回避
- **過学習**：手元にあるデータだけにピッタリ合い、未知データに対して全く合わないモデルを作ってしまうこと
    - 特徴量を減らす
    - ドロップアウトを増やす
    - 正規化を増やす
    - 早期停止の実施
        - エラーが増加し始めたタイミングで早期停止を実施、過学習を防ぎモデル精度の劣化を防ぐ
![スクリーンショット 2022-12-13 22.32.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/a2b2b45c-617c-9991-18c1-27a16fe2a5c8.png)

- **L1正規化**
    - 次元圧縮
    - 余分な説明変数を省くことを目的
- **L2正規化**
    - 過学習を防ぐことで精度を高める
    - L1正規化を使ったモデルよりも予測精度が高い
    - L2正規化のほうが滑らかで表現力の高い

# 欠損値補完の方法
- **リストワイズ削除**
    - 欠損値が含まれるレコードを全て削除する方法
    - 欠損値が含まれるデータに対して行うのはデータのバイアスが増してしまうので、不適切
- **マルチプルインピュテーション**
    - 欠損値のない他の特徴量を用いて欠損値のある特徴量を推定するモデルを作成し、そのモデルに基づいて値を補完する方法
- **last observation carried forward（LOCF）**
    - 最後に観測された値でその特徴量の全ての欠損値を補完する単一補完法の一種
- **平均値/中央値補完**
    - 特定の特徴量の平均値/中央値を算出して、その特徴量の全ての欠損値に対してその値を補完する単一補完法の一種


# ◆ SageMaker
## アーキテクチャ
![スクリーンショット 2022-12-05 21.35.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/ef1448a0-77b1-d1d1-c47c-248fd9976185.png)

## セキュリティ
- SageMakerとS3のデータ通信は、S3 VPCエンドポイント経由で行うことが可能
- SageMakerのAPIは全て、PrivateLink経由で行うことが可能

## 推論パイプライン
- 2~5個のコンテナを、1つの推論エンドポイントにデプロイし、指定した順番で処理をしてくれる機能
- `前処理→予測（推論）→後処理`タスクなどの、複数ステップを組み合わせることができる
- 処理を全てSageMakerの中に記述できる
- StepFunctions　workflowを使用することで、パイプラインをサーバレスで実現できる
![スクリーンショット 2022-12-05 21.41.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/c7363599-d457-aa76-8994-73d07a7a8513.png)

## 自動モデル調整（ハイパーパラメータ調整）
- 指定したアルゴリズムとハイパーパラメータの範囲を使用して、データセットに対して多数のトレーニングジョブを実行することで、モデルの最適なバージョンを見つける

## SageMaker Ground Truth
- データラベルつけサービス
- モデルによって確実なラベルつけができない場合は担当者がラベル付けを行うよう連絡がいく


## Amazon Elastic Inference
- 深層学習モデルからスループットを高速化し、リアルタイムの推論を得るためのレイテンシーを短縮
- エンドポイントにGPUインスタンスを使用コストと比較して、大幅なコストダウンを実現できる
- アクセレレーターを起動する前に、PraivateLinkエンドポイントを指定する必要がある

## 細かな仕様
- CluodWatchLogsと統合されており、負荷テスト中にレイテンシー・メモリ使用率・CPU使用率を確認できる
- S3と統合されており、RDSからのデータを使用する前に、DataPiplineを使用してS3にコピーする
- IAMポリシーを使用して、SageMakerノートブックインスタンスへのアクセスを制御できる
- EMR上で動作するApache SparkクラスターにSageMakerノットブックインスタンスを接続することで、SageMakerに機能を強化できる
- SageMaker のアルゴリズムはパイプモードで動作する **RecordIO形式**で最も効果的に動作するため、トレーニングの速度を向上させることができる
- SageMaker は、1 つの SageMaker エンドポイントへの複数のモデル (本番稼動用バリアント) のデプロイをサポートしています

# ◆ Poliy
- テキストをリアルな音声に変更するサービス
- 低レイテンシーで応答が速いため、リアルタイムシステムを構築する際の選択肢となりえる
-　**発音レキシコン**
    -　一般的ではない、発音をPoliyが発音できるようにカスタマイズできる
    -　レキシコンはリージョン固有のもの

![スクリーンショット 2022-12-12 8.00.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/c35bc074-93de-1f3c-c08e-c5694898d402.png)

## SynthesizeSpeech API
- 入力テキストのサイズは最大3000文字
- 最大5個のレキシコンを登録できる
- 出力オーディオストリームは5分に制限。残りの音声は切り取られる

# ◆ Lex
音声やテキストを使用して、任意のアプリケーションに対話型インターフェイス(ボット)を構築するサービス

![スクリーンショット 2022-12-12 8.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/568310a4-1947-f55b-41e4-a26b4f1a3683.png)

# ◆ Rekognition
- 深層学習に基づく、画像認識サービス

## 顔分析
`DetectFaces API` を利用すると、画像内の顔の位置を検出し、感情、ポーズ、 瞳が開いているかどうかなどの顔属性を分析できる

## 顔認識
IndexFaces API と SearchFacesByImage API を利用すると、大規模な顔のコレクションの中から似た顔を見つけることで画像の中にいる人物を識別することができます

## 制限事項
- Amazon S3 に保存されている参照画像の最大サイズは15MBで、最小解像度の高さと幅は80ピクセル
- API のパラメータとして引き渡し可能な素画像サイズの最大値は5MB
- サポート画像フォーマットは`PNG`, `JPEG`のみ

# ◆ Transcribe
Amazon Transcribe は、自動音声認識 (ASR、automatic speech recognition) と呼ばれる深層学習プロセスを使って迅速かつ高精度に、**音声をテキスト**に変換する
機能をアプリケーションに追加できる

# ◆ Comprehend
機械学習を使用して、テキスト内でインサイトや関係を検出する自然言語処理（NLP）サービス

# ◆ Translate
ニューラル機械翻訳サービス

# ◆ Mechanical Turk
- Amazon Mechanical Turk は、人間にリクエストすることによって、サービス依頼者（以後、「依頼者」）に、**擬似人工知能**を直接依頼者のアプリケーションに統合するサービスを提供

# ◆ Forecast
- 時系列予測のためのフルマネージドサービス
- 過去の時系列データから未来の予測を行うことができます
- XGBoostを使用するよりマネージドサービスであるため、労力が低い
- CSV形式のみをサポート。RecordIOはサポートしない。

# ◆ IoT Grrengrass
- AWSが提供するサービスの1つで、AWS の「IoT プラットフォーム」(AWS IoT) の機能をエッジ(現場)にオフロードする仕組み
- インターネット接続が保証されていないエッジ環境でも使用可能


# 参考

https://zenn.dev/hiyanger/articles/9a940425d73182

https://qiita.com/Octoparse_Japan/items/674e7dabc47b297f88ec

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/algos.html

https://iron-breaker.hatenablog.com/entry/2020/01/25/082845