DataVecを使ったデータ変換と正規化

機械学習フレームワークDeeplearning4jにおいて、DataVecはデータの準備や前処理に用いられる専用ライブラリです。ここでは、DataVecを用いたデータ変換および**正規化(Normalization)**について詳しく説明します。


1. DataVecとは

DataVecは、CSVや画像、テキストなどの様々な形式のデータを、機械学習モデルが扱える形式(例えばINDArray)に変換するためのツールです。DataVecは以下のような処理を支援します:

  • データのインポート

  • 前処理(クリーニング、変換、フィルタリングなど)

  • ベクトル化(特徴量抽出)

  • 正規化・標準化


2. 基本構成とパイプライン

DataVecの前処理は主に**RecordReaderTransformProcessRecordReaderDataSetIterator**を使って構築されます。

例:CSVファイルの読み込みから正規化まで

java
// ステップ1: RecordReaderの定義 RecordReader recordReader = new CSVRecordReader(1, ','); recordReader.initialize(new FileSplit(new File("path/to/data.csv"))); // ステップ2: スキーマ定義 Schema schema = new Schema.Builder() .addColumnInteger("ID") .addColumnCategorical("Gender", Arrays.asList("Male", "Female")) .addColumnDouble("Height") .addColumnDouble("Weight") .build(); // ステップ3: TransformProcessの定義(変換処理の定義) TransformProcess transformProcess = new TransformProcess.Builder(schema) .removeColumns("ID") // 不要な列を削除 .categoricalToOneHot("Gender") // カテゴリ変数のOneHot化 .normalize("Height", TransformProcess.Normalization.Standardize) // 正規化 .normalize("Weight", TransformProcess.Normalization.Standardize) // 正規化 .build();

3. 主な変換処理の例

カテゴリ変数のエンコーディング

  • categoricalToOneHot():One-Hotベクトルへ変換

  • categoricalToInteger():整数ラベルへの変換

数値変数の正規化

  • normalize():正規化(Min-Max, Zスコアなど)

    • Normalization.Standardize:Zスコア正規化(平均0, 標準偏差1)

    • Normalization.MinMax:Min-Maxスケーリング([0,1] にスケーリング)


4. TransformProcessを使った変換の実行

java
List<List<Writable>> rawData = new ArrayList<>(); while (recordReader.hasNext()) { rawData.add(recordReader.next()); } List<List<Writable>> processedData = LocalTransformExecutor.execute(rawData, transformProcess);

この段階で、機械学習モデルが利用可能な前処理済みデータが得られます。


5. データセットの作成とモデルトレーニングへの応用

変換されたデータをDataSetIteratorに渡すことで、Deeplearning4jのニューラルネットワークに直接供給できます。

java
int labelIndex = 3; // ラベルのカラム位置 int numClasses = 2; // 分類クラス数 int batchSize = 10; DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader, batchSize, labelIndex, numClasses);

まとめ

処理内容 使用クラス/メソッド
CSV読み込み CSVRecordReader
スキーマ定義 Schema
前処理定義 TransformProcess
カテゴリ→OneHot categoricalToOneHot()
正規化処理 normalize()
実行 LocalTransformExecutor.execute()
学習用Iterator RecordReaderDataSetIterator

DataVecは、データの準備工程をコードで明確に定義できるため、再現性の高い前処理パイプラインを構築できます。これは実運用において非常に重要な利点です。

生成日:2025/05/23