はじめに
「機械学習を理解しようとしたら線形代数が壁になった」という声をよく聞きます。行列・ベクトル・固有値分解など、最初は難しく見えますが、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学習のおすすめスクール
- 資格と仕事に強い個人レッスン → 【Winスクール】プログラミング・AI講座

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


コメント