13. 特徴ベクトルと数値データ#
13.1. 達成目標#
同じデータセットであったとしても、タスク毎に適切な特徴量は異なることを理解する。
数値データに対する前処理の意義を理解する。
前処理のいくつかの手法を適用し、特徴空間の可視化による比較や、学習結果の比較から前処理の妥当性について検討することができる。
13.2. そもそも特徴ベクトル(データ)とは何か#
Twitterが持つデータを全て利用できると仮定して検討してみよう。
全利用者を「似たようなユーザ群、例えばゲームに興味があるといった趣味を主体としたクラスタ」に分けるには、どのような特徴が有効に機能するだろうか?
あるユーザの年齢層を推定するには、どのような特徴が有効に機能するだろうか?
クラスタリングタスクの検討例
下記9サンプルからなるデータセットを与えられたとき、どう特徴ベクトルを設計するとよいだろうか?
「図形の形」でクラスタを作らせたい?
「図形の色」?
「着色パターン」?
サマリ
特徴ベクトル(feature vector) とは、その名の通り特徴量で構成されたベクトルのこと。一つのサンプルは、N次元ベクトル空間における1点として表されることになる。近い点は類似しているサンプルになっていることが理想的だが、「似ている」といっても多面的であり、特徴量の用意の仕方や、距離もしくは類似度の尺度等、はたまたデータセット自体に含まれるミス・ノイズ等、多様な要因により必ずしもその通りになるとは限らない。
一般的には、生のデータは多様な情報が複雑に絡みあっており、そのままでは利用しづらいことが多い。そのため、解決したい問題を機械学習しやすいタスクとして設計し、そのタスクに有効に機能する 特徴量(feature) を用意してやる必要がある。 特徴量エンジニアリング(feature engineering) とは、与えられたデータ、モデル、タスクに適した特徴量を作り上げるプロセスのこと。
-
Feature engineering is the process of using domain knowledge of the data to create features that make machine learning algorithms work.
-
13.2.1. 特徴ベクトルの定式化#
より一般的には、特徴ベクトル による表現とは「入力xを、実数値を要素とするベクトル
Hint
特徴ベクトルによる表現を踏まえ、前述した図形の例で設計&表現してみよう。図形の形でクラスタを作りたい状況ならば、例えば以下のような3つの特徴量を考える(
1次元目は、図形の形が丸なら1、それ以外なら0。
2次元目は、図形の形が三角なら1、それ以外なら0。
3次元目は、図形の形が四角なら1、それ以外なら0。
このように1つの次元で一つの特徴量を表現することを特徴量設計と呼ぶ。またこのように各次元の特徴量を数値表現に置き換える部分は 特徴量関数 や 素性関数 と呼ぶことが多い。関数として書き直すと以下のようになる。なお、
同様に2次元目、3次元目についても
目的タスクに有効に機能する特徴量を設計することを特徴量エンジニアリングと呼ぶ。
(estimator=)
13.2.2. 検討:特徴ベクトルに基づく推論#
vector_functionで表現された入力が与えられたとして、それを正しいカテゴリに分類する方法を検討することにしよう。
素朴なアプローチの一つは、特徴ベクトルの各特徴量を頭から最後まで捜査し、その値に応じて判断するモデルを構築することだろう。先程の画像から形状を推定するモデルを構築したいならば、例えば次のようなものを考えることができる。なお、
このように機械学習や数学における モデル(model) とは、ある入力が与えられたときの予測結果を返すものであり、一般的にはパラメータ付き数式により表現することが多い(ただし上記例はパラメータがない例になっている)。
13.2.3. 振り返り:線形回帰モデルに基づく推論#
線形回帰モデルを振り返ってみると、ここでいうモデルとは以下のように定式化される。
まず、特徴ベクトルと同じサイズの実数値ベクトルである 重みベクトル(weight) を考える。重みベクトルを
ここで、
上記の線形回帰モデルの式で例えるならば、何かしら
繰り返しになるが、重み
このように、機械学習ではあるモデルを仮定し、その重みベクトルをパラメータと見なし、学習データに合うようにパラメータを求める問題として捉える。すなわち パラメータ推定により解くことを目指す。
Tip
2017年頃から広まってきた大規模言語モデルは、その時点でパラメータ数が数百万〜数億個のモデルであった。現在は7B〜120B(70億〜1200億)個のパラメータを持つモデルも増えてきている。
参考
日本語に強い大規模言語モデル「Swallow」を公開, 2023年12月19日。
13.3. 数値データ#
13.3.1. カウントデータ#
Twitterにおける1ユーザの、1日あたりの投稿数やlike数。もしくはfollowerの多いユーザ数等、日常には様々な「カウントデータ」が存在する。カウントデータは、「実在する店舗における入客数」「在庫数に伴う販売上限」のように実世界における数である場合には上限が定まることもあるが、物理的な障壁がない場合、例えばYouTubeにおける動画再生数等のような場合には天井知らずである。このため、基本的には「カウントしたデータ」は上限がなく、外れ値(極端に大きい数値)が出現しやすいものとして扱うほうが良いことが多い。
そもそも外れ値とは?
「統計学において、他の値から大きく外れた値」
同ページにある外れ値検定の手法例についても参照。
外れ値があるとどういう問題がある?
極端に大きな数値をそのまま扱うと、例えば、線形回帰モデルで構築したモデルが外れ値に引きずられすぎてしまい、真のモデルからズレたモデルとなる可能性がある。
ここで「外れ値に引きずられる」とは、外れ値に対する誤差を縮めようとすることを指す。外れ値以外のサンプルに対しても同様に誤差が小さくなるように調整するが、サンプル数が少なかったり、それを上回る程の大きな数値の場合には外れ値の影響が強くなってしまう。
e.g., Amazon CloudWatch Anomaly Detection: Amazon CloudWatch、機械学習により異常値(アノマリー)を自動検出できる新機能 | AWS News Blog
どう対応すると良いのか?
外れ値をデータセットから除外する。
目的達成のために不要であれば、除外するのが最もシンプル。ただし、外れ値判定に注意。どのようなケースでも適している「銀の弾丸」は存在しないため、タスクに応じて検討することになる。
e.g., 動画再生数100回未満はあまりにも少ないので、無視しよう(データセットから除外しよう)。
特徴空間、もしくは特徴ベクトル空間を調整(別空間に写像)する。
特徴量のスケール調整(feature scaling)とも呼ばれる。(下記例に続く)
13.3.2. 説明変数毎の大きさの違い#
1週目に例示した血液検査における検査項目は、数値で表されている項目に限定すると、すべての項目が数値で表されているため、多次元空間上の点としてプロット可能である。その一方で、属性ごとの値の意味や高低の基準は不揃いであり、ASTが30U/L, 総コレステロールが150mg/dLのように桁が異なる数値が並んでしまうと扱いにくくなることが多い。例えば
このように数量的に意味合いや度合いが異なる特徴量を上手く取り扱うための前処理は スケーリング(scaling) と呼ばれており、特に 正規化(z-score normalization) や 標準化(standalization; min-max normalization) が良く用いられる。正規化は最小値を0、最大値を1となるように調整する。これに対し標準化は平均が0、標準偏差が1となるように調整する。
Tip
どちらのケースも省略して normalization と書いていることがある。前後の文脈から正規化のことか標準化のことか読み分けるようにしよう。
Note
標準化では変数
変換された新しい値を z値 と呼ぶことがあります。変換後の確率変数は「平均0、標準偏差1」となるように変換されます。言い換えると、z値は「平均からの距離が標準偏差で何個分あるかを表す」ようになります。
例えばあるサンプルのz値が0.0ならば、これは平均と全く一緒になるため「珍しくないサンプルである」ということが言えるでしょう。これは、統計的な意味のx軸が0の部分に相当し、最も頻出する値を意味しています。
別サンプルのz値が+1.5である(平均から1.5σ離れている)ならば、「平均から1.5σだけ離れた場所にあることを意味しており、分布の散らばり具合からはやや外れている少し珍しいサンプルである」と言えるでしょう。何故ならば、正規分布に従うならば±1σ範囲に約68%のサンプルが含まれるはずですが、+1.5σはそれよりも離れた場所にあるからです。
もし、標準化前の元データが正規分布に従う場合、標準化後の値を統計的な意味に沿って解釈することができます。
元データが正規分布に従わない場合には、正規分布を前提とした解釈はできなくなってしまいますが、平均値からの離れ具合としての目安としては利用できます。このため、異なる単位単位を持つ値同士を間接的に比較することがやりやすくなります。
13.3.3. 相対的な値#
これまで見てきた観点とは異なり「方角」「緯度経度」のような毛色の異なる数値がある。何が異なるかというと、例えば北を基準方向として時計回りに角度を設定する場合を想像してみよう。北は0度、東90度、南180度、西270度である。このとき数値だけを見ると
このように相対的な(ここでは更に周期性をもつ)説明変数は取り扱いが難しい。あらゆる変数に対し画一的に利用できる手法というものは残念ながら無いため、ここでは基本的な考え方を述べるに留める。
距離として利用したいのであれば、距離を測定できる形に写像しよう。前述した方角の場合には
13.4. 数値データに対する前処理コード例#
ここまで見てきた前処理の実例を眺めてみよう。
13.5. 課題レポート2:前処理してみよう or 演習#
課題レポート1で取り上げたデータセットについて、以下のことに取り組め。
13.5.1. Level 1: 前処理の適用。(30分想定)#
Level 1. preprocess_numerical.ipynbを参考に、何か一つ以上の特徴に対して前処理を施せ。なお、選択理由についても検討すること。
例えば、2値化(binarization)を選んだのであれば、その理由は何故か?
レポートには、(a) 適用しようと考えた前処理、(b) それを選んだ理由の2点について100〜200字程度で述べよ。
13.5.2. Level 2. 特徴量の変化。(1時間想定)#
適用前と適用後の値(ベクトルを構成する各要素)がどのように変わっているか、確認しやすいように可視化せよ。可視化の手法は問わない。
13.5.3. Level 3. 新しい条件による実験。#
前処理後のデータを用い、分類タスクを実行せよ。課題レポート1の結果(前処理なしでの結果)と比較し、考察せよ。 なお、前処理後のデータを用いる際には、前処理した特徴を置き換える形で利用することを想定しているが、何か理由があって「前処理前のデータと前処理後のデータを同時に特徴量として扱いたい」のであれば、その理由を述べた上で使おう。
特徴量以外の条件は実験1と同一とすること。
レポートには、(a) レポート1の結果と比較できるように2つの実験結果を併記し、(b) 良し悪しを踏まえて前処理が性能向上に寄与したかどうかを述べること。
Note
レポート2では前処理を適用し、比較することを目的としています。性能向上しなかったから減点するということはありません。ありのまま報告してください。
13.6. 予習:カテゴリデータの前処理#
カテゴリデータに対する前処理(特徴として扱うための方法)について概説している5.3.4. Encoding categorical featuresを読み、自分なりに疑問点等気になる事柄を整理せよ。
疑問等は、次回授業の前日までに、別途用意するフォームに入力すること。