Jのブログ

人生の記録

AWS認定 機械学習 合格しました

いやー、難しかったー。認定試験合格できたけど、奥が深いので実践できるかというと別かなって印象です。10年インフラエンジニアとしてやってきましたが、統計学とかの知識も必要だったり、機械学習アルゴリズムの理解、アルゴリズムの評価、トレーニングデータのチューニングなどなど、今まで経験したことがないジャンルだったので言葉もわからないし、考え方もわからないって感じで、新卒時代を彷彿させる時間を過ごしました。でも、これが楽しんですよね。エンジニアだし!新しいジャンルのことに触れる機会を得られてかなりいい試験でした。もっと実践でやってきたい。

やったこと

調査したこと

教師あり学習

線形回帰

特徴量に対し、方程式(モデル)を導く。傾きとか接点とか。次元が増えるとモデルが複雑化する。トレーニングデータにあわせすぎると、未知のデータに対する検証ができなくなる。これを過学習という。過学習を防ぐには、モデルをシンプル化する正則化を用いて汎化性能を向上させる。

正則化

Lasso回帰とRide回帰

ロジスティック回帰

ある事象が起こる確率を出す、2値分類

サポートベクトルマシン

分類と回帰、どちらにも利用可 直線、曲線、円など複雑なデータにも対応 線形カーネル、シグモイドカーネル、多項カーネル、RBFカーネルなど様々な形で分類できるカーネルがある

ナイーブベイズ

自然言語における分類。例えば、スパムメール。確率を出す。 文章をカテゴリに分けたり

ランダムフォレスト

複数のモデルを束ねて高性能のモデルを作成する。回帰、分類どちらにも適用できる。決定木を利用し、複数の弱学習機を組み合わせる。森の数を深くしても過学習がなく途中で収束する

ニューラルネットワーク

回帰、分類に使えるが応用では分類に使われることが多い

教師なし学習

PCA(Principal Component Analysis)

歴史が深い主成分分析。例えば変数が100個あるデータを分析する場合、そのまま分析するよりも、変数を減らして例えば5個にした方が、後の分析が楽になる。減らす方法は2通り。1つは、重要なデータのみを選択する、もう一つは元データから新たな変数を生成する。主成分分析は、新たな変数を生成することでデータの変数を削減する方式。高次元データを低次元データとして扱う。

LSA(Latent Semantiv Analysis)

次元削減手法として、情報検索の分野で活躍 LSAによって、大量の文書データから単語が持つ潜在的な関連性を見つけ出す。通常は単語に対してindexwをつけることで検索していた。

NMF

LDA

K-means法

混合ガウス分布

LLE

t-SNE

分類における評価法

f:id:iron_breaker:20200125083127j:plain
混合行列

  • 混合行列
  • 緑:正解率、正確さ(Accuracy)> TN+TP/全体。予測値がどれくらい正解しているか。
  • 黄:適合率、精度(Precision)> TP/FP+TP。1と予測したものがどれくらい正解しているか。例えば、20歳以上のコンテンツ判定で利用した場合、適合率が低いと子供でも見ていいコンテンツが20歳以上と判定されているということ。
  • 赤:再現性(Recall)> TP/FN+TP。実際のデータに対して、どれくらい正解しているか。この値が低いと、20歳以上コンテンツでも通常コンテンツと判定されてしまう。適合率と再現率は相関関係にあるので、どっちかの正解率をあげるともう一方の正解率がさがる。あいまいなものを20歳以上のコンテンツと判定する(再現性率を上げる)と、誤って通常のコンテンツも含まれてしまうイメージ。つまり適合率がさがる。
  • F値:2x(適合率x再現率)/(適合率+再現率)。適合率と再現率のバランスをみたいときに利用。
  • 予測確率:分類結果に何%の確率であっているかを出す
  • ROC曲線AUC: ポジティブデータ数とネガティブデータ数にかなり差がある場合、適正なモデルにならない。不均衡データの指標としてAUCを用いる

回帰における評価

  • 平均二乗誤差:実際の値と予測値の差がどれだけあるか。誤差の二条を全て計算し平均をとったもの。この誤差が少ないほど予測が正しい。
  • 決定係数:平均二乗誤差を使って学習したモデルの予測の当てはまり度を示す数値。R2と言われている係数。最大で1、この数値が誤差が一番ない状態。

バッチサイズ

  • ディープラーニングでは、内部的にデータを分けて学習する
  • 異常値の影響を少なくするため
  • 習慣として2のN乗の値が利用される

イテレーション

  • バッチサイズが決まれば自然と決まる
  • 1000件データあり、バッチサイズ200とするとイテレーションは5

エポック数

    1. バッチサイズに従い、データを分割
    1. 分割データ数分、学習を行う
  • 1と2でワンセット。ワンセットをエポックという。
  • 損失関数(コスト関数)が収束するまで、エポックを繰り返す
  • ただし、収束しすぎると過学習がおこる

損失関数

  • 予測と実際の直のずれを表す
  • 直が小さいほど正確なモデル
  • 平均二乗誤差など
  • バッチサイズ: 大きくすると汎化性能が落ちる
  • 学習率: バッチサイズに合わせた最適な学習率を選択。バッチサイズと学習率は比例の関係にあるので、バッチサイズを下げたら学習率も下げる

サンプリング

  • クラス比率が不均衡の場合、データを増やしたり減らしたりしてバランスをとる
  • オーバーサンプリング: 件数が少ないデータを増やす
  • アンダーサンプリング: 件数が多いデータを減らす

不均衡データの学習

  • 目的変数の分布に大きな偏りがあるデータ
  • 滅多に発生しないデータにどうやって対応するモデルを作るのか?
  • 不均衡データでは正解率を上げるのではなく、再現性を上げることが多い(例えば、データが偏っているのでTrueと全て予測すれば正解率があがる)。でも、実際はそうじゃい。
  • アプローチ
    • データレベル:オーバーサンプリング(少ないラベルデータを増やす)またはアンダーサンプリング(多いラベルデータを減らす)を行う。オーバーサンプリングの代表的な手法がSMOTE
    • コスト思考型学習:損失関数にて、誤分類したときの重み付けを多くする
    • 異常検知:教師なし学習で対応する

欠損値データの学習

  • 欠損の種類
    • ランダム欠損
    • 観測データに依存する欠損
    • 欠損データに依存する欠損
  • データ量が単純に多い場合:削除または固定値を入れる
  • データ量が少ない場合:平均値または頻繁値を入れる、平均からばらつきを考慮して値を入れる
  • 多重代入法:欠損値を推定して入れる

ハイパーパラメータ探索

  • ベイズ最適化:形状がわからない関数(ブラックボックス関数)の最大値を求める手法。グリッドサーチより軽量。どこのパラメータが一番精度があがるかを、結果を考慮し探索していく
  • グリッドサーチ: グリッドを作り、交点のパラメータをすべて組みあせて、一つずつ試す。計算数が多くなるので時間がかかる。

モデルの過学習

  • 学習データでの予測は成功、未学習のデータに対する予測がだめ > 学習しすぎている過学習状態
  • 学習データが少ない、変数が多い、パラメータが大きいことが原因
  • 汎化性能が重要
  • 解決策
    • 学習データと検証データに分割する(7:3)学習データ多い6:4、学習データ少ない8:2など工夫する
      • 交差検証(クロスバリデーション):データセット全体に対して、学習用データ・検証用データのパターンを複数用意し、かたよったモデルにならないようにする
    • ベイズ最適化。最大値になる確率や期待値を定義しパラメータを予測する。グリッドサーチに比べてコストが少ない。学習データを増やすの
    • 特徴量削減
    • L1正則化: 変数を減らす lasso
    • L2正則化: 過学習を防ぐ ridge 重みの二乗を足す。変数は減らないので、変数多い場合はモデルが複雑になる
    • アーリーストッピング
    • アンサンブル学習法
    • 特徴量と次元は同義
    • 次元の呪い:特徴量が多いと効率的に学習させるのが難しい 活性化関数
  • ニューラルネットワークにおいて、線の形を司る関数。
  • シグモイド: s字 2値分類
  • ソフトマックス: 二乗曲線 多項分類
  • ReLU: 0以下は0 、0より大きいと入力。プラス値のみを、利用するとき
  • 恒等関数: 入力をそのまま。何も変更しない場合

RecordIO

  • mxnetで利用するデータセットのフォーマット
  • jpg,pngをバイナリに変換
  • データと一緒にラベルも管理できる
  • ディスク容量削減、連続読み取り可能、分散設定が可能になる

学習率

  • 学習するときに動かす最適化関数のパラメータの割合
  • 学習率を低くすると、ちょっとずつ動かすので回数こなす必要あるので時間がかかる。ただし、最適値を見つけやすくなる。
  • 学習率を高くすると、大きく動かすので回数こなさなくても大丈夫。ただし、大まかなため最適値を見逃しやすくなる。

次元削減

  • 説明変数を減らす
  • 例えば体重と身長を二次元でプロット。これを一次元にしたとき、直線は体格をあらわす。次元削減しても体格という軸で見れる。
  • データ圧縮、データの可視化
  • 手法としてPCA(主成分分析)がある

SageMaker組み込みモデル

自然言語処理

BlazingText(Word2Vec)

  • 単語ベクトルを生成し、テキストを分類
  • 似た意味の単語であれば、似たようなベクトルになる
  • 教師あり
  • 用途:単語分類、文章の意味を解析、感情分析、エンティティ認識、機械翻訳など

Sequence to Sequence

潜在的ディリクレ配分(LDA)

  • トピックモデル
  • 教師なし
  • ドキュメントがどういうトピックで構成されているかを調べる
  • 特徴は単語の出現回数、カテゴリはトピック
  • 類似の単語が使われてるドキュメントを分析できる
  • 文書に限らず、さまざまな離散データに隠された潜在的トピックを推定する(画像、音楽情報処理、SNS解析など)

ニューラルトピックモデル(NTM)

  • 教師なし
  • ドキュメントのトピックを抽出
  • ニューラルネットワークを利用
  • 文章分類機の前段で利用
  • 単語ベースのモデル(LDA)よりも、優れたパフォーマンスが期待される

コンピュータビジョン

イメージ分類

オブジェクト検出(SSD: Single Shot MultiBox Detector)

セマンティックセグメンテーション

  • セマンティックとは意味、セグメントの意味を理解する
  • コンピュータビジョン、ピクセルレベルのアプローチ
  • 自動運転、医療用画像診断、ロボットセンシングなど
  • イメージ分類アルゴリズムは、イメージ全体を分析する教師あり
  • オブジェクト検出アルゴリズムは、イメージ内のオブジェクトを全て検出し分類する教師あり。長方形の境界ボックスで示す
  • セマンティックセグメンテーションは、イメージ内の全てのピクセルを分類。オブジェクトの形状を検出。

分類・回帰ハイブリッド

XGBoost

  • 教師あり学習
  • 回帰、分類、ランキングに対応
  • アワビの年齢予測(回帰
  • ハイパーパラメータが豊富
  • ハイパーパラメータ、分類はロジスティック、回帰はライナーかっこいいので線形)

Object2Vec

  • 高次元ベクトルを低次元化し、類似したオブジェクトを近距離に配置する手法。物事の関係性を計算する
  • 動画のレコメンド、ドキュメント分類、文章類似性、自然言語理解、情報検索
  • 分類、回帰に使える
  • 教師あり学習

線形学習

因数分解

  • 分類、回帰
  • 教師あり
  • 高次元データの相互作用を経済的に予測するようにチューニングされている
  • 特定のカテゴリの広告を特定のカテゴリのwebページに配置した時のクリック率の予測

k近傍法(k-NN)

  • 距離が近いデータをk個集め、多数決から目的値を求める。学習にあたる部分がない
  • レコメンドなどで利用される
  • 分類、回帰

データ解析

主成分分析法(PCA)

  • 教師なし
  • データを選択、または新しいデータを作ることで次元を減らす
  • 10科目あるテストで、学生の能力を分析するなどデータ解析に利用
  • 表形式のデータを利用する
  • 2つのモード
    • regular: 疎データと標準的な数の観測および特徴を備えたデータセット
    • randomized: 多数の観測および特徴の両方を備えたデータセット

時系列データの予測

DeepAR

異常検知

IP Insights

  • 教師なし
  • IPv4の使用パターンを学習する
  • ipv4、ユーザーidやアカウントidをキャプチャし、例えば異常なipからのログインを検知
  • 履歴データを取り込みモデルを作る

ランダムカットフォレスト(RCF)

  • 異常なデータポイントを検出する、異常値スコアを返す
  • 教師なしアルゴリズム
  • 時系列データのスパイク、周期性の中断、分類できないデータポイントなどを検出
  • 異常値とは、外れ値建築、変化検知、異常部位検知
  • 異常購入、銀行へのサイバー侵入、MRIスキャンの異常、不正な保険請求、異常な機械動作、ネットワーク侵入検知など

K-Means

  • クラスタリング
  • 教師なし学習
  • 購入履歴や行動データから顧客を分類、類似画像の分類、不正取引検知、ネットワーク侵入検知、嵐を予測するなど収集データの異常検知

Sagnaker 運用

パイプモード

  • s3からストリーミング
  • EBSの消費が少ない
  • 読み込みが高速

ファイルモード

  • EBSにデータをダウンロードしてから処理
  • 容量を消費する
  • 読み込みが遅い

パイプラインモード

  • 前処理を含めた形でモデル作成まで行う
  • 処理A用のコンテナ、処理B用のコンテナ、モデル作成用のコンテナと順番に実行する
  • パイプラインは同じEC2上で処理するのでローカルデータを利用するため、処理が早くなる
  • record io形式だとさらに高速

デプロイ方式

  • 永続エンドポイント:リアルタイム推論。deployメソッド。APIで取得。
  • バッチ変換:データセット全体を推論。create_transform_jobメソッド。結果はS3に保存。
  • ローカルモード: オンプレミスでコンテナを起動し、学習や推論を行う

Amazon ML

コンセプト

  • データソース: データそのものではなく、s3への参照アドレスが保存
  • MLモデル:バイナリ分類、複数クラス分類、回帰の3種類
  • 評価
    • AUC: 不均衡データの指標
    • F1: 正確度と再現率のバランスを見る
    • RMSE: 二乗平均平方根誤差、回帰に対するパフォーマンス評価
    • カットオフ: 数値予測スコアを0と1に丸める
    • Accuracy: 精度。全体に対する予測正解率
    • リコール: 実際の正の合計数に対し、正と予測した割合
  • バッチ予測
    • 全てを一度に予測。リアルタイム性の要件がないものに適用
  • リアルタイム予測

データの分割

  • レーニングデータとテストデータに分ける
  • データの事前分割:自分で好きに分割する
  • シーケンシャル分割:時系列データは順番に取得する
  • ランダム分割:カテゴリ別のデータは、カテゴリごとにランダムに取得する

モデル

  • バイナリ分類(ロジスティック回帰):スパムメールか?購入するか?ボットレビューか?
  • 複数クラス分類(ロジスティック回帰):書籍、映画、衣類か?コメディ、スリラー、ドキュメンタリーか?
  • 回帰モデル(線形回帰):明日の温度は?販売予測は?どれくらいの値段で売れる?

データ変換

  • Nグラム変換:N=1にすると、単語分割 {"I", "really", "enjoyed", "reading", "this", "book"}
  • 直角のスパースなバイグラム(OSB)変換:バイグラム変換(N=2)に変わるもの
  • 小文字変換:文字を小文字にする
  • 句読点除去変換:N=1グラム変換を行い、-や!などを削除する
  • 四分位ビニング変換:
  • 正則化変換:異常値をならす
  • デカルト積変換: