nokoのブログ

こちらは暫定のメモ置き場ですので悪しからず

AWSCertifiedMachineLearning–Specialty取得に向けて勉強したこと

はじめに

AWS Certified Machine Learning – Specialty取得に向けて勉強したことのメモです。

参考

やったことサマリ

メモ

1. Machine Learning / Deep Learning 50%

●基本的な概念

  • データ分布
    • 正規分布
      • 平均値と最頻値と中央値が一致する。
      • 平均値を中心にして左右対称である。(直線x=μに関して対称)
      • x軸が漸近線である。
      • 分散(標準偏差)が大きくなると、曲線の山は低くなり、左右に広がって平らになる。分散(標準偏差)が小さくなると、山は高くなり、よりとんがった形になる。
  • グラフの種類
    • 棒グラフ:棒の高さで、量の大小を比較する。
    • 折れ線グラフ:量が増えているか減っているか、変化の方向をみる。
    • 円グラフ:全体の中での構成比をみる。
    • 帯グラフ:構成比を比較する。
    • ヒストグラム:データの散らばり具合をみる。
    • レーダーチャート:複数の指標をまとめてみる。
    • 散布図:2種類のデータの相関をみる。
      • 3軸はbubble chart
      • pairs plot: 散布図行列。複数の特徴量。
    • 箱ひげ図:データの散らばり具合をみる。box plot
  • 評価軸
    • Net Promoter Score
      • 「あなたは○○の製品(サービス)を友人に薦めますか?」と聞いて0から10の間で答えてもらい、その数値によって3つのグループに分けるというもの。

●主なアルゴリズム

  • -> 回帰か分類か、次元削減かクラスタリング
  • 線形回帰
    • 回帰分析: たくさんの変数を持つ集まり (= ベクトル) についてある関数にノイズが加わったような状態が事例として観測されました。このときその関数を予測
    • 単回帰分析: 回帰分析のうち、単回帰分析というのは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の範囲に収まる
    • 詳しく。関数とか。
  • サポートベクターマシン
    • 「本当に予測に必要となる一部のデータ」のことをサポートベクトルと呼び、サポートベクトルを用いた機械学習法がサポートベクトルマシン(Sapport vector machine:SVM
    • SVMでは、正しい分類基準を見つけるために、「マージン最大化」という考えを使います。マージンとは、「判別する境界とデータとの距離」を指します。これが大きければ、「ほんの少しデータが変わっただけで誤判定してしまう」というミスをなくすことができます。なお、境界線と最も近くにあるデータを「サポートベクトル」と呼びます。
  • ナイーブベイズ
    • 分類
    • ベイズの定理
      • (事象𝐴、𝐵が同時に起きる確率)=(事象𝐴が起き、かつ事象𝐵が起きる確率) =(事象𝐵が起き、かつ事象𝐴が起きる確率)
      • 𝑃(𝐴,𝐵)=𝑃(𝐵|𝐴)∗𝑃(𝐴)=𝑃(𝐴|𝐵)∗𝑃(𝐵)
      • P(A),P(B)を事前確率、P(A|B)、P(B|A)を事後確率と呼んでいます。 「ベイズの定理」では「事前確率をどう設定するか」、という点が計算結果に大きく影響を及ぼす上に、複雑で難しい
    • 学習が高速、かつ実装が容易
    • 事前分布をどう決定すべきか
  • 決定木
    • 分類木と回帰木の総称して決定木
    • 構築のために学習データが全てルートノードに集められます。そこで、そのデータの持つ素性の中で集められたデータを一番よく分割する素性と閾値の組を選びます。その素性と閾値で分割後、またそれぞれのノードで分割を繰り返し行っていきます。
    • 「一番よく分割する素性と閾値の組を選ぶ」 = 「ノード内の不純度を最大限減らす素性と閾値の組を選ぶ」
    • 木系で、過学習対策はどうする?
  • ランダムフォレスト
    • 決定木を複数個構築し、その結果をアンサンブルする
    • 過学習に強い
  • ランダムカットフォレスト
    • 端的に言うと、「異常検知に利用される」、「教師なし学習」、「決定木ベースのアンサンブル学習」です。
    • アルゴリズムでは「異常データは、それ以外の普通のデータポイントと比較して簡単に分類できる。」ということを前提においています。
      • アルゴリズムの流れ
        • 1 データをサンプリングする
        • 2 決定木をいっぱい作成する
        • 3 作成した決定木における「深さの平均」をデータポイントごとに計算することで、「各データポイントの異常度スコア」を求める
        • 4 設定した閾値と比較して異常データか判断する
      • -> より異常なデータは簡単に分類されるため、「深さの平均」が小さい値を示す一方、普通のデータは「その他のデータと分類するのが難しいため、深さの平均が大きくなる」ので、上記のように判断できる。
  • XGBoost
    • GBMの実用的な実装
    • XGBoostやパラメータチューニングの仕方に関する調査
    • ランダムフォレストは決定木を複数個構築し、その結果をアンサンブルしますが、それに対してXGBoostは弱学習器を構築する際に前に構築された弱学習器の結果を使用し弱学習器を構築する。前に構築された学習器によって正しく分類されたデータに対して重みを小さくし、正しく分類されなかったデータに対して重みを大きくした学習器を作ります。これにより、新しく構築された学習器ほど誤ったデータに集中して学習することができます。
    • ハイパーパラメータ(全体)
      • booster [デフォルト = gbtree]
        • gbtreeもしくはdartを選択するとツリーモデル、gblinearを選択すると線形モデルとなります。
          • XGBoostは、正確に言うと勾配ブースティングであり、勾配ブースティング木ではないです。
    • ハイパーパラメータ(ブースターパラメータ)
      • num_round[必須]
      • num_class[必須]
        • クラスの数。
      • alpha [デフォルト = 0]
        • 決定木の葉の重みに関するL1正則化項を意味します。
        • 値を大きくすることで過学習を防止します。
    • 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となる。
    • 学習
      • csvにheaderはいらないが、target valueはいる
      • CPUで良い
    • 推論
      • csvにlabel columnはない
  • k平均法クラスタリング(K-means)
    • 手法
      • 1 ランダムに点をばら撒く。ランダムにグループ分け。
      • 2 各グループの中心を求める。
      • 3 一番近いグループの中心に基づいて再度グループ分けし直す。
      • 4 1~3を変化がなくなるまで繰り返す。
    • パラメータ
      • eval_metrics: モデルのスコアを報告するために使用されるメトリクスタイプの JSON リスト
        • 平均二乗誤差の場合は msd、平方距離の合計の場合は ssd
    • ユースケース
  • k近傍法(k-nearest neighbor)
    • k平均法クラスタリング(K-means)との違い
      • k近傍法とは教師あり(付き)学習の分類問題とみなすことができます。そしてk平均法はクラスタリングという手法であり、教師なし学習の分類問題とみなします。
    • クラス判別用の手法。学習データをベクトル空間上にプロットしておき、未知のデータが得られたら、そこから距離が近い順に任意のK個を取得し、多数決でデータが属するクラスを推定する。
      • 類似のアイテムを検索したり
  • 畳み込みニューラルネットワーク(CNN)
    • CNNは、関連するフィルタを適用することで、画像内の空間的および時間的な依存関係を正常に取得できます。つまり、縦横の情報がある2次元のまま、入力データとして扱うことことが可能
    • マルチラベル分類もできる
    • 平坦層のドロップアウト
    • 転移学習のときに、最後の層だけ分ける?どこを初期化?
  • 回帰型ニューラルネットワーク(RNN)
    • 今度こそわかるぞRNN, LSTM編
    • 再帰ニューラルネットワーク」と呼ばれ、数値の時系列データなどのシーケンスデータのパターンを認識するように設計されたニューラルネットワークのモデルです。
    • 過去の情報を記憶しておき、その情報にしたがって新しい事象を処理することができる。
    • 応用先
      • 感情分析
      • 文章生成
      • 機械翻訳(seq2seq)
      • 画像のキャプショニング
    • Seq2Seq
      • Seq2Seqとは、あるシーケンス(たとえば英語の文章)を受け取り、別のシーケンス(たとえば日本語の文章)に変換するモデルです。
      • Seq2Seqは、翻訳以外にも以下のようなタスクで活用することができます。
        • 文章の要約(長文の文章を要約する)
        • 対話の生成(ある対話文章に対する応答を自動的に生成する)
          • コールセンターなど
  • PCA
    • 特徴量の項目数を少なくする処理
    • 重みを付けたうえで多数のフィーチャーを統合し、少数の新たなフィーチャーを作り出す
    • 集団を最もよく表現するベクトル上にデータを射影するすることで、フィーチャーを統合し、新しい指標としています。

●ML/DLモデルのパフォーマンスを測定、理解、改善

測定

  • 交差検証(クロスバリデーションテスト)

    • k-holdに分けて学習、validationして、平均して、それで決めたハイパーパラメータで、全部で学習させる
      • 最初にトレーニングとバリデーション分けて、トレーニングを分割する。(テストは、kaggleとかだと答え知らないし。)
    • k-holdに分けた全てが同じようなerror rateだったら、test dataをrandomizeできているということ
  • 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
      • FP / (TN + FN)
      • 精度の裏返し
      • アラートを出してはいけない事例のうち、アラートを出してしまった事例の割合
      • 偽陽性率と偽陰性率を比較するとき
    • ジニ係数
      • 不均衡データセットに対して、堅牢的な指標
      • コンペの指標になったりする
    • AUC
      • 「Aさんは閾値もちゃんと調整するべきだった。やはり指標は正解数でよい」という考え方もあるかもしれませんが、実用的にはモデルのこのような閾値は後から調整することもあるかもしれませんし、「閾値で揺れ動いてしまう正解数よりは、閾値で0か1かに丸めてしまう前の、各データに付けたスパムらしさのスコアのよさを評価したい」ということもあると思います。それを評価できるのが ROC 曲線の AUC です。
      • 「このコンテストでは ROC 曲線の AUC で評価します」というときは、そういうテストデータ内のスパムらしさの大小を正しく推測することを期待されているということです。
    • Precision-recall curves
      • データが不均衡でnegativeデータが多いときに有効
    • Cost
      • business perspective次第で適宜設定
      • 5 * FP + FN とか。
    • 無駄なDMを減らす(買わない人に送らないようにする)
      • -> FPを減らすようにする
    • 問題: 不均衡データのときは?
      • 不均衡データに関する分類問題は、recall(再現率。実際に正であるもののうち、正であると予測されたものの割合。)と precision (適合率。正と予測したデータのうち、実際に正であるものの割合。)との間のトレードオフに帰着します。少数派のクラスのインスタンスを検出したいという状況では、たいていの場合適合率よりも再現率を強く考慮します。なぜなら、検出という文脈では、負例に誤ったラベルを付けるよりも、正例を見逃す方がコストがかかるからです。例えば、不適切なコンテンツを検出しようとしている場合、不適切だと判断されたコンテンツが実際は不適切ではなかったということに手動のレビュワーが気付くというのは瑣末な問題ですが、不適切であるというフラグが立てられていないにもかかわらず実際は不適切だったコンテンツを特定するのは非常に難しいです。したがって、不均衡データの分類問題に取り組むときは、再現率、適合率、AUROCなどの、精度よりも適した評価指標の使用を検討してください。パラメータまたはモデルを選択するときに最適化する指標を切り替えることは、少数派クラスを検出する際のパフォーマンスの向上に大きく寄与するでしょう。
  • 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 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グラム
  • 次元削減を行う目的は主に以下の二つです。
    • データの圧縮
    • データの可視化
  • トレンドとシーズン

改善

  • 用語
    • mini-batch
      • n=1の時、有名な Stochastic Gradient Descent になる
      • 幾つかのサブセットに分けて学習する理由は、学習する際に異常値の影響を小さくするため
      • マルチGPUのとき
        • 1 つの GPU のトレーニングから複数の GPU のトレーニングに移行する場合、GPU の数を乗じて GPU あたりのミニバッチサイズを一定に保つことで、ミニバッチサイズを増やすことが発見を助けます。たとえば、128 のミニバッチサイズで 1 つの GPU を完全に使用する場合、4 つの GPU を使用するとき、ミニバッチサイズ 512 に増やす必要があります。
        • -> しかし、大きなミニバッチは、確率がより低い勾配をもたらし、最適化は極小または鞍点に詰まる可能性があります。
    • iteration
      • イテレーション数はデータセットに含まれるデータが少なくとも1回は学習に用いられるのに必要な学習回数であり、バッチサイズが決まれば自動的に決まる数値です。
      • 1,000件のデータセットを200件ずつのサブセットに分ける場合では、イテレーション数は5 (=1,000/200)となります。
      • = つまり、学習を5回繰り返す(イテレートする)ということです。
      • バッチサイズ×イテレーション数=データセットサイズ
    • epoch
      • 2000個の学習データについて、バッチサイズ500個でミニバッチ学習する場合、(勾配降下法などによる)重み更新を4イテレーション繰り返すと1エポック。
      • 損失関数(コスト関数)の値がほぼ収束するまで繰り返す
  • データの不均衡が起こった時にどうするか
    • 1 アンダーサンプリング
      • 少数派のデータ件数に合うように多数派データからランダムに抽出する
      • 多数派のデータを対象にクラスター分析を行い、特徴量が類似するデータ同士で群を作成します。そしてこの群単位にランダムにデータを抽出すれば、特徴量の分布を維持できることになります。
      • アンダーサンプリングの問題は、多数派クラスからランダムデータを削除することにより、重要な情報が失われる可能性があります。
    • 2 オーバーサンプリング
      • 少数派のデータをもとに不足分のデータを補完する方法
      • 新しいデータを生成するシンプルな方法は、数値データであれば少数派の平均と分散を使ってランダムに生成することやカテゴリーデータであれば、構成比をウェイトにnumpyのrandom.choiceを用いるというものが考えられます。この方法は、特徴量間の相関が考慮できません。
      • -> こうした問題などを考慮した方法としてSMOTE(synthetic minority over-sampling)というものがあり、pythonにもライブラリーが提供されています。
        • 1 タネとなるデータを抽出する。
        • 2 タネとなるデータの近傍にあるデータを探索する。(探索対象数は事前設定要)
          • k近傍使う
        • 3 タネと探索したデータの間でランダムにデータを生成する。
          • -> GANSの方が良い?
      • オーバーサンプリングの問題は、少数派データからランダムサンプリングすることにより、過学習を起こす可能性が高くなります。
    • 3 コスト関数のカスタマイズ
  • データの欠損が起こった時にどうするか
    • 平均値置換、中央値置換、行削除、機械学習で推定値補完、トレーニングデータ追加
      • 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でも平均でもブール変数別途作ってもいい
  • 過学習が起こった時にどうするか
    • 1 学習データの数を増やす。
    • 2 モデルを簡単なものに変更する、又は、ドロップアウトする。
    • 3 正則化する。
      • パラメータが小さいモデルをより評価するようにする(損失関数にL1/L2正則化項を加える。極端に値が大きいパラメータを罰する)
      • L2正則化がモデルの過学習を避けるために用いられる一方、L1正則化は不要な説明変数をそぎ落とす次元圧縮のために用いられます。
  • 外れ値がある時にどうするか
    • 異常値があっても、説明つくならそのまま使う。削除はよくない。全体を正規化してもいいが、異常値だけ正規化はない。
      • 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はそれらの間で相互に連携する仕組みを持っています。
    • 実装例(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 ホスティングサービスを使用してモデルをホストすることもできます。
  • レーニン
    • SageMaker では、CSV ファイルにヘッダーレコードが含まれていないこと、およびターゲット変数が最初の列にあることが必要です。
    • ターゲットが設定されていない教師なし学習アルゴリズムを実行するには、コンテンツタイプでラベル列の数を指定します。たとえば、この場合は 'text/csv;label_size=0' と指定します。
    • application/x-recordio-protobuf もあり
      • RecordIO レコードにラップされた protobuf メッセージ。
      • その場合、Pipme modeにしてEBSから読み込ませるのが良い?
      • Protobufはなぜ良いスキーマ言語なのか
        • 簡単に言えば、シリアライゼーション形式としてJSONが良いのと同じ理由
        • 簡素で可読で、プログラミング言語から独立で、任意のデータを表現できるわけではないが十分に適用可能範囲が広い。
    • 可視化
      • Using Amazon SageMaker Python SDK APIs to visualize metrics
        • from sagemaker.analytics import TrainingJobAnalytics
      • モデルトレーニンスクリプトがログに書き込むメトリックに使用される正規表現パターンを指定
      • -> CloudWatchのメトリックとして確認できる
  • model tracking capability
    • チームで大規模な実験を実施するときに役に立つ
    • アルゴリズムやハイパーパラメータを紐づけて管理できる
  • モデルの安全性を確保
    • 顧客が所有するKMSキー(Key Management Service)をSageMakerの各サービスに渡して、暗号化する必要がある
  • バッチ変換
    • データセット全体の推論を取得するには、バッチ変換を使用します
    • バッチ変換は以下の場合に使用します。
      • データセット全体の推論を取得し、これらの推論のインデックス作成をしてリアルタイムで推論を提供する場合
      • 推論を取得するためにアプリケーション (ウェブやモバイルアプリなど) が呼び出すことができる永続的なエンドポイントが不要である場合
      • Amazon SageMaker がホストするエンドポイントによって提供される秒未満のレイテンシーが不要である場合
    • 予測に不要なidを外して予測をし、後からまた結合し直す、などがしやすい
  • 自動 A/B テスト
    • Amazon SageMaker はまたモデルの A/B テストも行えます。エンドポイントの設定で最大 5 つのモデルに渡ってトラフィックを分散し、各々が処理するインファレンスコールのパーセンテージを設定できます。
    • SagemakerのEndpoint構築はdeployメソッド実行するだけで可能ですが、SagemakerのEndpoint configを用いることで、deployではできない細かいな設定を記載することが可能です。
  • モデルデプロイ
    • 1 Amazon SageMaker でモデルを作成する
    • 2 HTTPS エンドポイントのエンドポイント構成を作成する
    • 3 HTTPS エンドポイントの作成
  • 推論パイプラインのデプロイ
    • 前処理」、「推論」、「後処理」等の処理を一連の流れとして実行できるようにしておく必要があるのですが、このように「複数の処理を指定した順番で一連の流れで処理させる」機能をSageMakerでは「推論パイプライン」として実装できます。
    • 機械学習に付随するリソース以外」の修正範囲をできるだけ小さくしておけるように設計しておくことは、マイクロサービス化を考える上では重要
      • パイプラインの一部分のみを変更することはできないため、変更するならパイプライン全体をアップデートする必要がある
    • パイプラインモデルをデプロイすると、Amazon SageMaker はエンドポイントまたは変換ジョブの各 Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにすべてのコンテナをインストールし、実行します。機能の処理と推測は低レイテンシーで実行されます。これは、コンテナが同じ EC2 インスタンスに配置されているためです。
    • 「推論パイプライン」は2〜5個のコンテナを、1つの推論エンドポイントにデプロイし、指定した順番で処理をしてくれる機能
  • マルチモデルエンドポイント
    • マルチモデルエンドポイントにホスティングされたモデルの推論リクエストがあると、まずS3からモデルがエンドポイントインスタンスにダウンロードされます。ダウンロードされたモデルをメモリに読み込み、リクエストデータを推論し、推論結果をリクエスト元に返します。モデルが既にメモリに読み込まれている場合はS3からダウンロードせず、そのままメモリ上のモデルを使用します。既に読み込まれているモデルとは異なるモデルに対して推論リクエストがあり、メモリに新たにモデルを読み込む余裕がない場合は、メモリに読み込まれたモデルを解放し、必要なモデルをS3からダウンロードしてメモリに読み込みます。
    • -> 切り替えに時間かかる?
    • -> マルチモデルエンドポイントは複数のモデルへの推論リクエストのタイミングが異なっていたり、ある程度レイテンシがあっても許容される環境やシステムに適しています。 逆にレイテンシを最小限にする必要がある場合にはマルチモデルエンドポイントは向いてないため、通常通り1エンドポイントにつき1モデルをホスティングする方が適しています。
  • ハイパーパラメータチューニング
    • 自動モデル調整機能
    • レーニングデータの品質が高く量が多いなら、この機能で最も高性能なパラメータ値を取得するようにする
    • アルゴリズム
      • ランダム検索の主な利点は、すべてのジョブを並行して実行できることです。
      • 対照的に、デフォルトのチューニング手法であるベイズ最適化は、チューニングジョブの進行につれて過去のトレーニングから学習する順序アルゴリズムです。これにより、並列処理のレベルが大幅に制限されます。
      • ランダム検索の欠点は、匹敵するモデル品質に到達するために、一般的にかなり多くのトレーニングジョブを実行する必要があることです。
      • ベイズ最適化でサポートされているよりも高度の並列処理が必要な場合は、ランダム検索を使用できます。
      • ただし、ほとんどの場合、デフォルトのベイズ最適化戦略を使用する方がより費用対効果が高いことに注意してください。
    • 設定
      • HyperParameterTuningConfigをjsonで書いてジョブに渡す
      • jsonにはパラメータのレンジを記載する
      • jsonにはチューニングの指標となるmetricも記載する
  • 監視
    • メトリックスの評価のために Amazon CloudWatch を集中化サービスとして使う利点は計り知れません。準リアルタイムでビジュアライゼーションを表示し、DL メトリックスの履歴レコードを保管し、メトリックスのイベントに対応するアラームおよび自動化アクションを作成し、すべての DL モデルのためのダッシュボードを構築して、カスタマイズすることができます。
      • 評価メトリックスを CloudWatch に送信するために Boto3 を使用する関数を実装
  • ノートブックインスタンスへのアクセス制御
    • ノートブックインスタンスにアクセスする場合、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
    • RL は、複雑で大きい問題の解決に適しています。たとえば、サプライチェーン管理、HVAC システム、工業ロボット、ゲーム人工知能、ダイアログシステム、自動運転車などです。RL モデルは、エージェントが実行する各アクションについて報酬や罰則を受ける継続的なプロセスによって学習するため、システムが、動的な環境で、不確実な状況のもと意思決定を行うようトレーニングすることができます。
  • DeepAR
    • RNNを使った時系列予測の手法。RNNでは系列データを扱うことが可能ですので、それを文字列の並びではなく時間の並びに対してのモデル作成に利用するのがDeepAR
    • 電力消費量の時系列データを扱ったり
    • 重要!
  • Factorization Machines
    • Factorization Machinesはレコメンドシステムでよく利用されるアルゴリズムです。 レコメンドシステムはよく、「あるユーザAと購入傾向を持つ別なユーザBにユーザAが買った商品をオススメする」や「ある商品Xと商品Yを購入する人の傾向が似ているから商品Aを買った人に商品Bをオススメする」など、ユーザベースだったりアイテムベースだったりといった説明で解説されます。
    • ユーザや商品などの他に例えば購入した時間帯だったりとさらに他の要素を加えることができます。 これら様々な要素を"交互作用"として取り入れることが可能な仕組みとなっているので、複数の要素間の組み合わせによる影響を加味したモデルを作成できます。

3. Other AWS Services 25%

●AIサービス

  • Rekognition
    • 画像や動画に「何がうつっているのか」を分析するサービス。動画分析はファイル分析とストリーミングビデオ分析が可能。
    • できること
      • 1 画像分析の機能
        • オブジェクト、シーンの検出
        • 物体("Palm Tree"など)、シーン("Tropical"、"Resort"など)、概念("Summer"など)
        • 顔検出
        • 顔の存在、顔の位置、大きさ、向き、髭やメガネ、推定(性別、年齢、感情)
        • 顔の認識(比較)
        • 画像内の不適切なコンテンツの識別
        • 有名人の認識
        • テキストの抽出
      • 2 動画分析の機能
        • オブジェクト、アクティビティの検出
        • モノだけなく「車から降りる」、「ジョギング」などのアクティビティも検出
        • 人物の追跡
        • 動線の追跡時点におけるビデオフレーム内の人物の位置
        • 検出時の顔のランドマーク
        • 動画内の不適切なコンテンツの識別
        • 有名人の認識
    • 動画をリアルタイムに解析したいときは
    • (顔の認識)IndexFaces オペレーションを使用して、イメージ内の顔を検出し、コレクションに追加できます。Amazon Rekognition は、検出した顔ごとに顔の特徴を抽出し、その特徴情報をデータベースに保存します。さらに、検出した顔ごとのメタデータを、指定された顔コレクションに保存します。Amazon 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オプションに訳す言語を設定するだけです。
  • Comprehend
    • 機械学習を利用した自然言語処理NLP)サービス。指定したテキストを分析し、キーフレーズの検出や感情の判定などを行うことができる。
      • 「Entities」では、単語や文章の集合から属するエンティティタイプ(以下参照)及びその信頼度が判定されます
      • 「Key phrases」では、テキスト内の重要なフレーズを抽出することができます。
      • 「Language」では、テキストの主要言語を判定することができます。
      • 「Sentiment」では、テキストの感情を判定することができます。 以下の4種類の感情をスコアリングして返します。
        • Positive
        • Negative
        • Mixed
        • Neutral
      • 「Syntax」では、テキストの構文解析を行うことができますが、残念ながら現時点で日本語は未対応です。

●その他のサービス

  • S3
    • データをどうセキュア化するか
    • AWS Key Management Service (SSE-KMS) に保存されている CMK でサーバー側の暗号化を使用してデータを保護する
      • SSE-KMS
        • AWSマネージド型キーまたは、カスタマー管理型のキーがありKMSでキーを管理
    • Data Pipeline?
  • Athena
    • インタラクティブなクエリサービスで、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できます。Athena はサーバーレスなので、インフラストラクチャの管理は不要です。実行したクエリに対してのみ料金が発生します。
    • ANSI SLQ に準拠した Presto が使われており、CSVJSON、ORC、Parquet などのさまざまな標準データフォーマットに対応し、機能します。

      • (参考)Hive
        • Hadoop上での処理をSQLライクな言語で実現するためのHadoopエコシステム
        • SQLを記述するればHiveがMapReduceに変換してくれる
        • Hiveではスキーマと実際のデータを分けて管理しています。 データはHDFS上に置き、それを管理すためのテーブル構造などのスキーマ情報はMetaStoreで管理しています。
          • MetaStore: CREATE TABLEなどによって作成されたHive上でのテーブルを管理しています。 テーブル名やカラム名、型などといった情報と実際のHDFS上のファイルとの関係を紐付けています。
        • ORCファイルはHiveの処理に最適化された列指向のファイルフォーマットです。HiveのテーブルデータをORCファイルにするだけで様々な最適化が行われ、クエリの実行速度を大幅に改善することができます。
      • 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は高速レスポンスによってフロントエンドとインタラクティブに繋がるエンジンとして明確な役割分担を行えるようになりました。

          f:id:noko_htn:20200301190134p:plain

    • パフォーマンスをどうだすか

  • Kinesis
    • [AWS]kinesisまとめ
    • 大規模なストリーミングデータをリアルタイムで処理する完全マネージド型サービス
    • データの転送および加工
    • SQSとの違い
      • SQSにはKinesisほどのスケーラビリティが備わっていない。
      • SQSはデータにシーケンス番号は振られておらず、またデータが重複する可能性がある。
      • Kinesisの方が低コスト。
      • SQSはリクエストで送れるデータが256バイトのテキストデータのみ。Kinesisは50キロバイトのBLOB(Binary Large OBject)。
    • 大きく分けて3つの機能
      • 1 Amazon Kinesis Data Streams
        • 処理フロー

        f:id:noko_htn:20200301190214p:plain

        • 登場人物
          • プロデューサ(データ送信側)
            • Amazon Kinesis Data Streamsにデータを送信するもの。 センサやPC,スマホ等が該当します。
          • Amazon Kinesis Data Streams
            • プロデューサからデータを受け取って管理し、コンシューマへ受け渡すもの。 シャードと呼ばれるもので構成されます。
          • コンシューマ(データ処理側)
            • 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 <上記で取得したイテレータ>
        • ユースケース
          • Kinesis Video Kinesis Video Streams -> Kinesis Video Streams -> FargateがConsume Video -> SagaMakerに推論をかける -> Kinesis Data Streamにpublish -> Lambdaで処理
      • 2 Amazon Kinesis Data Firehose
        • 1 と同じく、コンピュータから送られてくるログやイベントデータ等の大量のデータを高速に別のサービスに転送するためのサービス。
        • 一言で言うなら Amazon Kinesis Data Streamsのほうが速い。 Amazon Kinesis Data Firehoseのほうが設定が少なくて実装が楽。
        • ユースケース
          • FirehoseからS3にデータを流し込む際にLambda Functionを間にはさむことが出来ます。
            • ->ここで来たデータを自由に加工して使いやすい形にした上でS3に流すことができる
            • ※Lambdaのデフォルトの実行時間が短いことに注意
            • Lambda から Kinesis Data Firehose
              • Lambda からのすべての変換されたレコードには、以下のパラメータが含まれる必要があります。含まれない場合、Kinesis Data Firehose はそれらのレコードを拒否し、データ変換の失敗として処理します。
                • recordId
                • result
                • data
          • Kinesis Data FirehoseでtwitterからSNS情報収集してS3に格納
            • -> TtanslateとComprehendにかけてS3に戻す
            • -> AthenaとQuickSightで可視化
      • 3 Amazon Kinesis Data Analytics
        • コンピュータやAmazon Kinesis Data Streams、Amazon Kinesis Data Firehoseから送信されてくるデータをSQLを使って処理できるサービス。
        • ストリームで受けつつSQLで前処理するならこれ
        • Random Cut Forest アルゴリズムによる異常検知などもある
  • EMR
    • Amazon EMR は、AWSビッグデータフレームワーク (Apache HadoopApache Spark など) の実行を簡素化して、大量のデータを処理および分析するマネージド型クラスタープラットフォームです。これらのフレームワークと関連するオープンソースプロジェクト (Apache Hive や Apache Pig など) を使用することで、分析用のデータやビジネスインテリジェンスワークロードを処理できます。さらに、Amazon EMR を使用して大量のデータを変換し、Amazon Simple Storage Service (Amazon S3) や Amazon DynamoDB などの他の AWS データストアおよびデータベースとの間で移動することもできます。
    • Apache Sparkとは
      • Apache Sparkとは何か――使い方や基礎知識を徹底解説
      • Apache Sparkは巨大なデータに対して高速に分散処理を行うオープンソースフレームワークです。JavaScalaPythonなどいろいろなプログラミング言語APIが用意されています。
      • Hadoopとの比較
        • 分散処理のフレームワークといえば、Hadoopが有名です。
        • Hadoopは需要のあるツールでどんどん活用の場が増えてきましたが、そんなHadoopにも欠点があることがだんだん分かってきました。その欠点を補う形で登場したのがSparkです。
          • 個々のコンピュータのメモリをうまく活用する設計ではなかった
          • 同じ処理を複数行う場合に、都度ストレージのアクセスが発生する
          • 同じデータを何回も扱う場合にストレージのアクセスが発生する
        • Sparkはそのような課題を解決するために生まれました。「Resilient Distributed Datasets」という分散共有メモリの仕組みがあり、データはパーティション化され、複数マシンのメモリで管理されます。今まで、都度ストレージにアクセスしていたのが、インメモリで実行できるようになったわけです。
        • -> 上記を実現するのがResilient Distributed Datasets(RDDs)
          • 繰り返し利用するデータについてはメモリ上に保持することが可能な機構。
          • RDDはデータの欠損が発生した際の再構築に使用するためのデータの経緯(?)を保持している。
          • どのファイルからどう生成したかが残っているため、障害発生時にも再構築が可能。
          • つまり、端的に言うとデータをロードした結果を必要な分メモリ上に確保したまま処理が可能なため、処理時間を高速化できるというわけですね。
          • ただ、メモリ上に確保したRDDは障害発生時も問題なく復旧するなどの要素を持っているそうです。
      • 実運用
        • Mleap: Spark MLlibなどの機械学習モデルをSparkなしで動かすOSS
  • AWS Glue

    f:id:noko_htn:20200301185856p:plain

    • 概要
      • AWS再入門ブログリレー AWS Glue編
      • AWS GlueはフルマネージドなETL(抽出、変換、ロード)サービスです。
      • S3やRDS、Redshift等の各種AWSサービスとの連携を管理してくれるので、利用者は本来取り組むべき作業である、ETLジョブの作成や監視といった部分に注力出来るようになります。各種AWSサービスの間を繋ぐ「糊(Glue)」として処理を構成・実行する形となります。
    • 処理フロー
      • データソースをクロールし、データカタログにメタデータテーブルを作成
      • データカタログの情報を元にジョブを定義
        • ジョブ定義に基づいてETLの雛形コードが自動生成
      • ジョブ実行で、データソースからデータを抽出し、変換してデータターゲットにロード
    • 登場人物
        1. データカタログ
        2. 永続的なメタデータストアです。各AWSアカウントで1つのデータカタログを持ち、ETLに必要なテーブル定義、ジョブ定義、およびその他の制御情報を保持します。
        3. Glue(データカタログ)はあくまでメタストア。本体データはデータソース(S3とか)に。
        1. クローラ
        2. データカタログにメタデータテーブルを作成するプログラムです。データストア(ソースまたはターゲット)に接続し、クロールしたデータは分類され、スキーマ情報を抽出します。
        3. GlueでVPCフローログをparquet形式に変換させる定期ジョブを作ろうと思いクロール処理を追加したところ、ビルトインのClassifiersにはなかったため自動でテーブル構造を認識してくれませんでした。認識させるためにはカスタムClassifiersを作る必要があることが分かりました。
        1. ジョブ
        2. ETL作業を実行するために必要なビジネスロジックです。データカタログのデータを使用して、データを変換するジョブを定義できます。①変換スクリプト、②データソース、および③データターゲットで構成され、サーバレスなApache Spark環境で実行されます。ジョブはオンデマンドや、スケジュール、イベントトリガーで実行することが可能です。
          • 「サーバーレスSpark」という言い方もする。Scala, Python,Sparkを使って開発できる。かつ、内部的にEMRを起動させているらしい。EMR/SparkでETL処理するんだったらGlue使う方がコスト及び開発効率がいい。
          • Hadoop環境に直接アクセスでき、下位レベルへのアクセスや、Spark以外のツールを使用できる柔軟性が向上」といったポイントがGlueではなくEMRを選定する判定基準になる様子
        3. ジョブにはSparkと、Python Shell2つのタイプがあります。
    • ユースケース
      • S3のデータセットメタデータにtransformation jobs
        • Create an AWS Glue crawler to populate the AWS Glue Data Catalog. Then, author an AWS Glue ETL job, and set up a schedule for data transformation jobs.
      • SageMakerで学習させる前の前処理
        • S3 -> Glue ETL -> Comprehend -> S3 -> SageMaker
      • 座標に基づいたデータセットを分割するために、Spark Machine Learning K-means クラスタリングライブラリを使用した AWS Glue のジョブスクリプト

    • FindMatches変換
      • 「完全に一致していなかったり主キーが無かったりするデータに対しても、内容としては同じようなレコード」を識別する
        • 一致する顧客: 多くの顧客フィールドがデータベース間で正確に一致しない場合でも(名前のスペルや住所の違い、データの欠落や不正確ななど)、異なる顧客データベース間で顧客レコードをリンクします。
        • 製品のマッチング: カタログ内の製品を、競合他社のカタログに対する製品カタログなど、他の製品ソースと照合します。エントリの構造は異なります。
        • 不正検出の向上: 重複した顧客アカウントを特定し、新しく作成したアカウントが、以前に知られている不正ユーザーと一致する(またはその可能性のある)タイミングを判断します。
          • recallを高く(取りこぼさないように)
        • マッチングに関するその他の問題: マッチアドレス、映画、パーツリストなど。一般的に、人間がデータベース行を見て、それらが一致していると判断した場合、FindMatches 変換が役に立つ可能性は非常にあります。
      • UTF-8 without BOM
        • Unicode語で書かれたテキストファイル(中身が文字だけのファイル)において、中身の最初にくっついている「これはUnicodeだから!」な目印が「バイトオーダーマーク」
    • DynamicFrame クラス
      • 各レコードが自己記述できるため、最初はスキーマは必要ありません。代わりに、AWS Glue は必要に応じてオンザフライでスキーマを計算し、選択 (または共用) タイプを使用してスキーマの不一致を明示的にエンコードします。これらの不整合を解決して、固定スキーマを必要とするデータストアとデータセットを互換性のあるものにできます。
  • 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 Greengrass
    • クラウドで構築、トレーニング、最適化したモデルを使って、機械学習推論を簡単にデバイスでローカルに実行できます。また、Amazon SageMaker でトレーニングされた機械学習モデルを使用したり、Amazon S3 に保存されている、事前にトレーニングされた自分のモデルを持ち込めたりと、柔軟性も高まります。
    • IoT Greengrass で実行されている推論から集められたデータを SageMaker に送り返すと、データがタグ付けされ、機械学習モデルの継続的な品質向上の支援につながります。