Iganinのブログ

日頃の開発で学んだ知見を中心に記事を書いています。

ML Study Jams : Machine Learning 初心者向けトレーニングプログラム の振り返り

はじめに

[ML Study Jams] (https://events.withgoogle.com/ml-study-jams-japan-2019-01/)はGoogleにより提供されるMachine Learningのトレーニングコースです。 2月13日 - 3月3日の期間で開催されるオンライントレーニングコースであり、参加者には無料のQWIKLABSクーポンの配布と、全7種類のコースに対して4種類以上完了した参加者にはノベルティプレゼントの特典があります。 コースは以下です。(Google Developerサイトより引用)

BQML で分類モデルを使用して訪問者の購入を予測する(日本語)
BigQuery ML 予測モデルによるタクシー運賃の予測(日本語)
Cloud TPU: Qwik Start(日本語)
Google Cloud Speech API: Qwik Start(英語)
Cloud Natural Language API: Qwik Start(英語)
Speech to Text Transcription with the Cloud Speech API(英語)
Entity and Sentiment Analysis with the Natural Language API(英語)

終了からしばらくたってしまいましたが、備忘と振り返りも兼ねて学んだこと等を箇条書きに近い形ではありますがまとめます。

API使用について

以下の4種類のコースは主にGoogle提供のモデルを用いた分類APIの使用方法とリクエスト形式およびレスポンス形式に関して学ぶ内容になります。

  • Google Cloud Speech API: Qwik Start(英語)
  • Cloud Natural Language API: Qwik Start(英語)
  • Speech to Text Transcription with the Cloud Speech API(英語)
  • Entity and Sentiment Analysis with the Natural Language API(英語)

BQML で分類モデルを使用して訪問者の購入を予測する(日本語)

BQML(Big Query Machine Learning)を使用したE-commerceデータから訪問者の将来の購入を予測するモデルを作成し、評価、使用するエクササイズです。

モデルを作成・評価する際のデータ使用に関して

  • モデルの作成に全てのデータは使用しない、なぜならモデルの精度の評価に使用するデータが必要なため
  • モデルの改善を行う場合、旧来モデルとの比較を行いたい場合はモデルの学習およびモデルの評価に使用するデータセットは同じにする(通常の評価試験と同じ考えですね)

BQMLのコマンドについて

  • ML.EVALUATEでモデルの評価を行う
  • roc_aucを使用することで、false negativeを避ける、 true positiveを採用するという観点からのモデルの精度を評価できる
  • CREATE OR REPLACE MODEL モデル名 OPTIONS (model_type='モデルタイプ', labels = ['予測したいパラメータ']) でMLモデルの作成を行う
  • model_typeは数値予測(来年度の売上など)の場合はlinear_reg, 2値分類(購入するか否かなど)の場合は logistic_regを使用する

  • 学習モデルを作成する際には、どのデータを学習に使うか、どのデータが推測したい値かをきめる

  • 学習用パラメータが十分かどうか(種類、量)を評価によって考察することが重要
  • Modelの学習は warm_start = trueをつけることで早くなる

Modelの評価の方法について

SQLの関数について

CONCAT
// 値のつなぎこみを行う、例えば
CONCAT(Id, name) -> 1005 sato

UNNEST
key | array
No | [1, 2, 3, 4]のようなデータ構造に対して使用した場合 []のネストをなくす
UNNEST(array) をした場合

No | 1
No | 2
No | 3
No | 4

というような形になる

BigQuery ML 予測モデルによるタクシー運賃の予測(日本語)

数値予測を行うためにlinear regを使用して学習モデルの作成を行うエクササイズです。

SQL関数について

TIMESTAMP_TRUNC(https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions)
TimeStampの truncate -> TIMESTAMP_TRUNC(TIMESTAMP, Truncateの単位(MONTHなど))

EXTRACT(単位、 timestamp) -> 単位部分をtimestampから抜き取る EXTRACT(HOUR, timestamp) -> 3時など

TIMESTAMP_DIFF(timestamp1, timestamp2) 2つのtimestampの時間差を秒で返す
ORDINAL -> 番号付が1から
OFFSET -> 番号付が0から

線形回帰モデルの評価について

  • 予測モデルでは、標準偏差(Root Mean Squared Error)が評価の対象になる(当然0に近いほうが良い)
  • 受け入れ可能かどうかは、学習を開始する前に決めた Criteria(おそらくビジネス要件で決まる?)により決定する

  • ML.TRAINING_INFO => EXPLORED IN DATA STUDIOで学習状況の時系列等を確認できる

  • ここからモデルが過学習(over fitting)になってしまっていないかどうかがわかる

Cloud TPU: Qwik Start(日本語)

TPU -> Tensor Processing Unit 機械学習に最適化されたCPUに関して学ぶセッションです。

コマンドなど

ctpu print-config
ctpu print-config コンフィギュレーションの確認
ctpu up --zone ${ZONE}
ZONEでの Compute Engine and Cloud TPU servicesを使用可能にする(ほか諸々のタスクも行う)
  • TPUはTensorFlowを使用する
  • ctpu(tpuを使用するコマンド)はGCPのshellに備え付けられている