データサイエンスのためのlinear algebra(線形代数)入門【機械学習で使う行列演算】

データサイエンスのためのlinear algebra(線形代数)入門【機械学習で使う行列演算】 AI資格・学習

はじめに

「機械学習を理解しようとしたら線形代数が壁になった」という声をよく聞きます。行列・ベクトル・固有値分解など、最初は難しく見えますが、NumPyで実際に計算してみると意外とシンプルです。E資格・DS検定に向けた線形代数の要点をPythonで解説します。

ベクトルと行列の基本操作

import numpy as np

# ベクトル(1次元配列)
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])

print('内積:', np.dot(v1, v2))          # 1*4 + 2*5 + 3*6 = 32
print('ノルム(長さ):', np.linalg.norm(v1))  # √(1+4+9) ≒ 3.74
print('コサイン類似度:', np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))

# 行列
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

print('行列積 A@B:')
print(A @ B)  # numpy の @ 演算子が行列積

print('転置 A.T:')
print(A.T)

print('逆行列:')
print(np.linalg.inv(A))

線形回帰の行列表現

# 線形回帰の正規方程式: β = (X^T X)^{-1} X^T y
import numpy as np

# データ
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]])  # 最初の列はバイアス項
y = np.array([2, 4, 5, 8])

# 正規方程式で係数を計算
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print(f'切片: {beta[0]:.3f}, 傾き: {beta[1]:.3f}')

# 予測値
y_pred = X @ beta
print(f'予測値: {y_pred.round(2)}')

固有値分解とPCA(主成分分析)

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import japanize_matplotlib

# データ準備
iris = load_iris()
X = StandardScaler().fit_transform(iris.data)

# 共分散行列の固有値分解
cov_matrix = np.cov(X.T)
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)

# 固有値が大きい順に並べ替え
idx = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]

# 寄与率
explained_ratio = eigenvalues / eigenvalues.sum()
print('各主成分の寄与率:')
for i, ratio in enumerate(explained_ratio):
    print(f'  PC{i+1}: {ratio:.3f} ({ratio*100:.1f}%)')

# 2次元に圧縮
X_pca = X @ eigenvectors[:, :2]

# 可視化
plt.figure(figsize=(8, 6))
for target, name in zip(range(3), iris.target_names):
    mask = iris.target == target
    plt.scatter(X_pca[mask, 0], X_pca[mask, 1], label=name, s=50)
plt.xlabel(f'PC1 ({explained_ratio[0]*100:.1f}%)')
plt.ylabel(f'PC2 ({explained_ratio[1]*100:.1f}%)')
plt.title('PCAによる次元削減(4次元→2次元)')
plt.legend()
plt.show()

まとめ

機械学習で必須の線形代数の概念は、内積(コサイン類似度・注意機構)、行列積(ニューラルネットワークの重み計算)、逆行列(線形回帰の正規方程式)、固有値分解(PCA)です。NumPyで実際に計算してみることで、抽象的な数式が具体的に理解できます。E資格の数学問題はこれらの概念が中心なので、コードと数式を対応させて学習しましょう。

📌 プログラミング・AI学習のおすすめスクール

※本記事にはアフィリエイトリンクが含まれます。

コメント

タイトルとURLをコピーしました