NumPyの応用例(データ分析・機械学習の前処理)

NumPy入門⑩ NumPyの応用例(データ分析・機械学習の前処理)

データ分析とNumPy

NumPyはPandasやscikit-learnなどのライブラリの基盤となっており、機械学習の前処理や統計分析に欠かせません。
ここでは代表的な応用例を紹介します。

データの正規化(スケーリング)

機械学習アルゴリズムでは、特徴量のスケールを揃えることが重要です。
NumPyを使えば平均0・標準偏差1に正規化できます。

import numpy as np

data = np.array([[50, 200],
                 [60, 220],
                 [70, 240]])

mean = np.mean(data, axis=0)
std  = np.std(data, axis=0)

normalized = (data - mean) / std
print(normalized)

欠損値処理

データに欠損がある場合、NumPyで簡単に処理できます。

data = np.array([1, 2, np.nan, 4, 5])

# 欠損を無視した平均
print(np.nanmean(data))  # 3.0

# 欠損を特定の値で置換
filled = np.nan_to_num(data, nan=0)
print(filled)  # [1. 2. 0. 4. 5.]

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

機械学習に入力する際、カテゴリデータを数値化する必要があります。
NumPyを使えば簡単にワンホットエンコーディングが可能です。

labels = np.array([0, 1, 2, 1, 0])  # 3種類のカテゴリ
num_classes = np.max(labels) + 1

one_hot = np.eye(num_classes)[labels]
print(one_hot)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]
#  [0. 1. 0.]
#  [1. 0. 0.]]

特徴量の組み合わせ

特徴量同士を結合して新しい入力を作成するのも前処理でよく行われます。

x1 = np.array([1, 2, 3])
x2 = np.array([10, 20, 30])

features = np.column_stack((x1, x2))
print(features)
# [[ 1 10]
#  [ 2 20]
#  [ 3 30]]

行列演算によるモデル表現

線形回帰モデルもNumPyで簡単に表現できます。

# データ行列 X と パラメータ w
X = np.array([[1, 50],
              [1, 60],
              [1, 70]])  # 1列目はバイアス項
w = np.array([0.5, 1.2])  # パラメータ

y_pred = X @ w
print(y_pred)  # 予測値

まとめ

  • NumPyは機械学習やデータ分析の基盤として前処理に必須
  • 正規化・欠損値処理・カテゴリデータ変換などで利用可能
  • 特徴量の組み合わせや線形回帰モデルの表現にも役立つ