リンゴの木は、素晴らしい果物と乱雑な品種が混在しています。しかし、高級食料品店のりんごは 100% 完璧な果物を取っています。 果樹園と食料品店の間では、時間をかけて不良リンゴを取り除いたり、回収されたワクチンに小さなワックスを投げたりしています。ML エンジニアは、不適切なサンプルを排除して対処可能なサンプルを取り除くために、膨大な時間をかけることができます。たとえわずかなだけのリンゴでも、大量のデータセットを台無しにする可能性があります。
特徴値のスケーリング
スケーリングとは、浮動小数点特徴値を自然な範囲(100 ~ 900 など)から標準範囲(0 ~ 1 または -1 ~+1 など)に変換することを意味します。機能セットが 1 つの機能だけで構成されている場合、スケーリングによるメリットはほとんどありません。ただし、特徴セットが複数の特徴で構成されている場合は、特徴のスケーリングに次のようなメリットがあります。
- 勾配降下法の収束を高速化します。
- モデル内の 1 つの数値が NaN になる(たとえば、トレーニング中に値が浮動小数点精度の上限を超える)場合に、NaN トラップを避けることができます。また、数学演算によって、この数値が最終的に NaN になります。
- モデルで各特徴の適切な重み付けの学習に役立つ特徴スケーリングを使用しないと、モデルは、より広い範囲を持つ特徴に過度に注意を払います。
すべての浮動小数点特徴にまったく同じスケールを与える必要はありません。特徴 A が -1 から +1 にスケーリングされ、特徴 B が -3 から +3 にスケーリングされる場合、ひどいことはありません。ただし、特徴 B が 5000 から 100, 000 にスケーリングされると、モデルの反応が低下します。
極端な外れ値の処理
次のプロットは、カリフォルニアの住宅データセットの roomsPerPerson
という特徴を表します。roomsPerPerson
の値は、あるエリアの総客室数をそのエリアの人口で割って算出しました。プロットでは、カリフォルニア州の大半の地域が 1 人につき 1 ~ 2 つの部屋を持つことが示されています。しかし、X 軸を見ると、
図 4. とてつもない lonnnnnnng tail。
極端な外れ値の影響を最小限に抑えるには、どうすればよいでしょうか。一つは、すべての値のログを、
図 5. 対数的スケーリングにはまだ改善の余地があります。
ログのスケーリングは多少適切に行われますが、それでも外れ値の値のかなりのテールがあります。さらに別のアプローチを選んでみましょう。単純に「キャップ」または「クリップ」を使用すると、roomsPerPerson
の任意の値(最大値 4.0)が最大値になります。
図 6: 特徴値を 4.0 でクリッピング
特徴値を 4.0 にクリッピングしても、4.0 を超える値はすべて無視されるわけではありません。4.0 より大きい値はすべて 4.0 になります。4.0 の個性的な丘の説明です。その丘はあっても、スケーリングされた対象物セットは元のデータよりも有用です。
ビニング
次のプロットは、カリフォルニア州の緯度に位置する住宅の相対的な普及率を示しています。クラスタリングの結果、ロサンゼルスは緯度 34、サンフランシスコはおよそ緯度 38 にあります。
図 7.
データセットにおいて、latitude
は浮動小数点値です。ただし、このモデルでは latitude
を浮動小数点特徴として表すのは意味がありません。緯度の値と住宅の値の間には線形関係がないため、これは関係ありません。たとえば、緯度 35 の住宅は、緯度 34 の住宅より \(\frac{35}{34}\) 高価(または安価)ではありません。それでも、個々の緯度は、住宅の価値を予測する強力な指標と言えます。
緯度を有用な予測因子にするには、次の図に示すように、緯度を「ビン」に分割します。
図 8. 値のビニング。
1 つの浮動小数点特徴を持つのではなく、11 個の異なる特徴(LatitudeBin1
、LatitudeBin2
、...、LatitudeBin11
)を持つことができるようになりました。11 個の別個の特徴量はあまり洗練されていません。そのため、これらの特徴を 1 つの 11 要素ベクトルに結合します。これにより、次のように緯度 37.4 を表すことができます。
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
ビンニングのおかげで、モデルでは緯度ごとにまったく異なる重みを学習できるようになりました。
診察衣
これまでは、トレーニングとテストに使用されるデータはすべて信頼できるものと想定していました。実際には、データセット内の多くのサンプルは、次のうち 1 つ以上が原因で信頼性が低下しています。
- 省略された値。たとえば、人物が家の年齢の値を忘れたなどです。
- 重複する例: たとえば、サーバーが同じログを誤って 2 回アップロードした可能性があります。
- 不適切なラベル。たとえば、オークの木の写真にカエデのラベルが誤って付けられたとします。
- 特徴値が正しくない。たとえば、ユーザーが余分な桁を入力したり、温度計を太陽に落としたりした場合です。
問題が検出されると、通常はサンプルをデータセットから削除して「悪い例」を修正します。省略された値または重複したサンプルを検出するには、簡単なプログラムを作成します。不正な特徴値やラベルを検出するのははるかに困難です。
悪い個別サンプルを検出するだけでなく、集計内の不良データも検出する必要があります。ヒストグラムは、データを集計して視覚化するための便利なメカニズムです。また、次のような統計情報も取得できます。
- 最大値と最小値
- 平均値と中央値
- Standard deviation
個別の特徴に最も一般的な値のリストを生成することを検討してください。たとえば、country:uk
を持つサンプルの数が想定した数と一致するようにします。データセットで language:jp
を最も一般的な言語にすべきか。
データについて知る
次のルールに従ってください。
- どのようなデータになるか、考えてください。
- データがこれらの要件を満たしていることを確認します(そうでない場合は説明できます)。
- トレーニング データが他のソース(ダッシュボードなど)と一致していることを再確認します。
ミッション クリティカルなコードの取り扱いに注意してデータを扱います。優れた ML は優れたデータを必要とします。
その他の情報
機械学習のルール、ML フェーズ II: 特徴量エンジニアリング