Learning2015年12月20日masuwo3(38)52この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。2015』の20日目のエントリです。昨日19日目のエントリはあべいかの『CloudWatch』でした。このアドベントカレンダーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。Learning』です。一言で言うとAWSが提供する機械学習用プラットフォームです。その特徴として、学習から結果の利用までの手続きがシンプルであること、マネージドな環境下で、簡易にスケーラブルな予測APIを構築できることなどがあります。MLは機械学習の中でも『教師あり機械学習』とよばれる分野の学習に対応しています。この『教師あり機械学習』は、過去のデータを用いて、機械学習によってなんらかの現象を予測したいという場合によく用いられます。この予測の具体的な例として、あるユーザの属性情報をもとに特定の商品を買うかどうかの判定や、業務に関する様々な情報からの今季の売り上げ予想など、様々な場面が考えられます。この予測は万能ではなく、与えられたデータが結果と関係しない情報ばかりであれば、予測結果は当然精度の低いものとなります。MLを用いて予測を行う際には、この変数選択をどのように行うかが予測の精度を決める大きな要因となると言えます。MLでは、予測結果を示すターゲット(目的変数)の型によって、予測を自動的に切り替えます。予測の種類は主に3種類あり、それぞれに適した予測アルゴリズムを採用しています。ターゲットとなる正解データが2つの値に限定される場合に適用される学習手法です。商品の購入を行うかどうかや、受信したメールがスパムかどうかなどの予測を行う場合はこの学習モデルが採用されます。二項分類の学習モデルは、内部でロジスティック回帰と呼ばれるアルゴリズムを利用しています。このアルゴリズムは、入力値に対してロジスティック関数と呼ばれる関数を適用し、結果がどちらの値になるかを確率として出力します。ターゲットとなる正解データが複数のカテゴリに限定される場合に適用される学習手法です。入力データから、入力データから対象どのカテゴリに属するかを予測するためのモデルとなります。この学習モデルが採用される例として、商品のカテゴリ判別やどのカテゴリの商品がユーザにとって最も興味を持っているかなどを予測する場合などがあります。多項分類の場合、ロジスティック回帰の拡張である多項ロジスティック回帰と呼ばれるアルゴリズムを用いて、結果がそれぞれの値となる確率を求めます。入力データから数値の予測を行いたい場合は、回帰と呼ばれる学習手法を求めます。分類ではなく、具体的にとある数字が欲しい場合などにはこの回帰による学習モデルを用います。製品の販売台数や四半期の売り上げ、市場価格の予測などが適用例として考えられます。MLでは線形回帰と呼ばれるアルゴリズムを利用して数値の予測を行います。線形回帰では、与えられたそれぞれの正解データに最も近い線形関数を導出し、その関数を用いることで結果を予測するというものです。Learningを用いて機械学習を行い、予測結果を得るまでのおおまかな流れを見ていきます。MLでは機械学習のための作業の流れが整理されおり、順に行うことで簡単にモデルや予測APIの構築ができます。MLにおける機械学習は、基本的には以下の流れに従って行われます。各作業の成果は、エンティティと呼ばれるAWS上のオブジェクトとして管理されます。各エンティティの詳細は以下の表のとおりです。学習モデルを利用してデータソースに対して予測を行った結果をまとめたもの各作業が具体的にどういう流れなのか、また何ができるのかを見ていきたいと思います。データソースの作成まずは、機械学習用の訓練データの作成を行います。MLでは、学習や予測に用いるデータは常にデータソースと呼ばれるエンティティに一旦変換されます。ML上で機械学習に利用できる形に準備されます。データの統計分析も合わせて行われるため、統計的な情報を確認したり、学習モデル構築時に利用することができます。元データの読み込みデータソースの作成元となるデータは、S3またはRedshiftから取得することができます。APIを利用すればRDSを指定することもできます。今回は、S3上にCSV形式の訓練データが配置されているという前提でデータソースを作成していきます。訓練データの読み込みが終わると、次に読み込んだ各項目のデータ形式を指定します。ML側で読み込み時にデータ形式を推測して設定してくれるので、その内容を確認して、誤っている部分を修正するという作業になります。各項目のデータ型を決めた後は、ターゲット変数の指定を行います。ターゲット変数の指定は、データソースを機械学習に用いる場合に必要となり、またターゲットのデータ型によって、学習モデルの種類が決定されます。バッチ予測を行うためのデータソースであれば、正解データは必要ないのでターゲットの指定は不要です。最後に、必要であればID項目の指定を行います。IDに指定された項目は学習には利用されませんが、予測結果にID項目が紐付いて返ってきます。ID項目を予め指定しておけば、例えばバッチ予測を行った際にIDから予測結果と元データをまとめるなどのことができるようになります。学習用のデータソースを作成した後は、学習モデルの構築作業に移ります。モデルの構築では、主に学習に用いるデータの前処理と学習パラメータの設定を行っています。ML側の推奨する設定で行う方法と、手動で設定を行う方法の二つが用意されています。データソースの指定モデルを構築するためには、まず学習用のデータソースを指定するところから始めます。学習設定の方針選択データソース指定後は、推奨設定で構築を行うか、手動で設定して構築を行うかのいずれかを選択します。推奨設定の場合は、以下のように設定が行われた状態でモデル構築を行います。手動で設定する場合は、まずは前処理をどう設定するかを指定する必要があります。MLでモデル構築時にデータの前処理を行う場合、recipeと呼ばれるJSON形式の前処理設定を記述していきます。recipeについてはここでは割愛しますが、詳細についてはこちらをご確認ください。MLはデータソースの統計情報をもとに作成されたrecipeを入力画面に表示させます。このrecipeをベースに修正を加えても良いですし、0からrecipeを作成しなおすことも出来ます。ちなみに、作成が完了していない場合は空白となりますが、ここで特にrecipeを指定しなければ、作成完了後に自動生成されるrecipeが適用されます。学習パラメータの設定recipeの記述の次は、学習パラメータの設定を行います。学習パラメータは、主に学習にかかる時間や予測の精度、予測時の計算量などのコストに影響します。それぞれの項目が何を意味しているのか、どのように影響するのかについて以降にまとめていきます。MLでは、モデル構築の際に訓練データのデータパターンをモデル内部に保持します。このパラメータは、最大でどの程度までのデータパターンを保持するかを定めます。サイズを超えた場合は、超過したパターンは切り捨てられるため、予測精度に悪影響を与える場合があります。一方で、サイズを大きく設定した場合には、予測にかかるコスト(計算時間や料金)が増加する可能性もあります。リアルタイム予測APIを利用することを考えている場合、予測にかかるコストは料金に大きく影響するので、注意が必要となります。一般に、訓練データの量(特に項目数)が多い場合にはデータパターンも多く見つかる可能性があるため、多めに設定することが推奨されています。パス数の設定データパターンを探索する際のパス数の設定を行います。パス数が多ければより多くのデータパターンを発見できるため、データ件数が少ない訓練データを用いる場合などは、パス数を多く設定することで予測精度が向上する可能性が有ります。一方で、パス数が増加すると学習にかかるコストも増加してしまうため、注意が必要です。正則化は、過学習と呼ばれる現象を防ぐために行われる処理で、機械学習時にモデルの自由度・複雑度をあえて抑制する処理を加えることです。訓練用データの傾向が偏っていたり、モデルの複雑さに比べてデータ量が少なすぎる場合、学習モデルが訓練用に特化してしまい、実データに対して汎用的に予測を行うことができなくなる場合があります。これを過学習とよび、この現象を防ぐためには正則化を行う必要があります。MLが提供する正則化のうち、L1正則化は学習モデルの各項目のなかから影響の少ない変数項目に対して、入力がほぼ0となるように重み付けを行います。L2正則化は各変数が結果に与える影響を抑制し、変数ごとの影響の幅を抑えるように重み付けを行います。訓練データの傾向に合わせて正則化の方法や重みを選択する必要があります。それぞれの訓練データのデフォルト設定値と設定できる範囲を以下の表にまとめます。正則化量の範囲についてはDOUBLE型の浮動小数点数であれば指定は可能ですが、一般的に効果を持つとされる以下の範囲での利用を推奨されています。最後に評価に関する設定を行います。モデル構築時に合わせて評価を行う場合は、ここで評価用のデータソースを指定することができます。データソースは別のものを指定するか、訓練用データソースから分割するかを選ぶことができます。ここで評価を設定しない場合でも、構築したモデルに対して後から評価を行うことは可能です。MLでは,作成した学習モデルの予測精度をデータソースを用いて評価することができ、その結果は評価(Evaluation)というエンティティに保存されます。予測精度を測るための指標は、学習モデルの種類によって異なります。ここでは、各モデルの指標についてどんな意味を持っているのか、どのようにして算出しているのかを説明していきます。Curve)と呼ばれる指標を用います。AUCを用いることで、二項分類の閾値の設定によらず、モデルの分類性能を表現することができます。AUCの値は1が最大値、0.5がランダムの分類とほぼ同性能となっており、その間で学習モデルの評価を行うことになります。多項分類では、適合率や再現率と呼ばれる予測の特徴を示す指標から調和平均を取った、F1値と呼ばれる数値を用いて予測の精度を測っています。適合率とは、ある予測結果を示した予測の中で、実際に正しく予測できたものの割合です。これは正確性と呼ばれる性質に関する指標であり、予測結果がどれだけ正確なものなのかを示しています。再現率とは、本来ある結果を含んでいるデータのうち、結果を正しく予測できたものの割合です。これは網羅性と呼ばれる性質に関する指標であり、予測結果が、全体からどれだけ網羅的に結果を含んでいるかを示しています。正確性と網羅性の二つの性質は一般的にトレードオフの関係になりやすいため、この二つの性質に関する指標を調和平均という形で含めた、F1値と呼ばれる値で総合的に評価しています。多項分類の場合は各項目についてF1値が計算されるため、その平均値を総合的な多項分類の予測精度の指標として用いています。回帰モデルの場合は、RMSE(二乗平均誤差)とよばれる、予測結果と実測値の二乗誤差の平均を取った値が評価の指標として用いられます。学習モデルの構築・評価が終わった後は、実際に実データを入力して予測結果を取得します。予測問い合わせの手段は、複数のデータに対して問い合わせをまとめて行うバッチ予測と、APIから逐次問い合わせるリアルタイム問い合わせの2通りがあります。バッチ予測の場合バッチ予測を行う場合には、事前に予測に用いる実データをデータソースに変換する必要があります。バッチ予測の実行方法は評価の作成手順とほぼ同じですが、異なる点として結果の格納のためにS3のロケーションを指定する必要があります。APIを通して問い合わせを行うことになります。CLIを利用して、CLIからリアルタイム問い合わせを行う手順を説明します。CLIから学習モデルに関する情報を取得します。"ml-xxxxxxxx",...(snip)...}EndpointInfoを確認し、EndpointStatusが"NONE"の場合は、Endpointへの接続をおこなえる様に設定を変更します。}}あとは、EndpointUrlとml-model-idを用いて、学習モデルに入力データを送ることで予測結果を問い合わせることができます。結果は以下のように出力されます。}}これで予測問い合わせ用のAPIは作成できました。あとは、返却されたpredictedLabelやpredictedScoresなどの予測結果を利用するようにすれば、機械学習を構築するサービスに簡単に組み込むことができます。Learning』編でした。Advisor編です。385,737元特任助教のエンジニア志望です。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。