ここでは機械学習でよく行うことになる行列操作の一つである行列のランク(階数)について解説します。
当ページで学ぶこと
- 行列のランクとは
- Pythonでランクを確認
行列のランクとは
行列のランクとは、ある行列の独立している行ベクトルの数、または列ベクトルの数のことを意味します。これは以下のように表記されます。
\[{\rm rank}(A)\]
なお「独立しているベクトル」とは、お互いに平行していないベクトルのことを意味します。
たとえば、以下の行列は列ベクトル同士または行ベクトル同士が平行していません。つまり独立したベクトルが 2 本あることになるため、ランクは 2 になります。
\[A=
\begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix}
\ \ \ \
{\rm rank}(A)=2
\]
続いて、以下の行列はお互いの列ベクトル同士または行ベクトル同士が同士が平行しています。この場合、独立したベクトルは 1 本であるということになり、ランクは 1 になります。
\[A=
\begin{bmatrix}
1 & 2 \\
1 & 2
\end{bmatrix}
\ \ \ \
{\rm rank}(A)=1
\]
最後に、以下の行列はゼロベクトル(ベクトルが存在しないということ)です。つまり独立したベクトルは 1 本もないということになり、ランクは 0 になります。
\[A=
\begin{bmatrix}
0 & 0 \\
0 & 0
\end{bmatrix}
\ \ \ \
{\rm rank}(A)=0
\]
以上がランクです。ランクは主に特異値分解(SVD)を行うときに使われます。
Pythonでランクを確認
PythonではNumPy の、linalg.matrix_rank()
関数で簡単にランクを求めることができます。ちなみに、この関数には SVD のメソッドが使われています。
# NumPy のインポート
import numpy as np
# 行列の定義
A = np.array([[0,0],[0,0]])
print(A)
# ランク
rA = np.linalg.matrix_rank(A)
print(rA)
# 行列の定義
B = np.array([[1,2],[1,2]])
print(B)
# ランク
rB = np.linalg.matrix_rank(B)
print(rB)
# 行列の定義
C = np.array([[1,2],[3,4]])
print(C)
# ランク
rC = np.linalg.matrix_rank(C)
print(rC)