ブログ

方策勾配法(Policy Gradient Method)の目的関数の定義と勾配の式の導出

方策勾配法(Policy Gradient Method)は強化学習の際に定義される方策をニューラルネットワークで定義し、勾配を用いることで方策の最適化を行う手法です。当記事では方策勾配法における目的関数の定義と勾配の式の導出について取り扱いました。
「ゼロから作るDeep Learning④ー強化学習編」の第$9$章の「方策勾配法」や付録Dの「方策勾配法の証明」の内容を参考に当記事の作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提知識

問題設定

強化学習にあたって得られるエピソードにおける一連の「状態、行動、報酬」からなる系列をtrajectory(軌道)という。ここでtrajectoryを$\tau$とおくと、$\tau$は下記のように表すことができる。
$$
\large
\begin{align}
\tau = (S_0, A_0, R_0, S_1, A_1, R_1, \cdots , S_{T+1})
\end{align}
$$

ここで$\tau$の収益を$G(\tau)$とおくと、$G(\tau)$は下記のように表せる。
$$
\large
\begin{align}
G(\tau) = R_0 + \gamma R_1 + \gamma^{2} R_2 + \cdots + \gamma^{T} R_{T}
\end{align}
$$

以下、$G(\tau)$を最大にするように状態$S_t$から行動$A_t$を選択する方策$\pi_{\theta}(A_t|S_t)$の最適化について取り扱う。

方策勾配法の目的関数の定義

$G(\tau)$を最大にするような方策$\pi_{\theta}(A_t|S_t)$を得るにあたっては、下記の目的関数を$\theta$について最大化すればよい。
$$
\large
\begin{align}
J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}}[G(\tau)]
\end{align}
$$

上記の式は『$\tau$が方策$\pi_{\theta}$に基づいて得られるときの収益$G(\tau)$の期待値』と解釈すればよい。要するになるべく多い収益$G(\tau)$が得られると期待できるような方策を最適化によって取得すると理解すればよい。

Log-Derivative Trick

対数関数の微分の公式に基づいて下記のような数式が成立する。
$$
\large
\begin{align}
\nabla_{\theta} \log{P(\tau|\theta)} = \frac{\nabla_{\theta} P(\tau|\theta)}{P(\tau|\theta)}
\end{align}
$$

上記の変形はLog-Derivative Trick(log勾配のトリック)といわれ、よく知られている。

勾配の式の導出

$\displaystyle \nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ G(\tau) \nabla_{\theta} \log{P(\tau|\theta)} \right]$の導出

$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \nabla_{\theta} \mathbb{E}_{\tau \sim \pi_{\theta}}[G(\tau)] \quad (2.1) \\
&= \nabla_{\theta} \sum_{\tau} P(\tau|\theta) G(\tau) \\
&= \sum_{\tau} \nabla_{\theta} \left( P(\tau|\theta) G(\tau) \right) \\
&= \sum_{\tau} \left( G(\tau) \nabla_{\theta} P(\tau|\theta) + P(\tau|\theta) \nabla_{\theta} G(\tau) \right) \\
&= \sum_{\tau} G(\tau) \nabla_{\theta} P(\tau|\theta) \quad (2.2)
\end{align}
$$

上記の式展開にあたっては$\nabla_{\theta} G(\tau)=\mathbf{0}$を用いた。$(2.1)$式はさらに下記のように変形することができる。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \sum_{\tau} G(\tau) \nabla_{\theta} P(\tau|\theta) \quad (2.2) \\
&= \sum_{\tau} G(\tau) P(\tau|\theta) \frac{\nabla_{\theta} P(\tau|\theta)}{P(\tau|\theta)} \\
&= \sum_{\tau} G(\tau) P(\tau|\theta) \nabla_{\theta} \log{P(\tau|\theta)} \\
&= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ G(\tau) \nabla_{\theta} \log{P(\tau|\theta)} \right] \quad (2.3)
\end{align}
$$

$\displaystyle \nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right]$の導出

$P(\tau|\theta)$は下記のように表すことができる。
$$
\large
\begin{align}
P(\tau|\theta) &= p(S_0) \pi_{\theta}(A_0|S_0) p(S_1|S_0,A_0) \cdots \pi_{\theta}(A_T|S_T) p(S_{T+1}|S_{T},A_{T}) \\
&= p(S_0) \prod_{t=0}^{T} \pi_{\theta}(A_t|S_t) p(S_{t+1}|S_{t},A_{t})
\end{align}
$$

$(2.4)$式の両辺の対数を取ることで下記が得られる。
$$
\large
\begin{align}
\log{P(\tau|\theta)} &= \log{ \left[ p(S_0) \prod_{t=0}^{T} \pi_{\theta}(A_t|S_t) p(S_{t+1}|S_{t},A_{t}) \right] } \quad (2.4)’ \\
&= \log{p(S_0)} + \sum_{t=0}^{T} \log{p(S_{t+1}|S_t,A_t)} + \sum_{t=0}^{T} \log{\pi_{\theta}(A_t|S_t)} \quad (2.5)
\end{align}
$$

$(2.5)$式を元に$\theta$に関する勾配$\nabla_{\theta} \log{P(\tau|\theta)}$は下記のように得られる。
$$
\large
\begin{align}
\nabla_{\theta} \log{P(\tau|\theta)} &= \nabla_{\theta} \left[ \log{p(S_0)} + \sum_{t=0}^{T} \log{p(S_{t+1}|S_t,A_t)} + \sum_{t=0}^{T} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.5)’ \\
&= \nabla_{\theta} \sum_{t=0}^{T} \log{\pi_{\theta}(A_t|S_t)} \\
&= \sum_{t=0}^{T} \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \quad (2.6)
\end{align}
$$

上記の変形では$\displaystyle \nabla_{\theta} \log{p(S_0)} = \mathbf{0}$、$\displaystyle \nabla_{\theta} \sum_{t=0}^{T} \log{p(S_{t+1}|S_t,A_t)} = \mathbf{0}$であることを用いた。$(2.6)$式を$(2.3)$式に代入することで下記が得られる。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ G(\tau) \nabla_{\theta} \log{P(\tau|\theta)} \right] \quad (2.3) \\
&= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.7)
\end{align}
$$

回転行列(rotation matrix)が直交行列であることの確認

三角関数を用いて定義される回転行列(rotation matrix)は主に$2$次元のベクトルを原点の周りに回転させるベクトルを表しますが、回転行列は直交行列(orthogonal matrix)の一つです。当記事では回転行列が直交行列であることの確認を行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$7$章「内積」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

定義と概要の確認

$2$次の回転行列

$2$次の正方行列で表される回転行列は回転する角$\theta$を元に下記のように表される。
$$
\large
\begin{align}
R(\theta) = \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \sin{\theta} \end{array} \right)
\end{align}
$$

たとえばベクトル$\displaystyle \mathbf{x} = \left( \begin{array}{c} 2 \\ 0 \end{array} \right)$に回転行列$\displaystyle R(\theta) = R \left( \frac{\pi}{6} \right)$を作用させると下記が得られる。
$$
\large
\begin{align}
R \left( \frac{\pi}{6} \right) \mathbf{x} &= \left( \begin{array}{cc} \displaystyle \cos{\frac{\pi}{6}} & \displaystyle -\sin{\frac{\pi}{6}} \\ \displaystyle \sin{\frac{\pi}{6}} & \displaystyle \cos{\frac{\pi}{6}} \end{array} \right) \left( \begin{array}{c} 2 \\ 0 \end{array} \right) \\
&= \left( \begin{array}{cc} \displaystyle \frac{\sqrt{3}}{2} & -\displaystyle \frac{1}{2} \\ \displaystyle \frac{1}{2} & \displaystyle \frac{\sqrt{3}}{2} \end{array} \right) \left( \begin{array}{c} 2 \\ 0 \end{array} \right) \\
&= \frac{1}{2} \left( \begin{array}{cc} \sqrt{3} & -1 \\ 1 & \sqrt{3} \end{array} \right) \left( \begin{array}{c} 2 \\ 0 \end{array} \right) \\
&= \frac{1}{2} \left( \begin{array}{c} 2 \sqrt{3} \\ 2 \end{array} \right) \\
&= \left( \begin{array}{c} \sqrt{3} \\ 1 \end{array} \right)
\end{align}
$$

上記の結果はベクトル$\displaystyle \mathbf{x} = \left( \begin{array}{c} 2 \\ 0 \end{array} \right)$を原点の周りに$30^{\circ}$回転させ、$\displaystyle \left( \begin{array}{c} \sqrt{3} \\ 1 \end{array} \right)$が得られたと解釈することができる。

直交行列

下記のような式が成立する正方行列$X$を直交行列という。
$$
\large
\begin{align}
X^{\mathrm{T}} X = X X^{\mathrm{T}} = I
\end{align}
$$

回転行列が直交行列であることの確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$148$

$$
\large
\begin{align}
X = \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right)
\end{align}
$$

上記のように$X$を定義するとき、$X X^{\mathrm{T}}$は下記のように変形できる。
$$
\large
\begin{align}
X X^{\mathrm{T}} &= \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right)^{\mathrm{T}} \\
&= \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \left( \begin{array}{cc} \cos{\theta} & \sin{\theta} \\ -\sin{\theta} & \cos{\theta} \end{array} \right) \\
&= \left( \begin{array}{cc} \cos^{2}{\theta}+(-\sin{\theta})^{2} & \sin{\theta}\cos{\theta}-\sin{\theta}\cos{\theta} \\ \sin{\theta}\cos{\theta}-\sin{\theta}\cos{\theta} & \cos^{2}{\theta}+\sin^{2}{\theta} \end{array} \right) \\
&= \left( \begin{array}{cc} \cos^{2}{\theta}+\sin^{2}{\theta} & 0 \\ 0 & \cos^{2}{\theta}+\sin^{2}{\theta} \end{array} \right) \\
&= \left( \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right) = I
\end{align}
$$

上記より$X$は直交行列である。

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問7~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

解答

$\boxed{\mathsf{8}}$ : $③$

フィッシャーの三原則とは「反復」,「無作為化」,「局所管理」である.
$①$:「反復」する場合には,同じ肥料を与えなければならない.誤り.
$②$:系統誤差をなくすためには「無作為化」を行う必要がある.与える肥料をランダムに割り付けることが必要である.誤り.
$③$:正しい.
$④$:肥料をランダムに植えると,肥料(A,B)によって差があるかどうかがわからない.誤り.
$⑤$:水はけの系統誤差を偶然誤差にするためには,無作為化を行う必要がある.苗を水はけのよい場所と悪い場所にランダムに植え付ければよい.誤り.

直和の定義・部分空間の和が直和かどうかの判定・部分空間の直和分解

ベクトル空間を部分空間(subspace)に分解するにあたっては直和(direct sum)かどうかに着目する必要があります。当記事では直和の定義・部分空間の和が直和かどうかの判定・部分空間の直和分解についてそれぞれ取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$5.1$節「ベクトル空間と部分空間」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

直和

直和の定義

ベクトル空間$V$の部分空間$U, W$に対し、$U \cap W = {0}$が成立する場合、$U$と$W$の和を$U$と$W$の直和といい、$U \oplus W$のように表す。

直和かどうかの判定

ベクトル空間$V$の部分空間$U, W$に対し、下記の$[1], [2]$は同値であるのでどちらかが成立するかを確認すれば良い。
$[1] \,$ $U \cap W = {0}$が成立
$[2] \,$ $U + W$の各要素が$\mathbf{u}+\mathbf{w} \, (\mathbf{u} \in U, \mathbf{w} \in W)$の形に一意に表せる

直和分解

$V = W_1 \oplus \cdots \oplus W_s$を直和分解という。

具体例の確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$082$

$[1]$
$$
\large
\begin{align}
U &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| 2x+y+4z=0, \, x+2y-z=0 \right\} \\
W &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| -x+2y-6z=0 \right\}
\end{align}
$$

上記に基づいて下記のような連立方程式を得る。
$$
\large
\begin{align}
2x+y+4z &= 0 \\
x+2y-z &= 0 \\
-x+2y-6z &= 0
\end{align}
$$

上記の解は$x=y=z=0$であるので、$U \cap W = \{\mathbf{0}\}$が成立する。よって$U+W$は直和である。

$[2]$
$$
\large
\begin{align}
U &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| x+z=0 \right\} \\
W &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| 2x+y+6z=0 \right\}
\end{align}
$$

上記に基づいて下記のような連立方程式を得る。
$$
\large
\begin{align}
x+z &= 0 \\
2x+y+6z &= 0
\end{align}
$$

上記の解の$1$つに$x=1, y=4, z=-1$が得られるので、$U \cap W \neq \{\mathbf{0}\}$が成立する。よって$U+W$は直和ではない。

$[3]$
$$
\large
\begin{align}
U &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| x-y-z=0 \right\} \\
W &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| -x+2y+4z=0, \, 2x-y+z=0 \right\}
\end{align}
$$

上記に基づいて下記のような連立方程式を得る。
$$
\large
\begin{align}
x-y-z &= 0 \\
-x+2y+4z &= 0 \\
2x-y+z &= 0
\end{align}
$$

上記の解の$1$つに$x=-2, y=-3, z=1$が得られるので、$U \cap W \neq \{\mathbf{0}\}$が成立する。よって$U+W$は直和ではない。

結果の考察

$[1]$の$U$は$2x+y+4z=0, \, x+2y-z=0$が同時に成立するので、下記のベクトルに基づく直線を表す。
$$
\large
\begin{align}
\mathbf{u} = k \left[\begin{array}{c} -3 \\ 2 \\ 1 \end{array} \right] \in U, \, k \in \mathbb{R}
\end{align}
$$

また、$W$は下記に基づく平面を表す。
$$
\large
\begin{align}
\mathbf{w} = s \left[\begin{array}{c} 6 \\ 0 \\ 1 \end{array} \right] + t \left[\begin{array}{c} 0 \\ 3 \\ 1 \end{array} \right] \in W, \, s,t \in \mathbb{R}
\end{align}
$$

ここで$\mathbf{u} = \mathbf{w}$が成立する実数$k,s,t$は$k=s=t=0$のみであるので、$U+W$が直和である。解答では方程式を元に解いたが、このように方程式を元に直線や平面を表すベクトルを得ることで直和かどうか調べることができる。

$[2]$では$U$と$V$がどちらも平面を表すので、$\mathbb{R}^{3}$である以上、二つの平面がベクトルを共有するので直和ではない。

$[1]$と同様に$[3]$の$U$は下記に基づく平面を表す。
$$
\large
\begin{align}
\mathbf{u} = s \left[\begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] + t \left[\begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right] \in W, \, s,t \in \mathbb{R}
\end{align}
$$

また、$W$は下記に基づく直線を表す。
$$
\large
\begin{align}
\mathbf{w} = k \left[\begin{array}{c} -2 \\ -3 \\ 1 \end{array} \right] \in U, \, k \in \mathbb{R}
\end{align}
$$

ここで$s=-3,t=1,k=1$のとき、$\mathbf{u}$と$\mathbf{w}$について下記が成立する。
$$
\large
\begin{align}
\mathbf{u} &= s \left[\begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] + t \left[\begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right] \\
&= -3 \left[\begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] + \left[\begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right] \\
&= \left[\begin{array}{c} -2 \\ -3 \\ 1 \end{array} \right] = \mathbf{w}
\end{align}
$$

上記より$U$が表す直線は$W$が表す平面に含まれることが確認できる。よって$U+W$は直和ではない。

基本例題$083$

$$
\large
\begin{align}
W_1 = \left\{ \left[\begin{array}{c} x \\ 0 \\ 0 \end{array} \right] \middle| x \in \mathbb{R} \right\}, \, W_2 = \left\{ \left[\begin{array}{c} 0 \\ y \\ 0 \end{array} \right] \middle| y \in \mathbb{R} \right\}, \, W_3 = \left\{ \left[\begin{array}{c} 0 \\ 0 \\ z \end{array} \right] \middle| z \in \mathbb{R} \right\}
\end{align}
$$

$\displaystyle \mathbf{e}_{1} = \left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array} \right], \, \mathbf{e}_{2} = \left[\begin{array}{c} 0 \\ 1 \\ 0 \end{array} \right], \, \mathbf{e}_{3} = \left[\begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right]$のようにおくと、任意の$\displaystyle \mathbf{v} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \in \mathbb{R}^{3}$は下記のように表せる。
$$
\large
\begin{align}
\mathbf{v} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] = x \mathbf{e}_{1} + y \mathbf{e}_{2} + z \mathbf{e}_{3}
\end{align}
$$

上記は一意的に表せるので、$W_1+W_2+W_3$は直和である。

13章「回帰分析」の練習問題解答例〜例題で学ぶ初歩からの統計学[第2版]〜

当記事は「白砂, 例題で学ぶ初歩からの統計学 第$2$版 (日本評論社)」の読解サポートにあたって$13$章「回帰分析」の練習問題を解説します。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は下記より入手をご検討ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。(そのため著者の意図とは異なる解説となる可能性はあります)

・統計学に関する書籍の解答集
https://www.hello-statisticians.com/answer_textbook

執筆:@kakusan96

回帰分析

回帰分析は2つ以上の変数間の因果関係を明らかにするための統計的手法である。特に3変数以上のケースは重回帰分析という。
2つの変数X, Yの関係を次の一次式に表すと

$Y = a + bX$

となり、Yを被説明変数、Xを説明変数、a、bを回帰係数という。この回帰係数を最小2乗法によって推定する。
Yの実測値をYとする。また、Y, a, bについて最小2乗法によって求めた推定値をそれぞれ$\hat{Y}$, $\hat{a}$, $\hat{b}$とする。

$\hat{Y} = \hat{a}X + \hat{b}$

実測値Yと推定値$\hat{Y}$の差をeとすると

$
\begin{align}
e &= Y – \hat{Y} \\
&= Y – (\hat{a} + \hat{b}X) \\
\sum e^2 &= \sum(Y – (\hat{a} + \hat{b}X))^2 \\
\end{align}
$

となる。この実測値Yと推定値$\hat{Y}$の差の2乗値(残差平方和)の総和$e^2$が最小になる回帰係数$\hat{a}$、$\hat{b}$を求めるのが最小2乗法である。最小値を求めるには上記の式を$\hat{a}$、$\hat{b}$でそれぞれ偏微分して0とおく。

$
\begin{align}
&\frac{d}{d\hat{a}}(\sum e^2) = 0 \\
&\frac{d}{da}(\sum(Y – (\hat{a} + \hat{b}X))^2) = 0\\
&\sum (2X^2\hat{a} – 2XY +2\hat{b}X)= 0\\
&2\hat{a}\sum X^2 – 2\sum XY +2\hat{b} \sum X= 0\\
&\hat{a}\sum X^2 – \sum XY +\hat{b} \sum X= 0\\
\end{align}
$

$
\begin{align}
&\frac{d}{d\hat{b}}(\sum e^2) = 0\\
&\frac{d}{db}(\sum(Y – (\hat{a}X + \hat{b}))^2) = 0\\
&\sum (2\hat{b} – 2Y +2\hat{a}X)= 0\\
&2\sum\hat{b} -2 \sum Y + 2\hat{a} \sum X = 0\\
&n\hat{b} – \sum Y + \hat{a} \sum X = 0\\
\end{align}
$

上記の二つの式を$\hat{a},\hat{b}$について連立方程式で解くと、

$
\begin{align}
\hat{b} &= \frac{n \sum XY -(\sum X)(\sum Y)}{n \sum X^2 – (\sum X)^2}\\
&= \frac{\sum (X- \bar{X})(Y- \bar{Y})}{\sum(X-\bar{X})^2}\\
&= \frac{\frac{1}{n-1}\sum (X- \bar{X})(Y- \bar{Y})}{\frac{1}{n-1}\sum(X-\bar{X})^2}\\
&=\frac{XとYの標本共分散}{Xの共分散} \\
\hat{a} &= \bar{Y} – \hat{b} \bar{X}
\end{align}
$

決定係数は推定した回帰式の当てはまりの良さを測る指標であり$r^2$とおくと、$0 \leq r^2 \leq 1$をとる。1に近いほど回帰式は当てはまりが良い。また相関係数の2乗である。
観測値Yと観測値の平均$\bar{Y}$の差の平方和をYの全変動という。
推定値$\hat{Y}$と観測値の平均$\bar{Y}$の差の平方和をYの回帰平方和という。
観測値Yと推定値$\hat{Y}$の差の平方和をYの残差平方和という。
これら3つの式には以下のような関係が成り立つ。

$
\sum(Y-\bar{Y})^2 = \sum(\hat{Y}-\bar{Y})^2 + \sum(Y-\hat{Y})^2
$

上記の式の両辺を$\sum(Y-\bar{Y})^2$で割ると

$
\begin{align}
1 &= \frac{\sum(\hat{Y}-\bar{Y})^2}{\sum(Y-\bar{Y})^2} + \frac{\sum(Y-\hat{Y})^2}{\sum(Y-\bar{Y})^2}\\
\frac{\sum(\hat{Y}-\bar{Y})^2}{\sum(Y-\bar{Y})^2} &= 1 – \frac{\sum(Y-\hat{Y})^2}{\sum(Y-\bar{Y})^2}\\
\end{align}
$

つまり、決定係数とは回帰平方和(回帰によって説明できるYの変動)をYの全変動で割った値である。
なお、実際に計算するときは、上記の式を変形して、

$
\begin{align}
r^2 &= \frac{(\sum(X-\bar{X})(Y-\bar{Y}))^2}{\sum (X-\bar{X})^2 \sum (Y-\bar{Y})^2}\\
r^2 &= \frac{(n\sum XY-(\sum X)(\sum Y))^2}{(n\sum X^2-(\sum X)^2)(n\sum Y^2-(\sum Y)^2)}
\end{align}
$

を用いて計算する。

演習問題 解答例

13-1. 単純回帰分析

求める回帰係数を$Y = \hat{a} + \hat{b}X$とすると

$
\begin{align}
&\sum X = 45 \\
&\sum Y = 63 \\
&\sum X^2 = 285 \\
&\sum Y^2 = 501 \\
&\sum XY = 374 \\
&n = 9
\end{align}
$

であるため、

$
\begin{align}
\hat{b} &= \frac{n \sum XY -(\sum X)(\sum Y)}{n \sum X^2 – (\sum X)^2} \\
\hat{a} &= \bar{Y} – \hat{b} \bar{X} \\
\end{align}
$

に当てはめると

$
\begin{align}
\hat{b} &= \frac{(9) (374) -(45)(63)}{(9) (285) – (45)^2} \\
&= \frac{531}{540} \\
&= 0.983 \\
\end{align}
$

$
\begin{align}
\hat{a} &= \frac{\sum Y}{n} – \hat{b} \cdot \frac{\sum X}{n} \\
&= \frac{63}{9} – 0.983 \cdot \frac{45}{9} \\
&= 2.08
\end{align}
$

よって求める回帰式は$Y = 2.08 + 0.983X$である。

①を参照

$r^2 = \frac{(n\sum XY-(\sum X)(\sum Y))^2}{(n\sum X^2-(\sum X)^2)(n\sum Y^2-(\sum Y)^2)}$に当てはめると

$
\begin{align}
r^2 &= \frac{((9)(374)-(45)(63))^2}{((9)(285)-(45)^2)((9)(501)-(63)^2)}\\
&= \frac{281961}{291600}\\
&= 0.967
\end{align}
$

であり、当てはまりの良い回帰式であるといえる。

13-2. 単純回帰分析

求める回帰係数を$Y = \hat{a} + \hat{b}X$とすると

$
\begin{align}
&\sum X = 40\\
&\sum Y = 32\\
&\sum X^2 = 260\\
&\sum XY = 110\\
&n = 8\\
\end{align}
$

であるため、

$
\begin{align}
\hat{b} &= \frac{n \sum XY -(\sum X)(\sum Y)}{n \sum X^2 – (\sum X)^2}\\
\hat{a} &= \bar{Y} – \hat{b} \bar{X}\\
\end{align}
$

に当てはめると

$
\begin{align}
\hat{b} &= \frac{(8) (110) -(40)(32)}{(8) (260) – (40)^2}\\
&= \frac{-400}{480}\\
&= -0.833\\
\hat{a} &= \frac{\sum Y}{n} – \hat{b} \cdot \frac{\sum X}{n} \\
&= \frac{32}{8} -0.833 \cdot \frac{40}{8} \\
&= 8.17\\
\end{align}
$

よって求める回帰式は$Y = 8.17 -0.833X$である。

12-1より相関係数 $r=-0.973$ より決定係数 $r^2$ は $r^2 = (-0.973)^2=0.947$ である。

13-3. 単純回帰分析

求める回帰係数を$Y = \hat{a} + \hat{b}X$とすると

$
\begin{align}
&\sum X = 60 \\
&\sum Y = 50 \\
&\sum X^2 = 366.68 \\
&\sum XY = 302.23 \\
&n = 10
\end{align}
$

であるため、

$
\begin{align}
\hat{b} &= \frac{n \sum XY -(\sum X)(\sum Y)}{n \sum X^2 – (\sum X)^2} \\
\hat{a} &= \bar{Y} – \hat{b} \bar{X}
\end{align}
$

に当てはめると

$
\begin{align}
\hat{b} &= \frac{10) (302.23) -(60)(50)}{(10) (366.68) – (60)^2} \\
&= \frac{22.3}{66.8} \\
&= 0.3338 \\
\hat{a} &= \frac{\sum Y}{n} – \hat{b} \cdot \frac{\sum X}{n} \\
&= \frac{50}{10} – 0.3338 \cdot \frac{60}{10} \\
&= 2.997
\end{align}
$

よって求める回帰式は$Y = 2.997 + 0.3338X$である。

12-2より相関係数$r=0.9414$より決定係数$r^2$は$r^2 = (0.9414)^2 = 0.8862$である。

13-4. 単純回帰分析

求める回帰係数を$Y = \hat{a} + \hat{b}X$とすると

$
\begin{align}
&\sum X = 180\\
&\sum Y = 2100\\
&\sum X^2 = 2456\\
&\sum XY = 26015\\
&n = 15
\end{align}
$

であるため、

$
\begin{align}
\hat{b} &= \frac{n \sum XY -(\sum X)(\sum Y)}{n \sum X^2 – (\sum X)^2}\\
\hat{a} &= \bar{Y} – \hat{b} \bar{X}
\end{align}
$

に当てはめると

$
\begin{align}
\hat{b} &= \frac{(15) (26015) -(180)(2100)}{(15) (2456) – (180)^2}\\
&= \frac{12225}{4440}\\
&= 2.753\\
\hat{a} &= \frac{\sum Y}{n} – \hat{b} \cdot \frac{\sum X}{n} \\
&= \frac{2100}{15} – 2.753 \cdot \frac{180}{15} \\
&= 107.0
\end{align}
$

よって求める回帰式は$Y = 107.0 + 2.753X$である。

12-3より相関係数$r = 0.8930$より決定係数$r^2$は$r^2 = (0.8930)^2 = 0.7974$である。

13-5. 単純回帰分析の応用:変数の変換

求めるフィリップス曲線について$Y = P, X = \frac{1}{U}$とおくと、$Y = a + bX$として最小二乗法によって回帰係数$a, b$を求める。

$
\begin{align}
&\sum X = 1.78\\
&\sum Y = 40\\
&\sum X^2 = 0.56015\\
&\sum Y^2 = 220\\
&\sum XY = 10.69\\
&n = 8\\
\end{align}
$

であるため、

$
\begin{align}
b &= \frac{n \sum XY -(\sum X)(\sum Y)}{n \sum X^2 – (\sum X)^2}\\
a &= \bar{Y} – b \bar{X}
\end{align}
$

に当てはめると

$
\begin{align}
b &= \frac{(8) (10.69) -(1.78)(40)}{(8) (0.5615) – (1.768)^2}\\
&= \frac{14.32}{1.3128}\\
&= 10.91\\
a &= \frac{\sum Y}{n} – b \cdot \frac{\sum X}{n} \\
&= \frac{40}{8} – 10.91 \cdot \frac{1.78}{8} \\
&= 2.573
\end{align}
$

よって仮定した回帰式は$Y = 2.573 + 10.91X$である。
求めるフィリップス曲線は$P = 2.573 + 10.91\frac{1}{U}$である。
決定係数は

$r^2 = \frac{(n\sum XY-(\sum X)(\sum Y))^2}{(n\sum X^2-(\sum X)^2)(n\sum Y^2-(\sum Y)^2)}$ に当てはめると

$
\begin{align}
r^2 &= \frac{((8)(10.69)-(1.78)(40))^2}{((8)(0.56015)-(1.78)^2)((8)(220)-(40)^2)}\\
&= 0.9763
\end{align}
$

①を参照。

13-6. 単純回帰分析の応用:変数の対数変換

指数関数$Y = aX^b$を対数変換すると

$
\begin{align}
\log Y &= \log aX^b\\
&= \log a + \log X^b\\
&= \log a + b \log X\\
\end{align}
$

となり、

$
\begin{align}
y &= \log Y\\
x &= \log X\\
a &= \log a \\
\end{align}

とおくと$Y = aX^b$は$y=a + bx$と変換できる。最小二乗法にてこの回帰係数$a, b$を求める。

$
\begin{align}
&\sum x= 35.13453\\
&\sum y = 52.16806\\
&\sum x^2 = 131.61032\\
&\sum y^2 = 330.86730\\
&\sum xy = 205.17888\\
&n = 10
\end{align}
$

であるため、

$
\begin{align}
b &= \frac{n \sum xy -(\sum x)(\sum y)}{n \sum x^2 – (\sum x)^2}\\
a &= \bar{y} – \hat{b} \bar{x}
\end{align}
$

に当てはめると

$
\begin{align}
b &= \frac{(10) (205.17888) -(35.13453)(52.16806)}{(10) (131.61032) – (35.13453)^2}\\
&= 2.6801\\
a &= \frac{\sum y}{n} – b \cdot \frac{\sum x}{n} \\
&= \frac{52.16806}{10} – 2.6801 \cdot \frac{35.13453}{10} \\
&= -4.2001
\end{align}
$

よって仮定した回帰式は$y = -4.2001 + 2.6801x$である。

$
\begin{align}
&\log Y = y\\
&\log X = x\\
&\log a  = -4.2001
\end{align}
$

より

$
\begin{align}
a &= e^{-4.2001} = 0.01499 (\log a = -4.2001)\\ 
Y &= aX^b\\
&= 0.01499X^{2.6801}
\end{align}
$

よって求める指数関数は$Y = 0.01499X^{2.6801}$である。
決定係数は

$
r^2 = \frac{(n\sum XY-(\sum X)(\sum Y))^2}{(n\sum X^2-(\sum X)^2)(n\sum Y^2-(\sum Y)^2)}
$

に当てはめると

$
\begin{align}
r^2 &= \frac{((10)(205.17888)-(35.13453)(52.16806))^2}{((10)(131.61032)-(35.13453)^2)((10)(330.86730)-(52.16806)^2)}\\
&= 0.9992
\end{align}
$

①を参照。

13-7. 単純回帰分析の応用:変数の対数変換

指数関数$Y = aX^b$を対数変換すると

$
\begin{align}
\log Y &= \log aX^b\\
&= \log a + \log X^b\\
&= \log a + b \log X
\end{align}
$

となり、

$
\begin{align}
&y = \log Y\\
&x = \log X\\
&a = \log a
\end{align}

とおくと$Y = aX^bはy=a + bx$と変換できる。

最小二乗法にてこの回帰係数a, bを求める。

$
\begin{align}
&\sum x= 17.05032\\
&\sum y = 38.89012\\
&\sum x^2 = 26.39295\\
&\sum y^2 = 109.75621\\
&\sum xy = 50.45257\\
&n = 14
\end{align}
$

であるため、

$
\begin{align}
b &= \frac{n \sum xy -(\sum x)(\sum y)}{n \sum x^2 – (\sum x)^2}\\
a &= \bar{y} – \hat{b} \bar{x}
\end{align}
$

に当てはめると

$
\begin{align}
b &= \frac{(14) (50.45257) -(17.05032)(38.89012)}{(14) (26.39295) – (17.05032)^2}\\
&= 0.54890\\
a &= \frac{\sum y}{n} – b \cdot \frac{\sum x}{n} \\
&= \frac{38.89012}{10} – 0.54890 \cdot \frac{17.05032}{10} \\
&= 2.1094
\end{align}
$

よって仮定した回帰式は$y = 2.1094 + 0.54890x$である。

$
\begin{align}
&\log Y = y\\
&\log X = x\\
&\log a  = a
\end{align}
$

より

$
\begin{align}
a &= e^{21094} = 8.243, (\log a = 2.1094)\\ 
Y &= aX^b\\
&= 8.243X^{0.54890}
\end{align}
$

よって求める指数関数は$Y = 8.243X^{0.54890}$である。

決定係数は

$
r^2 = \frac{(n\sum XY-(\sum X)(\sum Y))^2}{(n\sum X^2-(\sum X)^2)(n\sum Y^2-(\sum Y)^2)}
$

に当てはめると

$
\begin{align}
r^2 &= \frac{((14)(50.45257)-(17.05032)(38.89012))^2}{((14)(26.39295)-(17.05032)^2)((14)(109.7562)-(38.89012)^2)}\\
&= 0.983138
\end{align}
$

①を参照。

13-8. 重回帰分析

重回帰分析は説明変数が二つ以上ある回帰分析である。被説明変数Yが二つの説明変数$X_1$, $X_2$によって説明される重回帰式を以下のように表す。

$
Y = \hat{a} + \hat{b_1}X_1 + \hat{b_2}X_2

先に学んだ最小二乗法にてパラメータ$a, b_1, b_2$を推定する。

$
\sum e^2 = \sum(Y – \hat{a} – \hat{b_1}X  – \hat{b_2}X) ^2
$

残差平方和$\sum e^2$が最小になるように、推定値$\hat{a}, \hat{b_1}, \hat{b_2}$を求める。

(1)以下の値を求める。

$
\begin{align}
&\sum X_1 \\
&\sum X_2\\
&\sum Y\\
&\sum X_1^2\\
&\sum X_2^2\\
&\sum Y^2\\
&\sum X_1Y\\
&\sum X_2Y\\
&\sum X_1X_2\\
\end{align}
$

(2)(1)より以下の値を求める。

$
\begin{align}
&S_{YY} = \sum (Y – \bar{Y})^2\\
&S_{11} = \sum (X_1 – \bar{X_1})^2\\
&S_{22} = \sum (X_2 – \bar{X_2})^2\\
&S_{Y1} = \sum (Y – \bar{Y})(X_1 – \bar{X_1})\\
&S_{Y2} = \sum (Y – \bar{Y})(X_2 – \bar{X_2})\\
&S_{12} = \sum (X_1 – \bar{X_1})(X_2 – \bar{X_2})
\end{align}
$

(3)(2)より以下の値を求める。

$
\begin{align}
D_0 &= S_{11}S_{22} – S_{12}^2\\
D_1 &= S_{Y1}S_{22} – S_{Y2}S_{12}\\
D_2 &= S_{Y2}S_{11} – S_{Y1}S_{12}
\end{align}
$

(4)(3)より以下の値を求める。

$
\begin{align}
&\hat{b_1} = \frac{D_1}{D_0}\\
&\hat{b_2} = \frac{D_2}{D_0}\\
&\hat{a} = \bar{Y} – \hat{b_1} \bar{X_1} – \hat{b_2} \bar{X_2}
\end{align}
$

$\hat{b_1}$は$X_1$以外の説明変数が一定の時、$X_1$の変化によって生じるYの変化を表し、$\hat{b_2}$は$X_2$以外の説明変数が一定の場合$X_2$の変化によって生じるYの変化を表す。

重回帰分析における決定係数$r^2$は単回帰分析の決定係数と同様に回帰平方和(回帰によって説明できるYの変動)をYの全変動で割った値である。

$
\begin{align}
r^2 &= \frac{\sum (\hat{Y} – \bar{Y})}{\sum (Y – \bar{Y})}\\
&= \frac{\hat{b_1}S_{Y1} + \hat{b_2}S_{Y2}}{S_{YY}}
\end{align}
$

となる。

ただし、重回帰係数の決定係数$r^2$は説明変数の値を増やしていくとその値が自動的に大きくなってしまう。説明力を持たない説明変数でも、モデルに追加することで残差が小さくなることがあるためである。その問題を解決するためにサンプルサイズを$n$, 説明変数の数を$k$とおいて、自由度修正済み決定係数$\bar{r^2}$を以下の式にて求める。

$
\bar{r^2} = 1 – \frac{n-1}{n-k-1}(1-r^2)
$

13-9. 重回帰分析

求める回帰式を$\hat{Y} = \hat{a} + \hat{b_1}X_1 + \hat{b_2}X_2$とする。

以下の値を求める。

$
\begin{align}
&\sum X_1 = 40\\
&\sum X_2 = 50\\
&\sum Y = 700\\
&\sum X_1^2 = 196\\
&\sum X_2^2 = 308\\
&\sum Y^2 = 62400\\
&\sum X_1Y = 2150\\
&\sum X_2Y = 2790\\
&\sum X_1X_2 = 226\\
&n = 10
\end{align}
$

(1)より以下の値を求める。

$
\begin{align}
&S_{YY} = 13400\\
&S_{11} = 36\\
&S_{22} = 58\\
&S_{Y1} = -650\\
&S_{Y2} = -710\\
&S_{12} = 26\\
\end{align}
$

(2)より以下の値を求める。

$
\begin{align}
D_0 &= 1412\\
D_1 &= -19240\\
D_2 &= -8660
\end{align}
$

(3)より以下の値を求める。

$
\begin{align}
\hat{b_1} &= -13.63\\
\hat{b_2} &= -6.133\\
\hat{a} &= 155.2
\end{align}
$

よって求める回帰方程式は$\hat{Y} = 155.2 -13.63X_1 -6.133X_2$である。

決定係数$r^2 = \frac{\hat{b_1}S_{Y1} + \hat{b_2}S_{Y2}}{S_{YY}}$に当てはめると

$
\begin{align}
r^2  &= \frac{(-13.63)(-650) + (-6.133)(-710)}{13400}\\
&= 0.9859
\end{align}
$

自由度修正済み決定係数$\bar{r^2}$

$\bar{r^2} = 1 – \frac{n-1}{n-k-1}(1-r^2)$ に当てはめると

$
\begin{align}
\bar{r^2} &= 1 – \frac{10-1}{10-2-1}(1-0.9859)\\
&= 0.9819
\end{align}
$

$\hat{Y} = 155.2 – 13.63X_1 – 6.133X_2$より中古車価格は136,300円低下する。

$\hat{Y} = 155.2 – 13.63X_1 – 6.133X_2$より中古車価格は61,330円低下する。

$\hat{Y} = 155.2 – 13.63X_1 – 6.133X_2$より$155.2 -13.63(3) – 6.133(7) = 71.4$

よって、約71.4万円である。

13-10. 重回帰分析の応用:2次関数の推定

$X = X_1, X^2 = X_2$とおくと、求める回帰式を$\hat{Y} = \hat{a} + \hat{b_1}X_1 + \hat{b_2}X_2$とする。

以下の値を求める。

$
\begin{align}
&\sum X_1 = 55\\
&\sum X_2 = 385\\
&\sum Y = 400\\
&\sum X_1^2 = 385\\
&\sum X_2^2 = 25333\\
&\sum Y^2 = 16888\\
&\sum X_1Y = 2300\\
&\sum X_2Y = 15866\\
&\sum X_1X_2 = 3025\\
&n = 10
\end{align}
$

(1)より以下の値を求める。

$
\begin{align}
&S_{YY} = 888\\
&S_{11} = 82.5\\
&S_{22} = 10510.5\\
&S_{Y1} = 100\\
&S_{Y2} = 466\\
&S_{12} = 907.5
\end{align}
$

(2)より以下の値を求める。

$
\begin{align}
D_0 &= 43560.0\\
D_1 &= 628155.0\\
D_2 &= -52305.0
\end{align}
$

(3)より以下の値を求める。

$
\begin{align}
\hat{b_1} &= 14.4205\\
\hat{b_2} &= -1.20076\\
\hat{a} &= 6.91667
\end{align}
$

よって求める回帰方程式は$\hat{Y} = 6.91667 -14.4205X – 1.20076X^2$である。

決定係数$r^2 = \frac{\hat{b_1}S_{Y1} + \hat{b_2}S_{Y2}}{S_{YY}}$に当てはめると

$
\begin{align}
r^2  &= \frac{(-14.4205)(100) + (-1.20076)(466)}{888}\\
&= 0.9938
\end{align}
$

① を参照

$\hat{Y} = 6.91667 -14.4205X – 1.20076X^2$より、$6.91667 -14.4205(4.5) – 1.20076(4.5)^2 = 47.49$であるため、求める収穫量は47.49kg/aである。

$\hat{Y} = 6.91667 -14.4205X – 1.20076X^2$より、$6.91667 -14.4205(0) – 1.20076(0)^2 = 6.91667$であるため、求める収穫量は6.91667kg/aである。

最大値は$a – \frac{\hat{b_1}^2}{4\hat{b}_2} = 50.21236$、最大値になる肥料使用量は$\frac{-b_1}{2 \cdot b_2} = 6.00474$。

よって、約$6kg/a$の時に最大値約$50.21236kg/a$をとる。

13-11. 単純回帰分析:統計解析ソフトウェア使用

統計解析ソフトウェアを用いて計算すると $\hat{Y} = -43.749 + 0.36041X_1 + 0.63365X_2 + 1.0587X_3$

$
\begin{align}
r^2 = 0.99736 \\
\bar{r^2} = 0.99637
\end{align}
$

$\hat{b_1} = 0.36041$より、約3604円増加する。

$\hat{b_2} = 0.63365$より、約6337円増加する。

$\hat{b_3} = 1.0587$より、約1,0587円増加する。

M:$\hat{Y} = -43.749 + 0.36041(165) + 0.63365(60) + 1.0587(26)$より約81,2600円

N:$\hat{Y} = -43.749 + 0.36041(190) + 0.63365(48) + 1.0587(32)$より約890,200円

O:$\hat{Y} = -43.749 + 0.36041(125) + 0.63365(52) + 1.0587(27)$より約628,400円

P:$\hat{Y} = -43.749 + 0.36041(105) + 0.63365(39) + 1.0587(35)$より約558,600円

Q:$\hat{Y} = -43.749 + 0.36041(200) + 0.63365(57) + 1.0587(13)$より約782,100円

『Pythonで学ぶNLPの基礎とLLMへの反映』サポートページ・追加コンテンツ

Pythonで学ぶNLPの基礎とLLMへの反映』のサポートページです。主に誤植が見つかった場合の正誤表の作成やカラー画像の確認が行えるように作成を行いました。誤植につきましては見つかり次第都度追加いたしますので、お気づきの方は気軽にご指摘ください。

追加コンテンツ

正誤表

空間ベクトルのベクトル方程式(Vector equation)を用いた直線・平面の表現

空間ベクトルのベクトル方程式(Vector equation)を用いることで直線・平面を表現することができます。当記事ではベクトル方程式を用いて直線・平面を定義し、式変形を行うことで$x,y,z$を用いた直線や平面の式表現について確認を行います。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$5.3$節「基底と次元」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

ベクトル方程式と直線・平面

空間ベクトル

$$
\large
\begin{align}
\mathbf{a} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \in \mathbb{R}^{3}
\end{align}
$$

空間ベクトル$\mathbf{a} \in \mathbb{R}^{3}$を上記のように定義する。

平面の方程式の導出

$$
\large
\begin{align}
\mathbf{u} = \left[\begin{array}{c} u_1 \\ u_2 \\ u_3 \end{array} \right], \, \mathbf{v} = \left[\begin{array}{c} v_1 \\ v_2 \\ v_3 \end{array} \right], \, \mathbf{w} = \left[\begin{array}{c} w_1 \\ w_2 \\ w_3 \end{array} \right]
\end{align}
$$

上記のように定義されるベクトル$\mathbf{u}, \, \mathbf{v}, \, \mathbf{w}$を元に下記のように平面を表すベクトル$\mathbf{a}$を定義する。
$$
\large
\begin{align}
\mathbf{a} &= \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \\
\mathbf{a} &= \mathbf{u} + s \mathbf{v} + t \mathbf{w}, \quad s, t \in \mathbb{R}
\end{align}
$$

このとき上記より下記のような空間内の平面の方程式が得られる。
$$
\large
\begin{align}
& \alpha(x-u_1) + \beta(y-u_2) + \gamma(z-u_3) = 0 \quad (1) \\
& \alpha = v_2 w_3 – v_3 w_2, \, \beta = v_3 w_1 – v_1 w_3, \, \gamma = v_1 w_2 – v_2 w_1 \quad (2)
\end{align}
$$

ここでベクトル$\displaystyle \left[\begin{array}{c} \alpha \\ \beta \\ \gamma \end{array} \right]$は$\mathbf{v}$と$\mathbf{w}$の外積$\mathbf{v} \times \mathbf{w}$かつ$\mathbf{a}$が表す平面の法線ベクトルに対応する。外積は下記で取り扱った。

ベクトル空間の使用例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$101$

$[1]$
直線を表すベクトルを$\mathbf{a} \in \mathbb{R}^{3}$とおくと、$\mathbf{a}$は下記のように表せる。
$$
\large
\begin{align}
\mathbf{a} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] = \left[\begin{array}{c} 1 \\ 3 \\ 2 \end{array} \right] + t \left[\begin{array}{c} 1 \\ 1 \\ 1 \end{array} \right]
\end{align}
$$

上記より$x-1=y-3=z-2$も得られる。また、$t=2$のとき、下記が成立する。
$$
\large
\begin{align}
\mathbf{a} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] &= \left[\begin{array}{c} 1 \\ 3 \\ 2 \end{array} \right] + 2 \left[\begin{array}{c} 1 \\ 1 \\ 1 \end{array} \right] \\
&= \left[\begin{array}{c} 3 \\ 5 \\ 4 \end{array} \right]
\end{align}
$$

上記より直線が点$(2,5,4)$を通ることが確認できる。

$[2]$
直線を表すベクトルを$\mathbf{a} \in \mathbb{R}^{3}$とおくと、$\mathbf{a}$は下記のように表せる。
$$
\large
\begin{align}
\mathbf{a} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] &= \left[\begin{array}{c} 1 \\ -1 \\ 2 \end{array} \right] + t \left( \left[\begin{array}{c} 2 \\ 4 \\ 5 \end{array} \right] – \left[\begin{array}{c} 1 \\ -1 \\ 2 \end{array} \right] \right) \\
&= \left[\begin{array}{c} 1 \\ -1 \\ 2 \end{array} \right] + t \left[\begin{array}{c} 1 \\ 5 \\ 3 \end{array} \right]
\end{align}
$$

上記より$\displaystyle x-1 = \frac{y+1}{5} = \frac{z-2}{3}$も得られる。

基本例題$102$

$$
\large
\begin{align}
\overrightarrow{OA} = \left[\begin{array}{c} 1 \\ -2 \\ 3 \end{array} \right], \, \overrightarrow{OB} = \left[\begin{array}{c} -2 \\ 0 \\ 1 \end{array} \right], \, \overrightarrow{OC} = \left[\begin{array}{c} 3 \\ 2 \\ -5 \end{array} \right]
\end{align}
$$

上記より、$\overrightarrow{AB}, \, \overrightarrow{AC}$はそれぞれ下記のように得られる。
$$
\large
\begin{align}
\overrightarrow{AB} &= \overrightarrow{OB} – \overrightarrow{OA} \\
&= \left[\begin{array}{c} -2 \\ 0 \\ 1 \end{array} \right] – \left[\begin{array}{c} 1 \\ -2 \\ 3 \end{array} \right] \\
&= \left[\begin{array}{c} -3 \\ 2 \\ -2 \end{array} \right] \\
\overrightarrow{AC} &= \overrightarrow{OC} – \overrightarrow{OA} \\
&= \left[\begin{array}{c} 3 \\ 2 \\ -5 \end{array} \right] – \left[\begin{array}{c} 1 \\ -2 \\ 3 \end{array} \right] \\
&= \left[\begin{array}{c} 2 \\ 4 \\ -8 \end{array} \right]
\end{align}
$$

$(2)$式に基づいて法線ベクトル$\displaystyle \left[\begin{array}{c} \alpha \\ \beta \\ \gamma \end{array} \right]$は下記のように計算できる。
$$
\large
\begin{align}
\left[\begin{array}{c} \alpha \\ \beta \\ \gamma \end{array} \right] &= \left[\begin{array}{c} v_2 w_3 – v_3 w_2 \\ v_3 w_1 – v_1 w_3 \\ v_1 w_2 – v_2 w_1 \end{array} \right] \\
&= \left[\begin{array}{c} 2 \cdot (-8) – (-2) \cdot 4 \\ (-2) \cdot 2 – (-3) \cdot (-8) \\ (-3) \cdot 4 – 2 \cdot 2 \end{array} \right] \\
&= \left[\begin{array}{c} -8 \\ -28 \\ -16 \end{array} \right]
\end{align}
$$

上記より平面の方程式は下記のように得られる。
$$
\large
\begin{align}
-8(x-1) – 28(y+2) -16(z-3) &= 0 \\
2(x-1) + 7(y+2) + 4(z-3) &= 0 \\
2x + 7y + 4z &= 0
\end{align}
$$

Python開発環境の構築手順: pyenv+venvを使ってjupyterlabが使えるまで

プログラミングを学んだり、自分で何かしらのコードを書こうと思った際に、開発環境の構築に手間取るケースは意外と多いと思います。また、ある程度プログラミング慣れてくると、利用しているライブラリのバージョン不整合でつまづくケースも出てくると思います。

そこで本稿では、Pythonの開発環境構築の中で比較的シンプルな方法である、venvを使った開発環境構築手順を解説します。ここで解説する手順は、シンプルではありますが、プロジェクト毎に仮想環境を構築して作業するので、他のアプリケーションに影響を及ぼさない構成になっています。

開発環境の階層構造

Pythonに限らないですが開発環境としては2段階の階層構造になっていると捉えると良いです(下図)。

まず、実行するPython自体の選択です。Pythonに限らずバージョンによって機能が異なることが多く、どのPythonを使うかを選択します。2023年4月の時点での最新は3.11.3です。個人での小規模な開発では深く気にしないという選択も取れますが、新しい機能を試してみたり、Pythonのバージョンが指定されているライブラリなどを利用する際には、自由に切り替えられると嬉しいです。

次に、利用するライブラリ群の管理です。通常、プログラミングの際には公開されていたりする「ライブラリ」を利用していきます。このライブラリにもバージョンがあり、機能が変わってきます。また、ライブラリ自体も別のライブラリを利用するような関係を持っていたりします。このように依存関係があるため、ライブラリ群をプロジェクト毎に管理できると嬉しいです。

「開発環境」というと、Python自体とそこで利用されるライブラリを指します。これらはそれぞれ依存関係を持っていますので、プロジェクト(アプリケーションやデータ分析対象など)毎に切り替えられると嬉しいです。

Python自体の管理(切り替え)

Pythonの環境としてよく利用される構成としては以下のものがあると思います。

No.環境の管理概要
1システム標準OSに標準で搭載れるPython。システムで利用されているため、バージョンアップには注意が必要(変更しない方が安全)。
2Anacondaデータサイエンスをはじめとする科学技術計算のためのプラットフォーム。Pythonの実行環境、パッケージ管理など総合的に扱う。
3pyenvPythonのバージョン管理をするためのシンプルなツール。
4Dockerコンテナと呼ばれる仮想的な環境をコンピュータの中に構築するツール。

これらは厳密に同じ階層に位置する技術ではないものもありますが、Python環境というとこのような環境を使うことが多いと思います。

1はシステムで利用するPythonなので、切り替えはできないです。2~4の技術を利用することで、Python自体を切り替えることができます。

ライブラリ群の管理

パッケージ管理ツールとしては以下のツールがよく用いられると思います。

No.パッケージ管理概要
1venv+pipPython標準。venvで実行環境の管理をして、venvの中でpipを使ってライブラリのインストール、依存関係の管理を行う。
2Anacondaデータサイエンスをはじめとする科学技術計算のためのプラットフォーム。Pythonの実行環境、パッケージ管理など総合的に扱う。
3poetryパッケージの管理ツール。ライブラリの依存関係を明にファイルとして管理するので、全く同じ構成を再現できる。

Pythonの切り替えとパッケージ管理はそれぞれ独立していることが多いので、これらを組み合わせて開発環境を構築します。(Anacondaを使う場合は、他と併用できない)

開発環境の構成

前述の通りPythonの開発環境構築手段は複数あります。その中で本稿では下記の構成での環境構築手順を解説します。

Python管理パッケージ管理
pyenvvenv+pip

この構成の特徴は、python標準機能を使うことです。pyenv自体はPython標準ではありませんが、軽量なツールなので、全体としては軽い構成になっています。

Anacondaもよく利用されていますが、Anacondaを使うとpipが基本的には利用できなくなり、Python標準から外れる必要があります。

Dockerとpoetryを使った方法は、解説動画をYouTubeにあげていますが、この構成は環境の安定性という点では優れており、第三者に全く同じ構成を構築することが容易にできます。しかし、全体的に重たくトラブルが発生すると修正するのにある程度の知識や慣れが必要です。

構築手順

ここでは、各種ツールの導入解説、実際の環境構築手順解説をし、例としてjupyterlabを立てるところまでを解説します。

なお、本稿で紹介する手順をまとめて、githubにテンプレートリポジトリを作って公開しています。よければそちらも参考にしてください。

tok41/basic-dev-env

動作確認環境

以下の環境で確認をしています。Linux(Ubuntu等)でも似たような手順で進められると思います。筆者はWindows環境が手元にないので、動作手順は未確認です。公式ドキュメントに記載がありますのでそちらをご確認ください。

  • OS: macOS Ventura
  • チップ: Apple M1

pyenvの導入

ここで紹介する手順の中で最も難易度が高いのがこのpyenvの導入だと思います。難しいと思われる場合には、Pythonのバージョン切り替えはできないですが、本節を飛ばして「venvでの仮装環境構築」に進んでも大丈夫です。

pyenvの導入にあたっての詳細は公式githubリポジトリに記載されているので、そちらを確認してください。

https://github.com/pyenv/pyenv#installation

Macを利用している場合は、Macのパッケージ管理ツールであるHomebrewを使ってインストールできます。インストールした後に、PATHを設定する必要がありますが、Linuxの場合と同じ手順なので後述します。

brew update
brew install pyenv

UbuntuなどのLinux環境を利用している場合には、下記の通り、リポジトリをcloneして、PATHを通すだけで利用できます。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

次に、Pyenvを利用できるようにするためにPATHを通します。利用するシェルがbashであれば.bashrcに、zshであれば.zshrcに以下の文を追加します。

export PYENV_ROOT="$HOME/.pyenv
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

設定を追加した後は、ターミナルを立ち上げ直すなどして設定を反映させておきます。

Windowsの場合は、pyenv-winというツールの利用が推奨されています(公式ドキュメント参照)。

利用するPythonのインストール

pyenvを利用することで、システムにインストールされているものと異なるバージョンのPythonをインストールして切り替えることができます。

まず、以下のコマンドでインストールするPythonのバージョンを探します。

pyenv install --list

数字だけのものが公式版のPythonと思っていて良いです。このリストの中から利用するバージョンを選定し、下記のコマンドでインストールします。下記の例では3.11.0をインストールしています。

pyenv install 3.11.0

インストールが無事に終了すると、以下のコマンドでpyenvで切り替えることができるPythonのリストが表示されます。

pyenv versions

上記コマンドを実行すると以下のように表示されます。

* system (set by /Users/t41/.pyenv/version)
  3.11.0

*がついているものが現在利用しているPythonバージョンです(上記の例ではsystem標準のPythonが利用されています)。

インストールしたPythonを利用するには、以下のコマンドを実行します。

pyenv local 3.11.0

pyenvの次のlocalはカレントディレクトリ以下で利用するPythonを指定するという意味です。localの他に、globalを指定するとpyenv環境全体で利用するPythonが変更されます。通常のアプリケーション開発の場合には、localで該当のプロジェクト内だけで設定が閉じるようにした方が良いです。他にもshellというコマンドもありますが、これにするとセッション内だけでPythonの設定が反映されます。なので、ターミナルを閉じて再度開いた場合などは元の設定に戻っているはずです。

インストールlistが古い場合

pyenvにはlistをupdateするようなコマンドがありません。利用の環境によっては最新のバージョンがリストに出てこないケースがあります。

公式ドキュメントにはいくつか対策が記載されていますが、この中でもpyenv-updateというプラグインを導入するのが良いと思います。

導入手順は以下の通り、gitリポジトリをcloneしてくるだけです。

git clone https://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update

これでupdateコマンドが使えるようになっているはずです。

pyenv update

リストを確認すると最新のバージョンが出てくると思います。

venvでの仮装環境構築

次にvenvを使って仮想環境を構築します。venvPythonの標準モジュールなので、インストール作業等は不要で、以下のコマンドを実行するだけです。

python -m venv kasou

このコマンドは、pythonのモジュールであるvenvを実行し、その時の引数としてkasouを渡すという意味です。kasouは仮想環境の名称なので任意の名前で良いです。

仮想環境の有効化

次に構築した仮想環境を有効化して、実際に使っていきます。

source venv/bin/activate

上記のコマンドで仮想環境が有効化されます。

仮想環境を終了するには、以下のコマンドを実行します。

deactivate

仮想環境にパッケージのインストール

構築したばかりの仮想環境は外部パッケージが何もインストールされていないまっさらな環境です。ここにpipコマンドで必要なパッケージをインストールしていきます。

python -m pip install matplotlib

requirements.txtが用意されている場合は、以下のコマンドで一度にインストールできます。

python -m pip install -r requirements.txt 

jupyterlabの起動

jupyterlabは、Python(だけではないですが)のインタラクティブな実行環境です。利用方法など詳しくは下記ページで取り扱ったので、そちらを参照してください。

上述の手順で仮想環境を有効にしておけば、下記コマンドを実行することでjupyterlabが立ち上がります。

jupyter lab --port 58888

シェルスクリプト利用のススメ

jupyter labは上記のコマンドで立ち上げることができます。

しかし、パラメータの指定などする場合、いちいちパラメータ名を記憶しておくのは面倒です。また、複数の環境を立ち上げているような場合はポート番号が重複する問題に悩まされることも少なくありません。

そこで、環境変数に必要なパラメータを設定しておき、シンプルなコマンドで実行できるようにスクリプトを用意することをお勧めします。

具体的には、下記のテキストファイルを用意します。

# PORT設定: 環境変数が空なら58888を設定する
JUPYTER_PORT="${JUPYTER_PORT}"

if [ -z "$JUPYTER_PORT" ]; then
  JUPYTER_PORT="58888"
fi

# jupyter lab 起動
jupyter lab --allow-root \
    --NotebookApp.token='' \
    --ip=0.0.0.0 --port $JUPYTER_PORT \
    --no-browser --autoreload

シェルスクリプトの詳細はここでは割愛させていただきます。

上記のファイルを実行することで、環境変数(JUPYTER_PORT)に指定のポート番号でjupyterlabが起動します。環境変数を設定していない場合は、5888で起動します。

bash bin/run_jupyter.sh

環境変数の指定を合わせて実行する場合は以下のようにします。環境変数を一時的に指定したい場合にはこの起動方法が便利です。

JUPYTER_PORT=48888 bash bin/run_jupyter.sh

上記のコマンドで48888番ポートでjupyterlabに接続できます。

まとめ

本稿では、pyenvvenvを利用したPython環境の構築について書きました。環境は、MacOS環境での動作確認結果でありますが、Linuxの場合は大きく変わらない手順で作業できるかと思います。Windowsの環境は未確認です。

様々なライブラリに依存して開発が進んでいる現状では、仮想環境の利用は必須だと思います。よほどシンプルなプロジェクトであれば別ですが、ライブラリの依存関係という余計な悩みに振り回されないためにも仮想環境については慣れておくと良いと思います。

dockerを利用するべきかpyenv+venvを利用するべきかは、それぞれの技術の習得状況によって異なるとは思います。個人で開発するような小規模な場合は、今回紹介した方法が軽くて良いのではないかと考えます。

参考

1次独立(linearly independent)と関数のベクトル空間

$1$次独立(linearly independent)・$1$次従属はベクトル空間を取り扱う上で基底(basis)の定義に用いられるなど重要な概念です。当記事では関数のベクトル空間が$1$次独立(linearly independent)であるかの判定について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$5.2$節「$1$次独立と$1$次従属」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

関数のベクトル空間の1次独立

1次独立・1次従属の定義

下記で詳しく取り扱いました。

関数のベクトル空間の1次独立

$$
\large
\begin{align}
a_0 + a_1 x + a_2 x^2 \cdots + a_{n-1} x^{n-1} + a_n x^{n} = 0 \implies a_1 = a_2 = \cdots = a_n = 0
\end{align}
$$

上記が成立するとき$\{ 1, \, x, \, x^2, \, \cdots , \, x^{n-1}, \, x^{n} \}$は$1$次独立である。

具体例の確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$094$

$a_0 + a_1 x + a_2 x^2 = 0$に$x=0, \, x=1, \, x=-1$を代入すると下記が得られる。
$$
\large
\begin{align}
a_0 &= 0 \\
a_0 + a_1 + a_2 &= 0 \\
a_0 \, – \, a_1 + a_2 &= 0
\end{align}
$$

上記より$a_0 = a_1 = a_2 = 0$が得られる。よって$\{ 1, \, x, \, x^2 \}$は$\mathbb{R}$上$1$次独立である。

1次独立(linearly independent)・1次従属の定義と判定

$1$次独立(linearly independent)・$1$次従属はベクトル空間を取り扱う上で基底(basis)の定義に用いられるなど重要な概念です。当記事では$1$次独立(linearly independent)・$1$次従属の定義と判定について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$5.2$節「$1$次独立と$1$次従属」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

1次独立・1次従属

1次独立の定義

$$
\large
\begin{align}
a_1 \mathbf{v}_{1} + \cdots + a_n \mathbf{v}_{n} = \mathbf{0} \implies a_1 = a_2 = \cdots = a_n = 0
\end{align}
$$

『ベクトル空間$V$に基づく$\mathbf{v}_{1} \in V, \cdots \mathbf{v}_{n} \in V$』と『$a_1 \in \mathbb{R}, \cdots a_n \in \mathbb{R}$』について上記が成立するとき$\{ \mathbf{v}_{1}, \cdots \mathbf{v}_{n} \}$は$1$次独立である。

1次従属の定義

$1$次独立の定義が成立しない場合、$1$次従属である。

1次独立・1次従属の判定

判定法①

$1$次独立の定義が成立する場合は$1$次独立、成立しない場合は$1$次従属であると判断する。

判定法②

ベクトル${ \mathbf{v}_{1}, \cdots \mathbf{v}_{n} }$を並べた行列を$A$とおき、$\mathrm{rank} A = n$であれば$1$次独立、$\mathrm{rank} A < n$であれば$1$次従属であると判断する。

行列$A$のランク$\mathrm{rank} A$は$A$について行基本変形を行い、$A$を階段形に変形することで得ることができる。

具体例の確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$090$

$[1]$
$$
\large
\begin{align}
\left\{ \mathbf{v}_{1} = \left[\begin{array}{c} 0 \\ 0 \end{array} \right], \, \mathbf{v}_{2} = \left[\begin{array}{c} 1 \\ 0 \end{array} \right] \right\}
\end{align}
$$

上記に対し、$1 \cdot \mathbf{v}_{1} + 0 \cdot \mathbf{v}_{2}$は下記のように計算できる。
$$
\large
\begin{align}
1 \cdot \mathbf{v}_{1} + 0 \cdot \mathbf{v}_{2} &= 1 \cdot \left[\begin{array}{c} 0 \\ 0 \end{array} \right] + 0 \cdot \left[\begin{array}{c} 1 \\ 0 \end{array} \right] \\
&= \left[\begin{array}{c} 0 \\ 0 \end{array} \right]
\end{align}
$$

上記より『$a_1 \mathbf{v}_{1} + \cdots + a_n \mathbf{v}_{n} = \mathbf{0} \implies a_1 = a_2 = \cdots = a_n = 0$』が成立しないので$\{ \mathbf{v}_{1},\mathbf{v}_{2} \}$は$1$次従属である。

$[2]$
$$
\large
\begin{align}
\left\{ \mathbf{v}_{1} = \left[\begin{array}{c} 1 \\ -1 \end{array} \right], \, \mathbf{v}_{2} = \left[\begin{array}{c} 1 \\ 1 \end{array} \right] \right\}
\end{align}
$$

$a_1 \mathbf{v}_{1} + a_2 \mathbf{v}_{2} = \mathbf{0}$のとき、下記が成立する。
$$
\large
\begin{align}
a_1 \mathbf{v}_{1} + a_2 \mathbf{v}_{2} &= \mathbf{0} \\
a_1 \left[\begin{array}{c} 1 \\ -1 \end{array} \right] + a_2 \left[\begin{array}{c} 1 \\ 1 \end{array} \right] &= \left[\begin{array}{c} 0 \\ 0 \end{array} \right] \\
\left[\begin{array}{c} a_1+a_2 \\ -a_1+a_2 \end{array} \right] &= \left[\begin{array}{c} 0 \\ 0 \end{array} \right]
\end{align}
$$

上記を解くと$a_1=a_2=0$が得られる。『$a_1 \mathbf{v}_{1} + \cdots + a_n \mathbf{v}_{n} = \mathbf{0} \implies a_1 = a_2 = \cdots = a_n = 0$』が成立するので$\{ \mathbf{v}_{1},\mathbf{v}_{2} \}$は$1$次独立である。

$[3]$
$$
\large
\begin{align}
\left\{ \mathbf{v}_{1} = \left[\begin{array}{c} 1 \\ 2 \end{array} \right], \, \mathbf{v}_{2} = \left[\begin{array}{c} 2 \\ 1 \end{array} \right], \, \mathbf{v}_{3} = \left[\begin{array}{c} 1 \\ 1 \end{array} \right] \right\}
\end{align}
$$

上記に対し、$1 \cdot \mathbf{v}_{1} + 1 \cdot \mathbf{v}_{2} – 3 \cdot \mathbf{v}_{3}$は下記のように計算できる。
$$
\large
\begin{align}
1 \cdot \mathbf{v}_{1} + 1 \cdot \mathbf{v}_{2} – 3 \cdot \mathbf{v}_{3} &= \left[\begin{array}{c} 1 \\ 2 \end{array} \right] + \left[\begin{array}{c} 2 \\ 1 \end{array} \right] – 3 \left[\begin{array}{c} 1 \\ 1 \end{array} \right] \\
&= \left[\begin{array}{c} 0 \\ 0 \end{array} \right]
\end{align}
$$

上記より『$a_1 \mathbf{v}_{1} + \cdots + a_n \mathbf{v}_{n} = \mathbf{0} \implies a_1 = a_2 = \cdots = a_n = 0$』が成立しないので$\{ \mathbf{v}_{1},\mathbf{v}_{2},\mathbf{v}_{3} \}$は$1$次従属である。

基本例題$092$

$$
\large
\begin{align}
\left\{ \mathbf{v}_{1} = \left[\begin{array}{c} 1 \\ 0 \\ 2 \end{array} \right], \, \mathbf{v}_{2} = \left[\begin{array}{c} 0 \\ 1 \\ a \end{array} \right], \, \mathbf{v}_{3} = \left[\begin{array}{c} 2 \\ -1 \\ 0 \end{array} \right] \right\}
\end{align}
$$

$\displaystyle A = \left[\begin{array}{ccc} \mathbf{v}_{1} & \mathbf{v}_{2} & \mathbf{v}_{3} \end{array} \right]$のようにおくと、下記のように行基本変形できる。
$$
\large
\begin{align}
A = & \left[\begin{array}{ccc} \mathbf{v}_{1} & \mathbf{v}_{2} & \mathbf{v}_{3} \end{array} \right] = \left[\begin{array}{ccc} 1 & 0 & 2 \\ 0 & 1 & -1 \\ 2 & a & 0 \end{array} \right] \\
\longrightarrow & \left[\begin{array}{ccc} 1 & 0 & 2 \\ 0 & 1 & -1 \\ 0 & a & -4 \end{array} \right] \\
\longrightarrow & \left[\begin{array}{ccc} 1 & 0 & 2 \\ 0 & 1 & -1 \\ 0 & 0 & a-4 \end{array} \right]
\end{align}
$$

上記は$a=4$のとき$\mathrm{rank} A = 2$、$a \neq 4$のとき$\mathrm{rank} A = 3$である。よって$a=4$のとき$\{ \mathbf{v}_{1},\mathbf{v}_{2},\mathbf{v}_{3} \}$は$\mathbb{R}$上$1$次従属である。

基本例題$093$

$$
\large
\begin{align}
\left\{ \mathbf{v}_{1} = \left[\begin{array}{c} a \\ -1 \\ 7 \end{array} \right], \, \mathbf{v}_{2} = \left[\begin{array}{c} 3 \\ 1 \\ 5 \end{array} \right], \, \mathbf{v}_{3} = \left[\begin{array}{c} -3 \\ 0 \\ 7 \end{array} \right] \right\}
\end{align}
$$

$\displaystyle A = \left[\begin{array}{ccc} \mathbf{v}_{1} & \mathbf{v}_{2} & \mathbf{v}_{3} \end{array} \right]$のようにおくと、下記のように行基本変形できる。
$$
\large
\begin{align}
A = & \left[\begin{array}{ccc} \mathbf{v}_{1} & \mathbf{v}_{2} & \mathbf{v}_{3} \end{array} \right] = \left[\begin{array}{ccc} a & 3 & -3 \\ -1 & -1 & 0 \\ 7 & 5 & 7 \end{array} \right] \\
\longrightarrow & \left[\begin{array}{ccc} 1 & 1 & 0 \\ 7 & 5 & 7 \\ a & 3 & -3 \end{array} \right] \\
\longrightarrow & \left[\begin{array}{ccc} 1 & 1 & 0 \\ 0 & -2 & 7 \\ 0 & -a+3 & -3 \end{array} \right] \\
\longrightarrow & \left[\begin{array}{ccc} 1 & 1 & 0 \\ 0 & 1 & -7/2 \\ 0 & -a+3 & -3 \end{array} \right] \\
\longrightarrow & \left[\begin{array}{ccc} 1 & 1 & 0 \\ 0 & 1 & -7/2 \\ 0 & 0 & -(7a-15)/2 \end{array} \right]
\end{align}
$$

上記は$a=15/7$のとき$\mathrm{rank} A = 2$、$a \neq 15/7$のとき$\mathrm{rank} A = 3$である。よって$\displaystyle a = \frac{15}{7}$のとき${ \mathbf{v}_{1},\mathbf{v}_{2},\mathbf{v}_{3} }$は$\mathbb{R}$上$1$次独立である。