応用数学
1.線形代数
1.1, 1.2 スカラー・ベクトル・行列
・スカラー:四則演算が可能, ベクトルに対する係数
・ベクトル:「大きさ」と「向き」を持つ, 矢印, スカラーのセットで表示される
・行列:スカラーを表にしたもの,ベクトルを並べたもので, 以下の式は2×2の行列
\begin{bmatrix}
a & b \\
c & d \\
\end{bmatrix}
行列とベクトルの積(例)
\begin{bmatrix}
6 & 4 \\
3 & 5 \\
\end{bmatrix}
\begin{bmatrix}
1 \\
2 \\
\end{bmatrix}
=
\begin{bmatrix}
6×1 + 4×2 \\
3×1 + 5×2 \\
\end{bmatrix}
=
\begin{bmatrix}
14 \\
13 \\
\end{bmatrix}
1.3 連立一次方程式・逆行列
・連立方程式:関係式のセット, 連立1次方程式は2つの未知数が使われる
\begin{cases} x_1 + 2x_2=3 \\ 2x_1+5x_2=5 \end{cases}
この連立一次方程式を行列で表記すると
A\vec{x} = \vec{b}
\begin{bmatrix}
1 & 2 \\
2 & 5 \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\
x_2 \\
\end{bmatrix}
=
\begin{bmatrix}
3 \\
5 \\
\end{bmatrix}
この式を行基本変形をすることにより連立一次方程式の解を導くことができる
・単位行列:対角成分が1, それ以外0の行列, 以下は2×2の単位行列
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
・逆行列:行列Aにかけ合わせた行列が単位行列となる行列
A^{-1}A=I
具体例
\begin{pmatrix}
1 & 1 \\
1 & -1/2
\end{pmatrix}
\begin{pmatrix}
1/3 & 2/3 \\
2/3 & -2/3
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
1.5 固有値と固有ベクトル
ある行列Aに対して以下のような式が成り立つような, 特殊なベクトルxと右辺の係数λが
あり、行列Aとその特殊なベクトルxの積はただのスカラー数λとその特殊なベクトルxとの積と同じ値になる。
A\vec{x} = λ\vec{b}
この特殊なベクトルxとその係数λを行列Aに対する固有ベクトル, 固有値という。
1.6 特異値分解(SVD:Singular Value Decomposition)
正方行列以外は固有値分解できないが, 以下のような特殊な単位ベクトルがあるならば特異値分解できる。
M=USV^{-1}
U:左特異ベクトル(直行行列)
S:特異値(対角成分が特異値)
V:右特異ベクトル(転置直行行列)
特異値の求め方
\displaylines{
MV=US \\
M=USV^{-1}\\
\\
M^TU=VS^T\\
M^T=VS^TU^{-1}\\
}
これらの積は
MM^T=USV^{-1}VS^TU^{-1}=USS^TU^{-1}
この式を固有値分解すれば、左特異ベクトルと特異値の2乗が求められる
参考:特異値分解の利用例
分野・用途 | 説明 |
---|---|
🔍 次元削減(PCA) | データの主成分を抽出し、重要な特徴だけを残す(ノイズ除去や可視化に有効) |
📊 情報検索・検索エンジン(LSI) | LSI(Latent Semantic Indexing)ではSVDを使って文書と単語の意味を圧縮表現 |
🖼️ 画像圧縮 | 画像を行列として扱い、特異値の一部だけを残すことで容量を削減。JPEGなどにも応用される |
🤖 機械学習 | 特徴量の冗長性除去、重み行列の低ランク近似、ニューラルネットワークの軽量化など |
📉 ノイズ除去 | 小さな特異値に対応する成分を削除することでデータからノイズ成分を取り除く |
🔬 推薦システム | レーティング行列のSVD分解によりユーザーとアイテムの関係性を学習(例:Netflixの推薦) |
📐 行列の疑似逆行列 | SVDを用いることで、逆行列が存在しない場合でも解を近似する擬似逆行列が求まる |
📏 線形方程式の安定解法 | 最小二乗解を安定に求めるときに、ランクの低い成分を落とすことで過剰適合を防ぐ |
Pythonによる画像圧縮の簡単例(SVD) k=1, 50, 1000で比較
import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import svd
from skimage import data, color
# 画像読み込み(グレースケール)
image = color.rgb2gray(data.astronaut())
U, S, VT = svd(image, full_matrices=False)
# 上位k個の特異値で再構成
k = 1
reconstructed = np.dot(U[:, :k], np.dot(np.diag(S[:k]), VT[:k, :]))
plt.imshow(reconstructed, cmap='gray')
plt.title("SVD Compressed Image (k=1)")
plt.axis('off')
plt.show()
2.確率・統計
2.1, 2.2 確率・ベイズ則
観点 | ベイズ確率(主観確率) | 頻度論的確率(客観確率) |
---|---|---|
定義 | 知識・信念の度合い | 試行の繰り返しによる相対頻度 |
解釈対象 | 1回限りの出来事(例:明日の雨) | 長期的な傾向(例:サイコロを1万回振る) |
確率の更新方法 | ベイズの定理で新しい情報を反映する | 固定的(観測しても確率そのものは変わらない) |
利用場面 | 医学診断、機械学習、意思決定など | ギャンブル、工場検査、物理実験など |
・条件付き確率:ある事象X=xが与えられたもとで、Y=yとなる確率
例:雨が降っている条件下で交通事故にあう確率
P(Y = y|X=x)=P(Y=y, X=x)/P(X=x)
・ベイズ則:一般的に事象X=xと事象Y=yに対して
P(Y = y|X=x)P(X=x)=P(X=x | Y=y)P(Y=y)
2.3 確率変数と確率分布
・確率変数:事象と結びつけられた数値, 事象そのものを指すと解釈する場合も多い
・確率分布:事象の発生する確率の分布, 離散値であれば表で表せる
2.4, 2.5 期待値・分散と共分散
・期待値:その分布における, 確率変数の平均
確率変数 X の期待値 Expectation はその頭文字より E(X) と表記されることが多い
離散型確率分布の期待値
E(X)=\sum_{k=1}^{n}P(X=x_k)f(X=x_k)
連続型確率分布の期待値
E(X)=\int P(X=x)f(X=x)dx
・分散:データの散らばり具合, データの各々の値が期待値からどれだけずれているのか平均したもの
確率変数 Xの分散 Variance はその頭文字より V(X) と表記されることが多い
V(X)=E\Bigl( (f_{(X=x)}-E_{(f)})^2 \Bigr)=E(f^2_{(X=x)})-(E_{(f)})^2
・共分散:2つのデータ系列の傾向の違い, 共分散が0となる時2つのデータは互いに独立
確率変数 X と Y の共分散Covarianceはその頭文字より Cov(X, Y) と表記される
Cov(X,Y)=E\Bigl( \bigl(f_{(X=x)}-E(f)\bigr)\bigl(g_{(Y=y)}-E(g)\bigr) \Bigr)=E(fg)-E(f)E(g)
2.6 様々な確率分布
・ベルヌーイ分布(Bernoulli distribution):結果が2つしかない試行(成功 or 失敗) に対する確率分布
確率論・統計学・機械学習の基礎中の基礎であり、コイン投げや2値分類などで使われる
P(X|μ)=μ^x(1-μ)^{1-x}
・二項分布(Binomial distribution):成功確率pのベルヌーイ試行をn回繰り返したときに、成功する回数の確率分布
確率pのベルヌーイ試行をn回行い, 成功の回数をXとすると, Xは二項分布に従うという
X \sim Binominal(n,p)
P(X=k)=
\begin{pmatrix}
n \\
k
\end{pmatrix}
p^k(1-p)^{n-k}, (k=0,1,2,...,n)
\begin{pmatrix}
n \\
k
\end{pmatrix}
は組み合わせ:「n回中k回成功する組み合わせの数」
・ガウス分布(正規分布):釣り鐘型の連続分布
N(μ, σ^2)=\sqrt{\frac{1}{2πσ^2}}exp(-\frac{1}{2σ^2}(x-μ)^2)
参考:Pythonでの正規分布のプロット例(標準正規分布と両側95%信頼区間)
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 平均と標準偏差
mu = 0
sigma = 1
# x軸の範囲とPDF計算
x = np.linspace(-4, 4, 1000)
pdf = norm.pdf(x, mu, sigma)
# 両側95%信頼区間の端点(zスコア)
z_low, z_high = norm.ppf(0.025), norm.ppf(0.975)
# プロット
plt.plot(x, pdf, label='N(0,1)', color='blue')
plt.fill_between(x, 0, pdf, where=(x >= z_low) & (x <= z_high),
color='skyblue', alpha=0.5, label='95% interval')
plt.axvline(z_low, color='red', linestyle='--', label=f'{z_low:.2f}')
plt.axvline(z_high, color='red', linestyle='--', label=f'{z_high:.2f}')
# タイトルや軸
plt.title("標準正規分布と95%信頼区間")
plt.xlabel("x")
plt.ylabel("確率密度")
plt.grid(True)
plt.legend()
plt.show()
・標準正規分布:平均0, 分散1の正規分布
・信頼区間:青い塗りつぶし部分が全体の95%の確率を含む領域, 残りの両端2.5%ずつが「外れ値の範囲」として扱われる
このような区間は統計的推論(平均の信頼区間や仮設検定)で頻繁に使われる
3.情報理論
3.1 自己情報量
I(x)=-log(P(x))=log(W(x))
・シャノンエントロピー:自己情報量の期待値
H(x)=E(I(x))=-E(log(P(x)))=-\sum\Bigl(P(x)log((P(x))\Bigr)
3.2 交差エントロピー
・カルバックライブラー(KL)ダイバージェンス:同じ事象確率変数における異なる確率分布P,Qの違いを表す
D_{KL}(P||Q)=E_{X\sim P}[log \frac{P(x)}{Q(x)}]=E_{X\sim P}[log {P(x)}-log{Q(x)}]
・交差エントロピー:KLダイバージェンスの一部分を取り出したもの, Qについての自己情報量をPの分布で平均している
\displaylines{
H(P,Q)=H(P)+D_{KL}(P||Q)\\
H(P,Q)=-E_{X\sim P} log{Q(x)}
}
3.3 自己情報量とエントロピー
・自己情報量:特定の事象が持つ情報量を定量化した値, 事象を観測したときの驚きの度合いの大きさを表す
・エントロピー:事象全体の「自己情報量の期待値」, 事象全体の不確実性の大きさや予測の難しさを表す
・相互情報量:事象Xの観測によって事象Yの不確実性(エントロピー)を減少させられる度合い, 事象XとYの依存度合いや影響の度合いを表す
・条件付エントロピー:事象Xが観測されたうえで残った事象Yの不確実性(エントロピー), 事象Xを知った上での事象Yの予測の難しさを表す
・結合エントロピー:2つ以上の事象が同時に発生するすべてのパターンの不確実性(エントロピー)の総和, 2つ以上の事象のすべての同時発生パターンの多様性や複雑さを表す
3.4 JSダイバージェンス
・JSダイバージェンス:2つの確率分布の類似性を測る尺度, 2つの確率分布の位置が近く, かつ形状が類似していれば値が小さく, 異なれば値が大きくなる
KLダイバージェンスとの違いは対称性と値が有限であること
3.5 KLダイバージェンス
・KLダイバージェンス:2つの確率分布の類似性を測る尺度, 一方の確率分布をもう一方の確率分布で近似した場合の情報損失を表すイメージ
JSダイバージェンスとの違いは非対称性と値が有限ではないこと
・クロスエントロピー:2つの確率分布のエントロピーを測る尺度, PとQにおいてPの分布をQの分布がどの程度正確に表現できているかを示す
クロスエントロピーはKLと同様に機械学習の分野で頻繁に使用される
参考:クロスエントロピーとKLの応用例
クロスエントロピー損失の挙動(二値分類)
import numpy as np
import matplotlib.pyplot as plt
def binary_cross_entropy(y_true, y_pred):
y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)
return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
y_preds = np.linspace(0.01, 0.99, 100)
loss_y1 = binary_cross_entropy(1, y_preds)
loss_y0 = binary_cross_entropy(0, y_preds)
plt.plot(y_preds, loss_y1, label='True label = 1', color='blue')
plt.plot(y_preds, loss_y0, label='True label = 0', color='green')
plt.title("クロスエントロピー損失の挙動(二値分類)")
plt.xlabel("予測確率 (y_pred)")
plt.ylabel("クロスエントロピー損失")
plt.legend()
plt.grid(True)
plt.show()
この図は、クロスエントロピー損失(二値分類) の挙動を示す:
青線:正解ラベルが 1 のときの損失(予測値が1に近いほど損失が小さい)
緑線:正解ラベルが 0 のときの損失(予測値が0に近いほど損失が小さい)
これにより、予測確率が真のラベルから離れるほど損失が急激に増える性質がわかる
「正規分布 P=N(0,1)」と「近似分布 Q=N(μ,1)」の間のKLダイバージェンスの変化
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.special import rel_entr
# 真の分布 P: N(0,1)
# Q: N(μ,1) として μ を動かして KL(P || Q) を測定
mu_values = np.linspace(-2, 2, 100)
kl_divs = []
# x軸上の評価点(数値積分用)
x = np.linspace(-5, 5, 1000)
P = norm.pdf(x, 0, 1) # 真の分布 P 固定
# Qの平均 μ を動かして KL(P || Q) を計算
for mu in mu_values:
Q = norm.pdf(x, mu, 1) # 平均 mu, 分散1 の正規分布
kl = np.sum(rel_entr(P, Q)) * (x[1] - x[0]) # 数値積分でKL計算
kl_divs.append(kl)
# グラフ描画
plt.plot(mu_values, kl_divs, color='purple')
plt.title("KLダイバージェンス(P=N(0,1), Q=N(μ,1))")
plt.xlabel("μ(Qの平均)")
plt.ylabel("KL(P‖Q)")
plt.grid(True)
plt.axvline(0, color='gray', linestyle='--', label='μ = 0 (一致)')
plt.legend()
plt.show()
横軸:近似分布Qの平均
縦軸:KLダイバージェンス
中心の点線:真の分布と完全に一致する μ=0
曲線:μ がずれるほどKLダイバージェンスが増加(情報損失が増える)