データを準備する

データは機械学習(ML)システムの重要な要素です。ML モデルをトレーニングしてトレーニング済みのモデルから予測を取得する前に、データを準備する必要があります。このページでは、データを準備するために必要な手順の概要を示します。

モデルをトレーニングするためのデータ

モデルをトレーニングするには、大量の既存データ インスタンスが必要です。このデータには、次のような特性があります。

  • 問題空間内のデータを代表する。
  • モデルが予測を行うために必要なすべての特徴が含まれるほか、新しいインスタンスで推測したいターゲット値が含まれている。
  • TensorFlow による受け入れ可能な形式でシリアル化されている(通常は CSV または TFRecords)。
  • GCP プロジェクトがアクセスできる場所に格納されている必要がある(一般的には Cloud Storage の場所または BigQuery)。
  • モデルをトレーニングするためのデータセット、トレーニング済みモデルの精度と一般化可能性を評価するためのデータセット、トレーニング済みモデルをテストするためのデータセットの 3 つのデータセットに分割されている。

データ準備の段階

データの準備には、通常、反復的な手順が必要です。このドキュメントでは、教師あり機械学習のためにデータを準備する手順は、次のように特定します。

  1. データを収集する。
  2. データをクリーニングする。
  3. データを分割する。
  4. データの特徴エンジニアリングを実施する。
  5. 特徴を前処理する。

データを収集する

データ、特に必要とするラベルを持つデータを見つけることが難しい場合があります。ソースが機械学習プロジェクトごとに大きく異なることがあります。さまざまなソースからのデータを結合するか、複数の場所からデータエントリを取得している場合は、次のステップで特別な注意が必要です。

データをクリーニングする

データのクリーニングは、整合性をチェックするプロセスです。この段階では、データ全体のパターンを調べる必要はありません。代わりに、列(属性)ごとにデータをクリーニングし、次のような異常を探します。

  • 特徴が不足しているインスタンス。

  • 特徴を表す複数の方法。たとえば、インスタンスによって長さの測定値をインチで示していたり、センチメートルで示していたりすることがあります。特定の特徴のすべてのインスタンスが同じスケールを使用し、同じ形式に従うことが重要です。

  • 典型的な範囲からはるかに離れた値(外れ値)を持つ特徴。データ入力の異常やその他の無効なデータなどがあります。

  • 時間、地理的位置、またはその他の認識可能な特性の間隔でのデータの大幅な変化。

  • ラベルが正しくないか、ラベル付け基準が正しく定義されていない。

データを分割する

教師あり学習シナリオでは、トレーニング データ、評価データ、テストデータの少なくとも 3 つのデータのサブセットが必要です。

トレーニング データは、モデルをトレーニングするために使用するデータです。モデルを開発する前に、データを分析して把握する必要があります。

評価データは、定期的なトレーニング サイクル中にモデルのパフォーマンスをチェックするために使用します。モデルをトレーニング セット以外のデータに一般化できるようにする主なツールです。

テストデータは、通常、トレーニングの複数回の反復後に完成に近いモデルをテストするために使用します。テストデータは分析や精査を行わず、モデルのテストに必要になるまで未使用のままにしておく必要があります。そうすることで、トレーニング結果を汚染する可能性のあるデータの慣れに基づいた思い込みを避けることができます。

データを分割するときに覚えておくべき重要な事項を以下に示します。

  • 2 つの異なる日付範囲やデータ収集システムから取得したインスタンスなど、事前に分割されたいくらかのデータを使用するよりも、1 つの大きなデータセットからのサブセットをランダムにサンプリングする方が適切です。後者のアプローチでは、過剰適合につながる可能性のある不均一性のリスクが高まります。

  • 理想的には、データセットにインスタンスを割り当て、その関連付けをプロセス全体を通じて維持する必要があります。

  • 異なるデータセットの適正な比率については、専門家の意見が異なります。ただし、特定の比率に関係なく、トレーニング データを評価データよりも多く、評価データをテストデータよりも多くする必要があります。

データの特徴エンジニアリングを実施する

モデルを作成する前に、トレーニング データをよく理解する必要があります。データのパターンを探し、どんな値がターゲット属性に影響するかを考えます。モデルに重要なデータを決定するこのプロセスは、特徴エンジニアリングと呼ばれます。

特徴エンジニアリングは、生のデータから使用する属性を決定するだけのプロセスではありません。より困難でより重要なこともある作業は、特定のデータから一般化が可能な直説的な特徴を抽出することです。つまり、所有しているデータと、問題空間に関する知識を組み合わせて、本当に必要なデータを取得することを意味します。それは複雑なプロセスになる可能性があり、それを正しく行えるかどうかは、問題の主題と目標の理解にかかってきます。ここにいくつかの例を示します。

データ例: 住所

人に関するデータには住所が含まれることがありますが、これは一貫性を持たせることが難しい複雑な文字列であり、そのままでは多くのアプリケーションにとって特に有用ではありません。通常は、そこから意味のある特徴を抽出する必要があります。住所から抽出できる項目の例を次に示します。

  • 経度と緯度
  • 周辺
  • 最も近い小学校
  • 選挙区
  • ランドマークとの相対的な位置

データ例: タイムスタンプ

データのもう 1 つの共通項目は、タイムスタンプです。通常は、共通の参照ポイントからの経過時間を示す大きな数値です。正確なタイムスタンプから抽出できる項目の例を以下に示します。

  • 時間
  • 別のイベントからの経過時間
  • 時刻(午前、午後、夕方、夜)
  • その時間になんらかの施設が開いていたか閉まっていたか
  • イベントの頻度(他のインスタンスと組み合わせて)
  • 太陽の位置(緯度と経度の組み合わせで)

上記の例について注意すべき重要な点をいくつか挙げます。

  • 複数の属性を組み合わせて、一般化が可能な 1 つの特徴を作成できます。たとえば、住所とタイムスタンプで太陽の位置を知ることができます。

  • 特徴エンジニアリングを使用してデータを簡素化できます。たとえば、時刻のタイムスタンプは、見かけ上無数の値を持つ属性をとりますが、それを 4 つのカテゴリまで減らします。

  • インスタンス間のエンジニアリングによって、有益な特徴を取得し、データセット内のインスタンス数を減らすることができます。たとえば、複数のインスタンスを使用して何かの頻度を計算します。

以上のステップを完了すると、モデルをトレーニングするときに使用する特徴のリストが完成します。

プロセスの最も難しい部分の 1 つは、正しい特徴セットが得られたタイミングの判断です。予測の精度に影響を与えそうな特徴を知ることが難しい場合があります。機械学習の専門家は、よく柔軟性と実験が必要な分野であることを強調しています。最初の試行で完璧になることはないため、最良の推測を行い、結果を利用して、次の反復に情報を与えます。

データを前処理する

これまで、このページでは、モデルをトレーニングするためのデータを準備する際に一般に適用できる手順について説明しました。この時点まで、データがどのように表現され、フォーマットされているかは重要ではありません。前処理は次のステップです。準備したデータを、モデルをトレーニングするために使用するツールとテクニックで動作する形式にします。

データ形式と AI Platform

AI Platform はデータ形式に依存しません。トレーニング アプリケーションに適切であれば、どの入力フォーマットでも使用できます。つまり、TensorFlow が読み取れる形式で入力データを用意する必要があります。また、AI Platform プロジェクトがアクセスできる場所にデータを格納する必要もあります。たいていの場合、最も簡単な解決策は、GCP プロジェクトがアクセスできる Cloud Storage バケット内の CSV ファイルを使用することです。疎ベクトルやバイナリデータなどの一部のデータ型は、TFRecord ファイルにシリアル化された TensorFlow の tf.train.Example 形式を使用すると、より適切に表現できます。

データの変換

生の特徴データに対して実行すると役立つ変換が多数あります。一般的なものをいくつか次に示します。

  • 一定のスケール(通常は -1 と 1 の間、または 0 と 1 の間の範囲)で表されるように数値を正規化する。
  • カテゴリ特徴をインデックス値やワンホット ベクトルに変更するなど、数値以外のデータを数値で表現する。
  • 生のテキスト文字列を、bag of words などのより簡潔な表現に変更する。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

TensorFlow 用 Cloud ML Engine