はじめに
AWS Certified Machine Learning – Specialty取得に向けて勉強したことのメモです。
参考
- AWS 認定 機械学習 – 専門知識(Machine Learning – Specialty)合格に向けたオレオレ学習ガイドライン
- AWS認定 機械学習 合格しました
- AWS認定機械学習専門知識(MLS)を、2ヶ月の集中期間で取得したやったことまとめ
やったことサマリ
メモ
1. Machine Learning / Deep Learning 50%
●基本的な概念
- データ分布
- グラフの種類
- 棒グラフ:棒の高さで、量の大小を比較する。
- 折れ線グラフ:量が増えているか減っているか、変化の方向をみる。
- 円グラフ:全体の中での構成比をみる。
- 帯グラフ:構成比を比較する。
- ヒストグラム:データの散らばり具合をみる。
- レーダーチャート:複数の指標をまとめてみる。
- 散布図:2種類のデータの相関をみる。
- 3軸はbubble chart
- pairs plot: 散布図行列。複数の特徴量。
- 箱ひげ図:データの散らばり具合をみる。box plot
- 評価軸
- Net Promoter Score
- 「あなたは○○の製品(サービス)を友人に薦めますか?」と聞いて0から10の間で答えてもらい、その数値によって3つのグループに分けるというもの。
- Net Promoter Score
●主なアルゴリズム
- -> 回帰か分類か、次元削減かクラスタリングか
- 線形回帰
- 回帰分析: たくさんの変数を持つ集まり (= ベクトル) についてある関数にノイズが加わったような状態が事例として観測されました。このときその関数を予測
- 単回帰分析: 回帰分析のうち、単回帰分析というのは1つの目的変数を1つの説明変数で予測するもので、その2変量の間の関係性をY=aX+bという一次方程式の形で表します。
- 学習の前にランダムにシャッフルしたりする(過学習を防ぎ、分散を減らすため)
- 時系列を考慮した方がいいデータと、考慮せずランダムにすべきデータがある
- 最小2乗回帰(OLS:Ordinary Least Squares regression)は,より一般的には 線形回帰 (説明変数の数によって単回帰または重回帰)と呼ばれる.
- SageMakerなら: ターゲット変数のタイプを、二項分類、複数クラス分類、または回帰として指定します。
- predictor_type が binary_classifier に設定されている場合、使用可能なオプションは auto(logistic)、logistic、および hinge_loss です。
- 学習の前にランダムにシャッフルしたりする(過学習を防ぎ、分散を減らすため)
- 重回帰分析: 単回帰分析が、1つの目的変数を1つの説明変数で予測したのに対し、重回帰分析は1つの目的変数を複数の説明変数で予測しようというもの
- 多変量解析とは、複数の変数に関するデータをもとに、これらの変数間の相互関連を分析する統計的技法の総称です。特定の分析方法を指すものではありません。多変量解析には、重回帰分析やクラスター分析など様々な分析手法が含まれます。
- 線形従属だとどうなるか
- 線形結合: ベクトルの線形和を表す。ある変数が他の変数の線形結合で表せる場合、線形従属であるという。重回帰分析やロジスティック回帰分析などにおいて線型従属な変数が存在する場合、解が求められなくなる。この問題を特に多重共線性と呼ぶことがある。
- ロジスティック回帰
- がんの発症確率や生存率などの"確率"について回帰分析を用いて考えたいとき
- ロジスティック回帰分析を用いれば必ず予想結果が0から1の範囲に収まる
詳しく。関数とか。
- サポートベクターマシン
- ナイーブベイズ
- 決定木
- ランダムフォレスト
- 決定木を複数個構築し、その結果をアンサンブルする
- 過学習に強い
- ランダムカットフォレスト
- XGBoost
- GBMの実用的な実装
- XGBoostやパラメータチューニングの仕方に関する調査
- ランダムフォレストは決定木を複数個構築し、その結果をアンサンブルしますが、それに対してXGBoostは弱学習器を構築する際に前に構築された弱学習器の結果を使用し弱学習器を構築する。前に構築された学習器によって正しく分類されたデータに対して重みを小さくし、正しく分類されなかったデータに対して重みを大きくした学習器を作ります。これにより、新しく構築された学習器ほど誤ったデータに集中して学習することができます。
- ハイパーパラメータ(全体)
- booster [デフォルト = gbtree]
- gbtreeもしくはdartを選択するとツリーモデル、gblinearを選択すると線形モデルとなります。
- XGBoostは、正確に言うと勾配ブースティングであり、勾配ブースティング木ではないです。
- gbtreeもしくはdartを選択するとツリーモデル、gblinearを選択すると線形モデルとなります。
- booster [デフォルト = gbtree]
- ハイパーパラメータ(ブースターパラメータ)
- Xgboostには変数重要度(=feature_importance)の指標として以下3つ用意されていた。
- weight, gain, cover
- gain評価基準をどれだけ改善させたることができる(できた)のかという値
- たとえばmax_depth:3・n_estimator:100であればモデル全体で分岐が合計700回起こるので、変数Xがgain=10で10回分岐に採用されたのであれば、Xのfeature_importanceは、100/7000=0.143となる。
- gain評価基準をどれだけ改善させたることができる(できた)のかという値
- weight, gain, cover
- 学習
- 推論
- csvにlabel columnはない
- k平均法クラスタリング(K-means)
- k近傍法(k-nearest neighbor)
- 畳み込みニューラルネットワーク(CNN)
- 回帰型ニューラルネットワーク(RNN)
- 今度こそわかるぞRNN, LSTM編
- 「再帰型ニューラルネットワーク」と呼ばれ、数値の時系列データなどのシーケンスデータのパターンを認識するように設計されたニューラルネットワークのモデルです。
- 過去の情報を記憶しておき、その情報にしたがって新しい事象を処理することができる。
- 応用先
- 感情分析
- 文章生成
- 機械翻訳(seq2seq)
- 画像のキャプショニング
- Seq2Seq
- Seq2Seqとは、あるシーケンス(たとえば英語の文章)を受け取り、別のシーケンス(たとえば日本語の文章)に変換するモデルです。
- Seq2Seqは、翻訳以外にも以下のようなタスクで活用することができます。
- 文章の要約(長文の文章を要約する)
- 対話の生成(ある対話文章に対する応答を自動的に生成する)
- コールセンターなど
- PCA
- 特徴量の項目数を少なくする処理
- 重みを付けたうえで多数のフィーチャーを統合し、少数の新たなフィーチャーを作り出す
- 集団を最もよく表現するベクトル上にデータを射影するすることで、フィーチャーを統合し、新しい指標としています。
●ML/DLモデルのパフォーマンスを測定、理解、改善
測定
交差検証(クロスバリデーションテスト)
Confusion Matrix(混同行列)
予測/正解 正解0 不正解1 予測0真P TP FP 予測1偽N FN TN 分類器の性能評価
- 正解率 正確度 accuracy
- (TP + TN) / (TP + FP + FN + TN)
- 予測がどの程度当たったか。予測が正しかった割合。
- 精度 precision
- TP / (TP + FP)
- (真の予測の)精度
- 真と予測したデータのうち、実際に0である割合
- 取りこぼしてもいいが、間違いが許されない場合に使う
- Aさんは犯人かどうか?
- 再現率 recall
- TP / (TP + FN)
- 実際に0であるもののうち、真と予測した割合
- 間違っててもいいが、取りこぼしがゆるされない場合に使う
- 予測にかかわらず実際にPositiveのもののうち、Positiveと予測し実際にPositiveだったものの割合をみるものだ。網羅性をみることができる。Recallが高いということは、取りこぼしが少ないということ。
- Aさんは癌かどうか
- 偽陽性率 false positive rate
- ジニ係数
- 不均衡データセットに対して、堅牢的な指標
- コンペの指標になったりする
- AUC
- Precision-recall curves
- データが不均衡でnegativeデータが多いときに有効
- Cost
- business perspective次第で適宜設定
- 5 * FP + FN とか。
- 無駄なDMを減らす(買わない人に送らないようにする)
- -> FPを減らすようにする
- 問題: 不均衡データのときは?
- 不均衡データに関する分類問題は、recall(再現率。実際に正であるもののうち、正であると予測されたものの割合。)と precision (適合率。正と予測したデータのうち、実際に正であるものの割合。)との間のトレードオフに帰着します。少数派のクラスのインスタンスを検出したいという状況では、たいていの場合適合率よりも再現率を強く考慮します。なぜなら、検出という文脈では、負例に誤ったラベルを付けるよりも、正例を見逃す方がコストがかかるからです。例えば、不適切なコンテンツを検出しようとしている場合、不適切だと判断されたコンテンツが実際は不適切ではなかったということに手動のレビュワーが気付くというのは瑣末な問題ですが、不適切であるというフラグが立てられていないにもかかわらず実際は不適切だったコンテンツを特定するのは非常に難しいです。したがって、不均衡データの分類問題に取り組むときは、再現率、適合率、AUROCなどの、精度よりも適した評価指標の使用を検討してください。パラメータまたはモデルを選択するときに最適化する指標を切り替えることは、少数派クラスを検出する際のパフォーマンスの向上に大きく寄与するでしょう。
- 正解率 正確度 accuracy
- tf-idf
- tf-idfについてざっくりまとめ_理論編
- scikit-learnでtf-idfを計算する
- tf-idfは分析手法ではなく、どちらかと言うと前処理の仲間。レアな単語が何回も出てくるようなら、文書を分類する際にその単語の重要度を上げるというもの
- 特徴量抽出アルゴリズムの一種
- 「tf」は(Term Frequency)の略です。 直訳すると「単語の出現頻度」で、「各文書においてその単語がどのくらい出現したのか」を意味します。
- tf (Term Frequency)は その単語 (Term) の、そのドキュメントでの出現回数 / そのドキュメントで出現したすべての単語の総数
- 「idf」は(Inverse Document Frequency)の略です。 これは「逆文書頻度」と呼ばれており、単語が「レア」なら高い値を、「色々な文書によく出現する単語」なら低い値を示すものです。
- idf (Inverse Document Frequency)はdfの逆数。ただし実際には計算しやすくするようにlogで対数を取る。なので log(1/df) となる。
- tfidf=(単語の出現頻度)∗(各単語のレア度)
- 問題
- TF-IDFで文書内の単語の重み付け
* > 両方の文書に登場している「リンゴ」という単語は、片方にしか登場していない「レモン」や「ミカン」よりも特徴語としての重みは小さいことが数値的に分かります。
- TF-IDFで文書内の単語の重み付け
- tf–idf matrix using both unigrams and bigrams
- 問題
- 1 Please call the number below.
- 2 Please do not call us.
- -> There are 2 sentences, 8 unique unigrams, and 8 unique bigrams, so the result would be (2,16)
- 問題
- N-Gram Nグラム
- 単語を分割
- フィッシング詐欺の判定のためにある特定の単語を見つけるなど
- 次元削減を行う目的は主に以下の二つです。
- データの圧縮
- データの可視化
- トレンドとシーズン
改善
- 用語
- データの不均衡が起こった時にどうするか
- 1 アンダーサンプリング
- 少数派のデータ件数に合うように多数派データからランダムに抽出する
- 多数派のデータを対象にクラスター分析を行い、特徴量が類似するデータ同士で群を作成します。そしてこの群単位にランダムにデータを抽出すれば、特徴量の分布を維持できることになります。
- アンダーサンプリングの問題は、多数派クラスからランダムデータを削除することにより、重要な情報が失われる可能性があります。
- 2 オーバーサンプリング
- 少数派のデータをもとに不足分のデータを補完する方法
- 新しいデータを生成するシンプルな方法は、数値データであれば少数派の平均と分散を使ってランダムに生成することやカテゴリーデータであれば、構成比をウェイトにnumpyのrandom.choiceを用いるというものが考えられます。この方法は、特徴量間の相関が考慮できません。
- -> こうした問題などを考慮した方法としてSMOTE(synthetic minority over-sampling)というものがあり、pythonにもライブラリーが提供されています。
- 1 タネとなるデータを抽出する。
- 2 タネとなるデータの近傍にあるデータを探索する。(探索対象数は事前設定要)
- k近傍使う
- 3 タネと探索したデータの間でランダムにデータを生成する。
- -> GANSの方が良い?
- オーバーサンプリングの問題は、少数派データからランダムサンプリングすることにより、過学習を起こす可能性が高くなります。
- 3 コスト関数のカスタマイズ
- 1 アンダーサンプリング
- データの欠損が起こった時にどうするか
- 平均値置換、中央値置換、行削除、機械学習で推定値補完、トレーニングデータ追加
- sklearnのデフォルトは平均(mean)
- 問題: A Machine Learning Engineer is preparing a data frame for a supervised learning task with the Amazon SageMaker Linear Learner algorithm. The ML Engineer notices the target label classes are highly imbalanced and multiple feature columns contain missing values. The proportion of missing values across the entire data frame is less than 5%.What should the ML Engineer do to minimize bias due to missing values?
- For each feature, approximate the missing values using supervised learning based on other features.
- = データが欠損しているときは、平均とかではなく、予測した値で補う
- レビューのデータセットで、詳細が欠損しててサマリがあれば、詳細にサマリを転用して補う
- 空白値は0でも平均でもブール変数別途作ってもいい
- 平均値置換、中央値置換、行削除、機械学習で推定値補完、トレーニングデータ追加
- 過学習が起こった時にどうするか
- 外れ値がある時にどうするか
- 異常値があっても、説明つくならそのまま使う。削除はよくない。全体を正規化してもいいが、異常値だけ正規化はない。
- validでも除くこともある?
- 外れ値を考慮した推定は、ロバスト推定とかいいます。
- 最小二乗法は外れ値に引っ張られやすいという欠点があります。
- MinMaxScalerは外れ値があったときに影響大なので注意が必要です。
- 学習率を下げると、学習は遅くなるが、外れ値の悪影響を受けにくくなる
- 外れ値を確認するには、散布図や箱ひげ図を使う
- 異常値があっても、説明つくならそのまま使う。削除はよくない。全体を正規化してもいいが、異常値だけ正規化はない。
- 勾配爆発が起こった時にどうするか
- 勾配クリッピング
- 勾配の上限値を決めて、上限値以上になったら上限値で正規化する
- Label Encoding
- 最もシンプルな手法で、与えられたカテゴリ変数に数字を割り当てるもの。
- たとえば、「東京」、「大阪」、「名古屋」というカテゴリに対して、0、1、2といったようにラベルをふって単純に数値化するだけ。
- OneHotEncoder
- sklearn.preprocessing.OneHotEncoder
- drop‘first’ or a array-like of shape (n_features,), default=None
- 色情報(赤、青とか)を数字に変換するには?RGBはあり?
- 問題: during multiple runs with identical parameters, the loss function converges to different, yet stable, values. なとき、どうするか??
- = 学習率が大きくて振動して、globalな極小値までいけてない?(いくつか谷があって、それがだいたいおなじような深さ、とか)
- さらに精度を上げるためには、学習率を落として損失関数の谷底深くまで潜れるようにすることを考える
- ただし、学習率を落とすと局所解や鞍点にトラップされやすいので、SGDのstochasticな要素を強めるためにバッチサイズを小さくした方がよい。
- 問題: A Data Scientist uses logistic regression to build a fraud detection model. While the model accuracy is 99%, 90% of the fraud cases are not detected by the model.(偽造通貨)
- -> Decreasing the class probability threshold. However, it comes at the price of lowering precision.
- 問題: 手動なら97%分類できるが、トレーニングデータも検証データも正確度が90%
2. AWS SageMaker 25%
●SageMaker概要
- SageMaker パイプモード
- https://aws.amazon.com/jp/blogs/news/accelerate-model-training-using-faster-pipe-mode-on-amazon-sagemaker/
- データセットを学習コンテナにダウンロードするのではなく、トレーニングインスタンスにS3から直接ストリーミングする。その結果、学習の開始が早まり、必要なディスク容量も小さくて済む。また「通常のファイル読み込みよりもS3からのストリーミングの方が読み込みが早く」、「S3をソースにしているので実質無制限な量のデータを処理」できる。
- 大規模なデータを処理する時に使う。トレーニングプロセスを加速させるために。
- 小規模なデータの場合、すべてをメモリに読み込んで、繰り返し実行するほうが迅速かつ簡単になる可能性がある。(ので、使わない。)
- Apache Sparkとの連携
- Sparkのフレームワークを利用して、SageMakerとEMRクラスターを接続できる
- なぜSageMakerとSparkをセットで使うのか
- SageMakerを利用するとデータに対する前処理などはすべてノートブックインスタンス上で行うことになります(※ 現在はパイプライン機能もあるためこの限りではありません)。ノートブックインスタンスは高性能なものを選択することも可能ですが、単一インスタンで動くことになります。 SageMakerでは学習処理がスケール可能であることからもわかる通り、機械学習を行う際には分散処理が不可欠となる大規模なデータを扱う必要がある場面が多くあります。
- データに対する前処理はEMR上のSparkを使って分散処理させる
- 前処理済みのデータをSageMakerで学習させる
- -> SageMaker-Spark SDKはそれらの間で相互に連携する仕組みを持っています。
- SageMakerを利用するとデータに対する前処理などはすべてノートブックインスタンス上で行うことになります(※ 現在はパイプライン機能もあるためこの限りではありません)。ノートブックインスタンスは高性能なものを選択することも可能ですが、単一インスタンで動くことになります。 SageMakerでは学習処理がスケール可能であることからもわかる通り、機械学習を行う際には分散処理が不可欠となる大規模なデータを扱う必要がある場面が多くあります。
- 実装例(1)
- Spark上でのDataFrameを使って各種前処理を行ったのち、SageMakerのEstimatorを作成しています。 fit()関数呼出し後は実際に処理が動く部分がSparkからSageMakerに移り、学習・モデル作成・エンドポイント作成といった処理が行われます。 その後はSpark側に戻り、transform()関数を使ってSageMakerによって作成されたエンドポイントを使って推論を行うという流れになります。
- -> この一連の流れはSparkの機能であるML Pipelineとして全体を定義してやることも可能です。
- 実装例(2)
- ※Livyをざっくり要約すると、Sparkの処理をRESTサーバ経由(API)でリクエストできるソフトウェアになります。
- 1 Amazon SageMaker を使用し、Jupyter の Sparkmagic ノートブックを起動させます。ノートブック内で、コマンドをローカルで実行するか、Amazon EMR クラスタで動作する Spark にコマンドを送信します。PySpark コマンドが使用でき、SQL magic で HiveQL コマンドを実行することもできます。
- 2 EMR クラスタに向けて送信されたコマンドが、同クラスタ上で動作する Livy サービスで受信されます。
- 3 Livy は、EMR クラスタで動作している Spark にコマンドを受け渡します。
- 4 Spark は、Hive メタストアにアクセスし、カタログ化されたデータセットのロケーション、スキーマ、プロパティを特定します。今回のケースでは、Hive メタストアは AWS Glue データカタログに設定されています。
- 5 Spark は Glue データカタログの情報を使用し、Amazon S3 のデータを直接読み込みます。
- 6 操作の実行後、Livy はさらなる解析と視覚化のために、データを Pandas のデータフレームとしてノートブックに戻します。
- Amazon SageMaker には Python 形式と Scala 形式の両方の Apache Spark ライブラリが用意されており、Spark のクラスターで org.apache.spark.sql.DataFrame データフレームを使用して、Amazon SageMaker でモデルのトレーニングを簡単に行うことができます。モデルのトレーニングを行った後に、Amazon SageMaker ホスティングサービスを使用してモデルをホストすることもできます。
- トレーニング
- model tracking capability
- チームで大規模な実験を実施するときに役に立つ
- アルゴリズムやハイパーパラメータを紐づけて管理できる
- モデルの安全性を確保
- 顧客が所有するKMSキー(Key Management Service)をSageMakerの各サービスに渡して、暗号化する必要がある
- バッチ変換
- 自動 A/B テスト
- モデルデプロイ
- 推論パイプラインのデプロイ
- 前処理」、「推論」、「後処理」等の処理を一連の流れとして実行できるようにしておく必要があるのですが、このように「複数の処理を指定した順番で一連の流れで処理させる」機能をSageMakerでは「推論パイプライン」として実装できます。
- 「機械学習に付随するリソース以外」の修正範囲をできるだけ小さくしておけるように設計しておくことは、マイクロサービス化を考える上では重要
- パイプラインの一部分のみを変更することはできないため、変更するならパイプライン全体をアップデートする必要がある
- パイプラインモデルをデプロイすると、Amazon SageMaker はエンドポイントまたは変換ジョブの各 Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにすべてのコンテナをインストールし、実行します。機能の処理と推測は低レイテンシーで実行されます。これは、コンテナが同じ EC2 インスタンスに配置されているためです。
- 「推論パイプライン」は2〜5個のコンテナを、1つの推論エンドポイントにデプロイし、指定した順番で処理をしてくれる機能
- マルチモデルエンドポイント
- マルチモデルエンドポイントにホスティングされたモデルの推論リクエストがあると、まずS3からモデルがエンドポイントインスタンスにダウンロードされます。ダウンロードされたモデルをメモリに読み込み、リクエストデータを推論し、推論結果をリクエスト元に返します。モデルが既にメモリに読み込まれている場合はS3からダウンロードせず、そのままメモリ上のモデルを使用します。既に読み込まれているモデルとは異なるモデルに対して推論リクエストがあり、メモリに新たにモデルを読み込む余裕がない場合は、メモリに読み込まれたモデルを解放し、必要なモデルをS3からダウンロードしてメモリに読み込みます。
- -> 切り替えに時間かかる?
- -> マルチモデルエンドポイントは複数のモデルへの推論リクエストのタイミングが異なっていたり、ある程度レイテンシがあっても許容される環境やシステムに適しています。 逆にレイテンシを最小限にする必要がある場合にはマルチモデルエンドポイントは向いてないため、通常通り1エンドポイントにつき1モデルをホスティングする方が適しています。
- ハイパーパラメータチューニング
- 自動モデル調整機能
- トレーニングデータの品質が高く量が多いなら、この機能で最も高性能なパラメータ値を取得するようにする
- アルゴリズム
- ランダム検索の主な利点は、すべてのジョブを並行して実行できることです。
- 対照的に、デフォルトのチューニング手法であるベイズ最適化は、チューニングジョブの進行につれて過去のトレーニングから学習する順序アルゴリズムです。これにより、並列処理のレベルが大幅に制限されます。
- ランダム検索の欠点は、匹敵するモデル品質に到達するために、一般的にかなり多くのトレーニングジョブを実行する必要があることです。
- ベイズ最適化でサポートされているよりも高度の並列処理が必要な場合は、ランダム検索を使用できます。
- ただし、ほとんどの場合、デフォルトのベイズ最適化戦略を使用する方がより費用対効果が高いことに注意してください。
- 設定
- 監視
- ノートブックインスタンスへのアクセス制御
- ノートブックインスタンスにアクセスする場合、CreatePresignedNotebookInstanceUrl が呼ばれノートブックへのアクセス用のURLが発行されます。動作としては、マネージメントコンソールからノートブックにアクセスするリンクをクリックした時にコールされます。そのため、マネージメントコンソールにログインしているIAMユーザー(またはIAMグループ、IAMロール)のIAMポリシーに制限を追加します。
- 特定タグがついてるノートブックへアクセスできるようにしてみます
- Grount Truth
- ラベル付け
- 自動でしてくれたり、手動でするのを補助してくれたり
- 難しいのをまず人が->すでにラベル付けされたものと人がラベル付けしたデータでモデルを学習->全てのデータがラベル付けされるまで繰り返す
- ホスティングサービスでの独自の推論コードの使用
- コンテナにはポート 8080 の /invocations と /ping に応答するウェブサーバーを実装する必要があります。
- Amazon SageMaker はすべての POST ヘッダー (ただし、InvokeEndpoint でサポートされているものを除く) を削除します。Amazon SageMaker はヘッダーを追加することがあります。推論コンテナはこれらの追加ヘッダーを安全に無視できる必要があります。
- 顧客のモデルコンテナは、60 秒以内にリクエストに応答する必要があります。モデル自体は、呼び出しに応答するまで 60 秒の最大処理時間をかけることができます。モデルの処理時間が 50 ~ 60 秒かかる場合は、SDK ソケットタイムアウトを 70 秒に設定する必要があります。
●SageMaker組み込みアルゴリズム
- Object2Vec
- 文全体をベクトル化して扱う
- ⇔Word2Vecは単語
- BlazingText
- BlazingTextは単語ベクトルを生成する手法であるWord2Vecの実装です。 単語ベクトルは名前の通り、単語をベクトルで表現したものです。似た意味の単語同士であれば、似た値の単語ベクトルになるようになっています。
- 要するにWord2Vec
- モデルから作成した単語ベクトルによって計算した単語同士のコサイン類似度を計算して、単語同士を類似度によって順位付けします。その単語ペアの類似度ランキングがWordSim353のデータに含まれる類似度ランキングとどれだけ近いかをスピアマンの順位相関係数を用いて評価したものが、モデルデータのeval.jsonに含まれています。
- spearmans_rho(スピアマンの順位相関係数)が1に近いほど良いモデルと言えます。
- 線形学習アルゴリズム
- 分類に使いたいなら、binary_lassifierを指定
- Amazon SageMaker RL
- DeepAR
- RNNを使った時系列予測の手法。RNNでは系列データを扱うことが可能ですので、それを文字列の並びではなく時間の並びに対してのモデル作成に利用するのがDeepAR
- 電力消費量の時系列データを扱ったり
- 重要!
- Factorization Machines
- Factorization Machinesはレコメンドシステムでよく利用されるアルゴリズムです。 レコメンドシステムはよく、「あるユーザAと購入傾向を持つ別なユーザBにユーザAが買った商品をオススメする」や「ある商品Xと商品Yを購入する人の傾向が似ているから商品Aを買った人に商品Bをオススメする」など、ユーザベースだったりアイテムベースだったりといった説明で解説されます。
- ユーザや商品などの他に例えば購入した時間帯だったりとさらに他の要素を加えることができます。 これら様々な要素を"交互作用"として取り入れることが可能な仕組みとなっているので、複数の要素間の組み合わせによる影響を加味したモデルを作成できます。
3. Other AWS Services 25%
●AIサービス
- Rekognition
- Polly
- 文章をリアルな音声に変換するサービス
- Transcribe
- 音声をテキストに変換する
- Amazon Transcribeがリアルタイム文字起こしに対応しました。従来は非同期な文字起こししかできませんでしたが、今後は音声入力アプリのようにインタラクティブな文字入力ができるようになります。
- S3においた音声データを、Transcribeジョブで文字起こしし、その出力データをComprehendにかけることによって、会話の中で話されているトピックを見つけることができる
- Amazon Transcribe と Amazon Elasticsearch を統合することにより、音声ライブラリや動画ライブラリに対してインデックスを作成し、テキストベースの検索を実行することもできます。
- 設定例
- Name: TEST(とりあえず)
- Lumguagw: Japanese (Japan)
- Input file location on S3: S3のファイルを指定
- Format - optional: mp3
- Audio sampling rate (Hz) - optional : 48000
- Lex
- Amazon Lex を使うと、すべての開発者が Amazon Alexa に採用されている深層学習技術と同じ技術を利用できるため、自然言語での高度な対話ボット (チャットボット) を短時間で簡単に構築できます。
- Lexでどこまでできるか?他のサービスの組み合わせとの違い
- Translate
- 翻訳はaws translate translate-textコマンドを実行するだけです。
- --textオプションに訳す文を入力して、--source-language-codeオプションに元の言語、--target-language-codeオプションに訳す言語を設定するだけです。
- 翻訳はaws translate translate-textコマンドを実行するだけです。
- Comprehend
- 機械学習を利用した自然言語処理(NLP)サービス。指定したテキストを分析し、キーフレーズの検出や感情の判定などを行うことができる。
- 「Entities」では、単語や文章の集合から属するエンティティタイプ(以下参照)及びその信頼度が判定されます
- 「Key phrases」では、テキスト内の重要なフレーズを抽出することができます。
- 「Language」では、テキストの主要言語を判定することができます。
- 「Sentiment」では、テキストの感情を判定することができます。 以下の4種類の感情をスコアリングして返します。
- Positive
- Negative
- Mixed
- Neutral
- 「Syntax」では、テキストの構文解析を行うことができますが、残念ながら現時点で日本語は未対応です。
- 機械学習を利用した自然言語処理(NLP)サービス。指定したテキストを分析し、キーフレーズの検出や感情の判定などを行うことができる。
●その他のサービス
- S3
- Athena
- インタラクティブなクエリサービスで、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できます。Athena はサーバーレスなので、インフラストラクチャの管理は不要です。実行したクエリに対してのみ料金が発生します。
ANSI SLQ に準拠した Presto が使われており、CSV、JSON、ORC、Parquet などのさまざまな標準データフォーマットに対応し、機能します。
- (参考)Hive
- Presto
- Facebookが公開した新しい分散処理基盤
- PrestoはHiveやImpalaと同じ「SQL Query Engine」であり,特に数百GBを超える大規模データに対してもインタラクティブなレスポンスを(コンマ0秒以下,遅くても2,3秒)返すという点では Hive と異なり,Impala に近いものがあります。
- Hiveの課題で、Prestoが解決したこと
- ダッシュボードやBIなどのフロントエンドから直接HDFSからデータを取得して(インタラクティブに)可視化するのが難しかった。
- ↑ なぜならHiveはバッチ処理を目的としていたので数秒で結果を返すことができないから。
- ODBCとの接続性が不安定であった。
- -> 大規模データセットに対してもインタラクティブなレスポンスを返すことでデータマートを立てなくても良くなったこと,さらにODBC/JDBCの接続性が良く,BIなどからも簡単に繋げるようになったこと。これによって、Hiveは定時的に高負荷の集計を回すバッチエンジンとして,Prestoは高速レスポンスによってフロントエンドとインタラクティブに繋がるエンジンとして明確な役割分担を行えるようになりました。
パフォーマンスをどうだすか
- Kinesis
- [AWS]kinesisまとめ
- 大規模なストリーミングデータをリアルタイムで処理する完全マネージド型サービス
- データの転送および加工
- SQSとの違い
- 大きく分けて3つの機能
- 1 Amazon Kinesis Data Streams
- 処理フロー
- 登場人物
- コマンド例
- Amazon Kinesis Data Streams作成
aws kinesis create-stream --stream-name myKinesis --shard-count 1
- 用途単位でStreamを作成し、Streamを1つ以上のシャードで構成される
- シャードにデータを送信
aws kinesis put-record --stream-name myKinesis --partition-key 1 --data test1
- パーティションキーによってシャードに分配される
- Data, ExplicitData, ExplicitHashKey,
- シャードからデータを取得
aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name myKinesis
- ->
aws kinesis get-records --shard-iterator <上記で取得したイテレータ>
- Amazon Kinesis Data Streams作成
- ユースケース
- 2 Amazon Kinesis Data Firehose
- 1 と同じく、コンピュータから送られてくるログやイベントデータ等の大量のデータを高速に別のサービスに転送するためのサービス。
- 一言で言うなら Amazon Kinesis Data Streamsのほうが速い。 Amazon Kinesis Data Firehoseのほうが設定が少なくて実装が楽。
- ユースケース
- 3 Amazon Kinesis Data Analytics
- 1 Amazon Kinesis Data Streams
- EMR
- Amazon EMR は、AWS でビッグデータフレームワーク (Apache Hadoop や Apache Spark など) の実行を簡素化して、大量のデータを処理および分析するマネージド型クラスタープラットフォームです。これらのフレームワークと関連するオープンソースプロジェクト (Apache Hive や Apache Pig など) を使用することで、分析用のデータやビジネスインテリジェンスワークロードを処理できます。さらに、Amazon EMR を使用して大量のデータを変換し、Amazon Simple Storage Service (Amazon S3) や Amazon DynamoDB などの他の AWS データストアおよびデータベースとの間で移動することもできます。
- Apache Sparkとは
- Apache Sparkとは何か――使い方や基礎知識を徹底解説
- Apache Sparkは巨大なデータに対して高速に分散処理を行うオープンソースのフレームワークです。JavaやScala、Pythonなどいろいろなプログラミング言語のAPIが用意されています。
- Hadoopとの比較
- 分散処理のフレームワークといえば、Hadoopが有名です。
- Hadoopは需要のあるツールでどんどん活用の場が増えてきましたが、そんなHadoopにも欠点があることがだんだん分かってきました。その欠点を補う形で登場したのがSparkです。
- 個々のコンピュータのメモリをうまく活用する設計ではなかった
- 同じ処理を複数行う場合に、都度ストレージのアクセスが発生する
- 同じデータを何回も扱う場合にストレージのアクセスが発生する
- Sparkはそのような課題を解決するために生まれました。「Resilient Distributed Datasets」という分散共有メモリの仕組みがあり、データはパーティション化され、複数マシンのメモリで管理されます。今まで、都度ストレージにアクセスしていたのが、インメモリで実行できるようになったわけです。
- -> 上記を実現するのがResilient Distributed Datasets(RDDs)
- 実運用
AWS Glue
- 概要
- AWS再入門ブログリレー AWS Glue編
- AWS GlueはフルマネージドなETL(抽出、変換、ロード)サービスです。
- S3やRDS、Redshift等の各種AWSサービスとの連携を管理してくれるので、利用者は本来取り組むべき作業である、ETLジョブの作成や監視といった部分に注力出来るようになります。各種AWSサービスの間を繋ぐ「糊(Glue)」として処理を構成・実行する形となります。
- 処理フロー
- データソースをクロールし、データカタログにメタデータテーブルを作成
- データカタログの情報を元にジョブを定義
- ジョブ定義に基づいてETLの雛形コードが自動生成
- ジョブ実行で、データソースからデータを抽出し、変換してデータターゲットにロード
- 登場人物
- ユースケース
- FindMatches変換
- 「完全に一致していなかったり主キーが無かったりするデータに対しても、内容としては同じようなレコード」を識別する
- 一致する顧客: 多くの顧客フィールドがデータベース間で正確に一致しない場合でも(名前のスペルや住所の違い、データの欠落や不正確ななど)、異なる顧客データベース間で顧客レコードをリンクします。
- 製品のマッチング: カタログ内の製品を、競合他社のカタログに対する製品カタログなど、他の製品ソースと照合します。エントリの構造は異なります。
- 不正検出の向上: 重複した顧客アカウントを特定し、新しく作成したアカウントが、以前に知られている不正ユーザーと一致する(またはその可能性のある)タイミングを判断します。
- recallを高く(取りこぼさないように)
- マッチングに関するその他の問題: マッチアドレス、映画、パーツリストなど。一般的に、人間がデータベース行を見て、それらが一致していると判断した場合、FindMatches 変換が役に立つ可能性は非常にあります。
- UTF-8 without BOM
- 「完全に一致していなかったり主キーが無かったりするデータに対しても、内容としては同じようなレコード」を識別する
- DynamicFrame クラス
- 概要
- AWS Lake Formation
- AWS Lake Formationの概要を図と用語で整理する
- AWSでデータレイクを構築・運用するためのマネージドサービス
- 実体は、ほぼAWSの各種サービスをラップしたもの(Glue, IAM, S3, etc..)
- 実データも保持しセキュリティ向上と権限管理が簡単に行えるAWS Glueという印象
- IAMやGlueを個別に駆使してデータレイクを構築・運用するよりデータレイクに特化していて扱いやすい
- QuickSight
- さまざまなサービスからどうデータをインプットするか
- AWS IoT
- 2つの利用用途
- データ収集
- リモート制御
- ユースケース
- IoT Core -> IoT Analytics -> SageMaker -> QuickSight
- IoT Core: データ収集
- IoT Analytics: 外部データソースでストリーミングデータを強化し、ストリーミングデータを送信する
- IoT Core -> IoT Analytics -> IoT Greengrass
- Greengrassに学習済モデルをデプロイできる
- Sensors -> (MQTT) -> IoT Core -> Kinesis Data Streams -> Lambda(前処理として、推論用にフォーマットを変換) -> SageMaker Endpoint
データの水増し、parquet,proto buff変換はどこでやるべきか。(Glue?)
- IoT Core -> IoT Analytics -> SageMaker -> QuickSight
- 2つの利用用途
- IoT Greengrass