Pythonで学ぶ機械学習のためのデータ準備
機械学習モデルは数値から学び、特徴量のスケールがそろっているほどよく学習します。正規化と標準化はデータのスケールを整え、行列の掛け算はモデルが多くの特徴量を一度に組み合わせる方法です。
やさしい言葉で概念を理解する
機械学習モデルは数値から学び、特徴量のスケールがそろっているほどよく学習します。正規化と標準化はデータのスケールを整え、行列の掛け算はモデルが多くの特徴量を一度に組み合わせる方法です。
Min-max正規化とzスコア標準化で特徴量をスケーリングし、行列の掛け算を手で計算します。
重要なポイント
- スケールが大きく異なる特徴量があると、大きな数値がモデルを支配してしまいます。
- Min-maxは値を0から1に収め、zスコアは分布の形を保ったまま中心を0にします。
- スケーリングの値は学習データで計算し、新しいデータにも同じ値を使います。
- 行列の積A × Bでは、Aの列数とBの行数が一致している必要があります。
どのような場面で使う?
- ニューラルネットワークやAIライブラリの内部で何が起きているかを理解する。
- 対応するチャレンジで実装する前に考え方をつかむ。
- 機械学習の講座、面接、プロジェクトに備える。
動かして理解する
x5を動かして外れ値を作り、min-maxとzスコアの反応を比べましょう。A·Bのセルを指すと、どの行と列を使うかがわかります。
サンプルコード
main.py
import statistics
heights = [150, 160, 170, 180, 190]
# Min-max scaling squeezes values into the range 0..1.
low, high = min(heights), max(heights)
print("min-max:", [round((h - low) / (high - low), 2) for h in heights])
# Z-score standardization centres values on 0 with a spread of 1.
mean = statistics.mean(heights)
std = statistics.pstdev(heights)
print("z-scores:", [round((h - mean) / std, 2) for h in heights])
# Matrix multiplication: each output is a row of A dotted with a column of B.
A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
product = [[sum(A[i][k] * B[k][j] for k in range(2)) for j in range(2)] for i in range(2)]
print("A x B:", product)
期待される出力
min-max: [0.0, 0.25, 0.5, 0.75, 1.0]
z-scores: [-1.41, -0.71, 0.0, 0.71, 1.41]
A x B: [[19, 22], [43, 50]]
仕組み
Min-maxスケーリングは最も低い身長を0、最も高い身長を1にします。zスコアは平均を引いて標準偏差で割るので、値は0を中心に並びます。行列の積では、各セルはAの行とBの列を要素ごとに掛けて合計したものです。
値を変更し、PythonをインストールせずにCodeUtilityオンラインPythonコンパイラで実行できます。
練習問題
入力値と境界ケースを変更し、より大きなデータでも動作を確認してください。
- 入力や重みを変えて、実行前に出力を予想してみましょう。
- 途中の値を出力して、計算の各ステップを追いましょう。
- 下のリンクのチャレンジを解いて、自分でアイデアを実装しましょう。
チャレンジで練習する
このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。
- 行列の積 2つの行列を掛け合わせます。ニューラルネットワークのすべての層の裏にある計算です。 簡単
- 最小最大正規化 特徴量を、最小値が 0、最大値が 1 になるようにスケーリングします。 簡単
- Zスコア標準化 特徴量を平均 0、標準偏差 1 にそろえます。 簡単