【AWS】AWS Certified Machine Learning - Specialty


## はじめに

この記事ではAWS Certified Machine Learning - Specialtyを受験するにあたり
勉強したことなどを書いています。（実際に試験を受けてみた経験も踏まえて記載）

なお、内容についてはすべてを網羅しているわけではありません。
純粋に勉強したことだけを書いています。

気づいたときに追記します。

## データを保存・分析の際に使うサービス

直接は関係ないけど、機械学習には分析と保存が重要ということで基本的なサービス名を列挙します。

- AWS Lake Formation
- AWS Data Pipeline
- Amazon EMR
- AWS Glue
    - AWS Glue Data Catalog
- Amazon Athena
- Amazon S3
- Amazon Redshift
- Amazon DynamoDB
- AWS DMS
- AWS DataSync

## Kinesis と名のつくもの（名がついていたもの）

ストリーミングしたい場合はKinesisファミリーを使います。

- Amazon Kinesis Data Streams
- Amazon Data Firehose
- Amazon Managed Service for Apache Flink
    - 旧：Amazon Kinesis Data Analytics 

参考

- [Amazon Kinesis Data Analytics から名称が変更された Amazon Managed Service for Apache Flink の発表](https://aws.amazon.com/jp/blogs/news/announcing-amazon-managed-service-for-apache-flink-renamed-from-amazon-kinesis-data-analytics/)

- [Amazon Data Firehose (旧 Amazon Kinesis Data Firehose) のご紹介](https://aws.amazon.com/jp/about-aws/whats-new/2024/02/amazon-data-firehose-formerly-kinesis-data-firehose/)

## 検索系サービス

ドキュメント検索のサービスにはKendraなどを用います。

- Amazon Kendra
- Amazon OpenSearch Service

## Amazon SageMaker と名のつくもの

いわゆる、SageMakerファミリー（順不同）

- Amazon SageMaker
- Amazon SageMaker Studio
    - Amazon SageMaker Studio Classicというのもある
- Amazon SageMaker Canvas
- Amazon SageMaker SDK
- Amazon SageMaker Experiments
- Amazon SageMaker Debugger
- Amazon SageMaker Autopilot
- Amazon SageMaker Data Wrangler
- Amazon SageMaker Clarify
- Amazon SageMaker Ground Truth
- Amazon SageMaker Model Monitor
- Amazon SageMaker Inference Recommender
- Amazon SageMaker Runtime InvokeEndpoint
- Amazon SageMaker seq2seq
- Amazon SageMaker BlazingText アルゴリズム
    - Amazon SageMakerに最適化された Word2vec アルゴリズム
- Amazon SageMaker Object2Vec
    - Amazon SageMakerに最適化された Object2Vec
- Amazon SageMaker Inference Recommender

## 機械学習で使うサービス

直接は関係ないけど、機械学習という文脈で使うサービスを列挙します。

- Amazon Translate
- Amazon Transcribe
- Amazon Comprehend
- Amazon Rekognition
- Amazon Elastic Inference
- Amazon Mechanical Turk

## 機械学習 + IoT

- AWS IoT Core
- AWS IoT Greengrass
- AWS IoT Analytics
- AWS Panorama

## 他

- AWS Deep Learning Containers
- TensorFlow Estimator

## ケース別

### XXを購入した人はYYも購入してます的な実装をしたい

協調性フィルタリングエンジン推奨エンジン

### モデルに対する負荷を可視化したい

CloudWatchダッシュボードを作成してレイテンシやメモリ使用率、CPU使用率を確認しましょう。

### MLを実行しているけどレイテンシがすごいとき

IoTなどでクラウドとエッジ間のレイテンシが高いときはAWS IoT Greengrassを使いましょう。
（エッジデバイスにモデルをデプロイして動かしましょう。）

### オンプレ、クラウド間のデータ同期

AWS DataSyncを使って同期しましょう。

### データをインターネットに出さずAWSと連携

VPCエンドポイントを使いましょう。S3バケットにはバケットポリシーを設定するのも良いです。

### データを一箇所に集めてアクセスを細かくしたい

AWS Lake Formationでデータを統合してIAMポリシーを設定しましょう。

### ストリーミングしながらETLを実行したい

AWS Glueを使ってストリーミング ETL ジョブを実行しましょう。

[AWS Glue でのストリーミング ETL ジョブ](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job-streaming.html)

### ストリーミングデータを分析したい

Amazon Kinesis Data Streamsを使ってS3にデータを配信します。
Amazon Data Firehoseを使って配信するパターンもありますが、それはどのようなデータを配信するか（入力するか）で決まります。

CSVを入力する場合はAWS Lambdaを使う必要があります。

[Amazon Data Firehose で入力データ形式を変換する](https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/record-format-conversion.html)

また、分析にはAmazon Managed Service for Apache Flink が利用できます。

### S3にあるデータを分析したいけどどうすればいい

AWS Glue Data CatalogでS3のデータをデータカタログとして登録しておき、Amazon Athenaで分析するのが良いでしょう。

### データセットの多様性を高めたい

合成少数派オーバーサンプリング手法(SMOTE)を利用します。
※SMOTE(Synthetic Minority Over-sampling Technique)

SMOTEは、不均衡データ、つまりあるクラスのデータが圧倒的に少ないデータセットに対して、その少ないクラスのデータを人工的に増やすことで、データのバランスを調整する手法です。

例：不正な取引を検知するモデルを作成したい。しかし、不正な取引に関する情報が少ないためにモデルが作成できないため、SMOTEを利用する。

## 可視化表現

データを可視化するための表現、グラフ化にはさまざまなものがあります。
それぞれ適切なところで適切に扱わないとデータをうまく可視化できないため、各表現の使い方について理解しておく必要があります。

- 折れ線
- 散布図

### 折れ線

時間経過などの連続するデータを可視化する際に利用します。

### 散布図

データセット内のアイテム間の関係を可視化する際に利用します。

## 機械学習用語集

- 数値ビニング
- 対数変換
- 高次多項式変換
- ホットエンコーディング
- クロスバリデーション
- K平均法（k-means clusteringまたはK点平均法）
- K近傍法
- L1正則化
- L2正則化
- t-分布確率的近傍埋め込み（t-SNE）
- Inceptionニューラルネットワーク
- k-foldクロスバリデーション
- 層別k-foldクロスバリデーション
- ランダムカットフォレスト（RCF）

### 数値ビニング

連続的なデータを小さなビンと呼ばれる離散的な分類に分割する手法です。
データの分布を均等化し、データ内のノイズを削減します。

「数値データをカテゴリデータに変換する」とも言います。

[参考：数値データ: ビニング - Google MLのコンセプト](https://developers.google.com/machine-learning/crash-course/numerical-data/binning?hl=ja)

### 対数変換

データのスケールを調整し、右側の歪みを修正する手法です。右に歪んだデータの分布を正常化する際によく使われます。

### 高次多項式変換

非線形関係をモデル化する手法です。ただし、過適合のリスクがあります。

### ホットエンコーディング

カテゴリー変数をモデルが理解できるバイナリベクトルに変換する手法です。数値の歪みに効果はありません。

### クロスバリデーション

モデルの汎用性を評価する手法です。データの歪みの修正には直接関与しません。

### K平均法（k-means clusteringまたはK点平均法）

データをクラスタに分けて、クラスタ内の平均をうまい具合にとりつつデータを分けるアルゴリズム

### K近傍法

[K-Nearest Neighbors (k-NN) Algorithm - AWS Developer Guide](https://docs.aws.amazon.com/sagemaker/latest/dg/k-nearest-neighbors.html)

### L1正則化

L1正則化パラメータは、モデルの特徴の重みを制御するものであり、その値が大きいほど特徴の重みがゼロに近づく要素が増えます。このパラメータを調整することで過学習を軽減できます。

### t-分布確率的近傍埋め込み（t-SNE）

次元削減アルゴリズムの1つとして数えられます。

t-SNE (t-Distributed Stochastic Neighbor Embedding) は、高次元のデータを2次元や3次元の低次元空間に落とし込み、可視化するための手法です。特に、データの局所的な構造を保ちながら、美しい可視化画像を作成できることで知られています。

### Inceptionニューラルネットワーク

画像認識分野で高い性能を発揮する深層学習モデルの一つです。Googleによって開発されたGoogLeNetがその代表例として知られています。

### ResNetアーキテクチャ

深層学習、とくに、画像認識分野で非常に高い性能を発揮するニューラルネットワークのアーキテクチャの1つです。

深いニューラルネットワークの学習における課題を解決し、非常に深い層を持つモデルを実現することで、画像認識の精度を飛躍的に向上させます。

### k-foldクロスバリデーション

母集団の中で学習データとテストデータを入れ替えた組み合わせを複数用意し、その上でモデルの学習と検証をします。多くの検証結果から総合的にモデルの性能を検証する手法です。

パターン数が多くなるため、計算資源をたくさん必要とする手法です。

### 層別k-foldクロスバリデーション

データの偏りやより公平な評価を考慮したk-foldクロスバリデーションの応用です。

### ランダムカットフォレスト（RCF）

異常検知に特化した機械学習アルゴリズムの一種です。とくに、時系列データにおける異常なパターンや外れ値を検出するのに非常に効果的です。

ランダムフォレストというアルゴリズムをベースに開発されましたが、通常のランダムフォレストと異なり、教師なし学習のアルゴリズムです。つまり、あらかじめ異常なデータと正常なデータのラベル付けが不要で、データそのものから異常を検出します。

## 間違えて覚えちゃいそうなところ

### K近傍法とK平均法（k-means clusteringまたはK点平均法）の違い

- K近傍法は教師あり学習、K平均法は教師なし学習

正解ラベルがあるかないかが争点

- 種類（正解ラベル）がわかっている状態でグループ化する場合はK近傍法
- 種類（正解ラベル）がわかっていない状態でグループ化する場合はK平均法

## 参考

- [Amazon Kinesis Data Analytics から名称が変更された Amazon Managed Service for Apache Flink の発表
](https://aws.amazon.com/jp/blogs/news/announcing-amazon-managed-service-for-apache-flink-renamed-from-amazon-kinesis-data-analytics/)