機械学習による実用アプリケーション構築⑥ 第4章 初期データセットの取得②

4.3 データの傾向を見つけるためのラベル

データセットの傾向を特定するのは、品質だけでなく、モデル構造を予め予測するための作業。

このために、データを異なるクラスタに分離して各クラスタの共通点を抽出する。 まずは、データセットの要約統計量を生成し、データセットを手早く探索する方法を確認する。

4.3.1 要約統計量

データセットを確認する場合は、一般的にはまず各特徴量の要約統計量を確認することから始める。 → クラスを分離する簡単な方法を特定するのに役立つ。

クラス間の分布がどのように異なるかを特定しておくとMLのモデリング作業が容易になる。

例えば、ツイートが肯定的か、否定的かを予測する場合に、 各ツイートに含まれる単語数の平均を数えることから始めて、そのヒストグラムをプロットしてみると 肯定的なツイートの方が、否定的なツイートよりも短いか長いかが分かれば単語長を予測因子として追加する などの行動がとれるようになる。

分布が分かれているとクラスを分離する特徴量として有用

4.3.2 効率的なデータ探索とラベル付け

データを直感的に理解するためには時間をかけて個々のデータポイントを調べる必要がある。 ただ、ランダムにデータセットのポイントを調べるのは非効率。このセクションでは、可視化を効率的に行う方法を説明。

ベクトル化 → 次元削減 → クラスタリング の順に行う

データに基づいてクラスタリングした後に各クラスタを個別に調べて クラスタ間の類似点、相違点を調べることはデータセットの構造を特定する優れた方法。

このときに注意するポイント

  • データセットをいくつのクラスタに分けるか
  • それぞれのクラスタがどのように異なっていると考えられるか。どのような点からそのように考えられるか。
  • 他のクラスタよりもはるかに密度が高いクラスタがあるか、もしある場合はモデルは疎の領域でうまく働かない可能性がある。
  • すべてのクラスタはモデル化が難しいと思われるデータを表しているか

密度が高いところに関してはデータや特徴量で分離してあげられれば、問題を軽減できる

4.3.2.1 ベクトル化

表形式データ
  • 連続的な特徴量:共通の尺度に正規化。標準化やMINMAXNormalizationなど
  • カテゴリ特徴量:ワンホットエンコーディング
  • 日付などの複雑な特徴量:顕著な特徴を捉えたいくつかの数値特徴に変換される必要がある。 年や日や曜日を抽出してカラムを追加するなど
テキストデータ
  • カウントベクトル(単語の登場回数のカウント数) これは単純に単語をカウントするだけなので、単語の順序などは考慮されていない
  • 概念化の類似性を加味したベクトル(word2vecなど) どの単語が類似した文脈で出現する傾向があるかを学習する
画像データ

画像データはすでにベクトル化されている。テンソルと呼ばれる多次元の数値配列。 事前学習済みのニューラルネットワークを用いることでより高い表現力を持つベクトルを利用することができる。(転移学習) 少数のデータセットのパフォーマンスを上げるときには特に有用。ただし、事前学習モデルに偏りが生じている場合もあるので、 留意が必要

データ形式のベクトル化したものをさらに類似したデータポイントをグループ化することでデータセットの傾向をより迅速に確認できる

4.3.2.2 次元削減

アルゴリズムにはベクトル表現が必要だが、一般的に2次元以上であることが多いので可視化することは難しい 仮に14次元を表現するにはどうするか?

より低次元変換(3次元とか)して14次元の情報をできる限り持たせてあげるのが次善の策になる。 t-SNEやUMAPなどを用いると高次元データを2次元平面で表現することが可能になる。

これらの射影はデータパターンのヒントや調査のきっかけにできる。

データをベクトル化してプロット → 類似したデータポイントのグループを体系的に識別 → それぞれを調査

4.3.2.3 クラスタリング

データセットの検査をするための分類やモデルのパフォーマンスを分析する際でもクラスタリングは中核となるツール 次元削減と同様に問題点や興味深いデータポイントを明らかにするための追加の方法としてクラスタリングを使用する。

実際とる方法としてはK-Meansなどの単純なアルゴリズムをいくつか試して、 いいパフォーマンスを示すクラスタ数やハイパーパラメータなどを微調整すること。

パフォーマンスは

  • データの可視化
  • エルボー法
  • シルエットプロット

のような方法を組み合わるだけで十分。データを完全に分類するのが目的ではなく、 モデルに対して問題のある領域を特定するのが目的のため。

クラスタを作成したら各クラスタを調べてそれぞれのデータ傾向を特定する。 そのためにクラスタ毎にいくつかのポイントを選択して、モデルが生成するだろうラベルを付与することを実行する。 次のセクションでその方法について説明。

<まとめ元:オライリー機械学習による実用アプリケーション構築>