【機械学習】Jupyter Notebook & ブログ記事で数式記号を表示させる


投稿日 2020年3月3日 >> 更新日 2024年7月9日

今回はJupyter Notebookやブログサイトの記事などで数式を綺麗に表示させるための方法をご紹介したいと思います。

Jupyter Notebookでは、デフォルトで数式表示の設定がされているので記法さえ覚えてしまえばこのように表示することができます。

$$\hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots+ \theta_nx_n$$

自前でWebサイトやブログサイトを運営されている方は、MathJaxというJava Scriptのコードを入手し、HTMLファイルの<head>.....</head>内に組み込む必要があります。

まずは自前のWebサイトにJava Scriptのコードを組み込んで、機械学習で使われる数式を表示させていきたいと思います。

MathJaxを読み込む

こちらのサイトを参考に組込みました。

<!-- base.html -->

<!doctype html>
<html>
  <head>

    <title>Blog</title>

    <!-- MathJax-->
    <script>
      MathJax = {
      chtml: {
        matchFontHeight: false
      },
      tex: {
        inlineMath: [['$', '$']]
      }
      };
    </script>
    <script id="MathJax-script" async
      src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
    </script>

  </head>
<body>

</body>
</html>

ヘッダー内に組込み、ファイルを保存し、サイトをリロードしたらさっそく記述していきましょう。

記法に関してはこちらのサイトがコピー&ペーストをできるように一覧を設けてくれています。

  • 「Easy Copy MathJax」と検索!

ここからはJupyter Notebook上でも同じ記法です。

基本的に、数式を表示させたい部分をドルマークで囲みます($......$)。

見出しのように数式を表示させるにはドルマークふたつを両端に置く($$......$$)。


<font size='3'>$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$</font>

$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$

文章中に数式を表示させる場合は、数式の部分にだけドルマークをひとつずつ両端に置きます($.....$)。

$ \hat{y} $ は予測された値で、$ n $ は特徴量数。

$\hat{y}$ は予測された値で、$n$ は特徴量数。

注意1 ドルマーク($)の数をしっかり揃えないと数式のレイアウトが崩れてしまいます。例えば今みたいな文章中に$を打ち込んだ際はひとつ余分に多くなることになります。その場合は、逆クォート3つ(```)を両端で囲んで表示させると崩れないで済みます。

注意2 もうひとつは、過去に書いた記事内に($)を打ち込んでいる場合、文章中の字体が崩れていないか確かめる必要があります(<pre>や<code>タグ内では表示されません)。

それでは、機械学習モデルで使われる数式一部(回帰モデル)ですが、MathJaxを使って表示させてみたいと思います。

回帰モデル

式 線形回帰モデルの予測


$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$

$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$

式 線形回帰モデルの予測(ベクトル形式)


$$ \hat{y} = h_\theta(x)= \theta^T \cdot x $$

$$ \hat{y} = h_\theta(x)= \theta^T \cdot x $$

式 正規方程式


$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X})^{-1} \cdot \boldsymbol{X}^T \cdot y $$

$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X})^{-1} \cdot \boldsymbol{X}^T \cdot y $$

回帰モデルの性能指標

式 線形回帰モデルのMSEコスト関数


$$ MSE(\boldsymbol{X}, h_\theta) = \frac{1}{m} \sum_{i=1}^m(\theta^T\cdot x^{(i)} - y^{(i)})^2 $$

$$ MSE(\boldsymbol{X}, h_\theta) = \frac{1}{m} \sum_{i=1}^m(\theta^T\cdot x^{(i)} - y^{(i)})^2 $$

式 線形回帰モデルのRMSEコスト関数


$$ RMSE(\boldsymbol{X}, h) = \sqrt{\frac{1}{m} \sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2} $$

$$ RMSE(\boldsymbol{X}, h) = \sqrt{\frac{1}{m} \sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2} $$

式 線形回帰モデルのMAEコスト関数


$$ MAE(\boldsymbol{X}, h) = \frac{1}{m} \sum_{i=1}^m | h(x^{(i)})-y^{(i)} | $$

$$ MAE(\boldsymbol{X}, h) = \frac{1}{m} \sum_{i=1}^m | h(x^{(i)})-y^{(i)} | $$

回帰モデルの最適化アルゴリズム

式 コスト関数の偏微分


$$ \frac{\partial}{\partial \theta_j}MSE(\theta) = \frac{2}{m}\sum_{i=1}^{m}(\theta^T \cdot x^{(i)} - y^{(i)})x_j^{(i)} $$

$$ \frac{\partial}{\partial \theta_j}MSE(\theta) = \frac{2}{m}\sum_{i=1}^{m}(\theta^T \cdot x^{(i)} - y^{(i)})x_j^{(i)} $$

式 関数の勾配ベクトル


$$ \nabla_\theta MSE(\theta) = \left(\begin{array}{c} \frac{\partial}{\partial\theta_0}MSE(\theta) \\\ \frac{\partial}{\partial\theta_1}MSE(\theta) \\\ \vdots \\\ \frac{\partial}{\partial\theta_n}MSE(\theta) \end{array} \right) = \frac{2}{m}\boldsymbol{X}^T \cdot (\boldsymbol{X} \cdot \theta - y) $$

注意 ベクトル空間内の改行を(\\\)としていますが、本来は(\\)であります。

$$ \nabla_\theta MSE(\theta) = \left(\begin{array}{c} \frac{\partial}{\partial\theta_0}MSE(\theta) \\ \frac{\partial}{\partial\theta_1}MSE(\theta) \\ \vdots \\ \frac{\partial}{\partial\theta_n}MSE(\theta) \end{array} \right) = \frac{2}{m}\boldsymbol{X}^T \cdot (\boldsymbol{X} \cdot \theta - y) $$

式 勾配降下法のステップ


$$ \theta^{(\mathrm{next \ step})} = \theta - \eta\nabla_\theta MSE(\theta) $$

$$ \theta^{(\mathrm{next \ step})} = \theta - \eta\nabla_\theta MSE(\theta) $$

線形回帰の正則化

式 リッジ回帰コスト関数


$$ J(\theta) = MSE(\theta) + \alpha\frac{1}{2}\sum_{i=1}^{n}\theta_i^2 $$

$$ J(\theta) = MSE(\theta) + \alpha\frac{1}{2}\sum_{i=1}^{n}\theta_i^2 $$

式 リッジ回帰の閉形式の解


$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X} + \alpha\boldsymbol{A})^{-1} \cdot \boldsymbol{X}^T \cdot y $$

$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X} + \alpha\boldsymbol{A})^{-1} \cdot \boldsymbol{X}^T \cdot y $$

式 Lasso回帰のコスト関数


$$ J(\theta) = MSE(\theta) + \alpha\sum_{i=1}^n|\theta_i| $$

$$ J(\theta) = MSE(\theta) + \alpha\sum_{i=1}^n|\theta_i| $$

式 Lasso回帰の劣勾配ベクトル


$$ \mathrm{where \ sign}(\theta_i) = \begin{eqnarray}\begin{cases} -1 & \mathrm{if} \  \theta_i < 0 \\\ 0 & \mathrm{if} \ \theta_i = 0 \\\ +1 & \mathrm{if} \ \theta_i > 0\end{cases}\end{eqnarray} $$

$$ g(\theta,J) = \nabla_\theta MSE(\theta) + \alpha \left(\begin{array}{c} \mathrm{sign}(\theta_1) \\\ \mathrm{sign}(\theta_2) \\\ \vdots \\\ \mathrm{sign}(\theta_n) \end{array}\right)  $$

注意 ベクトル空間内の改行を(\\\)としていますが、本来は(\\)であります。

$$ \mathrm{where \ sign}(\theta_i) = \begin{eqnarray}\begin{cases} -1 & \mathrm{if} \ \theta_i < 0 \\ 0 & \mathrm{if} \ \theta_i = 0 \\ +1 & \mathrm{if} \ \theta_i > 0\end{cases}\end{eqnarray} $$

$$ g(\theta,J) = \nabla_\theta MSE(\theta) + \alpha \left(\begin{array}{c} \mathrm{sign}(\theta_1) \\ \mathrm{sign}(\theta_2) \\ \vdots \\ \mathrm{sign}(\theta_n) \end{array}\right) $$

式 Elastic Netのコスト関数


$$ J(\theta) = MSE(\theta) + \tau\alpha\sum_{i=1}^n |\theta_i | + \frac{1-\tau}{2}\alpha\sum_{i=1}^n \theta_i^2 $$

$$ J(\theta) = MSE(\theta) + \tau\alpha\sum_{i=1}^n |\theta_i | + \frac{1-\tau}{2}\alpha\sum_{i=1}^n \theta_i^2 $$

回帰モデルの分類

式 ロジスティック回帰モデル


$$ \hat{p} = h_\theta (x) = \sigma(\theta^T \cdot x) $$

$$ \hat{p} = h_\theta (x) = \sigma(\theta^T \cdot x) $$

式 ロジスティック関数


$$ \sigma(t) = \frac{1}{1+exp(-t)} $$

$$ \sigma(t) = \frac{1}{1+exp(-t)} $$

式 ロジスティック回帰モデルによる予測


$$ \hat{y} = \begin{eqnarray}\begin{cases} 0 & \mathrm{if} \ \hat{p} < 0.5 \\\ 1 & \mathrm{if} \ \hat{p} \geqq 0.5 \end{cases}\end{eqnarray} $$

$$ \hat{y} = \begin{eqnarray}\begin{cases} 0 & \mathrm{if} \ \hat{p} < 0.5 \\ 1 & \mathrm{if} \ \hat{p} \geqq 0.5 \end{cases}\end{eqnarray} $$

式 単一の訓練インスタンスに対するコスト関数


$$ c(\theta) = \begin{eqnarray}\begin{cases} -log(\hat{p}) & \mathrm{if} \ y = 1 \\\ -log(1-\hat{p}) & \mathrm{if} \ y = 0 \end{cases}\end{eqnarray} $$

$$ c(\theta) = \begin{eqnarray}\begin{cases} -log(\hat{p}) & \mathrm{if} \ y = 1 \\ -log(1-\hat{p}) & \mathrm{if} \ y = 0 \end{cases}\end{eqnarray} $$

式 ロジスティック回帰のコスト関数(Log Loss)


$$ J(\theta) = -\frac{1}{m}\sum_{i=1}^m \left[ y^{(i)}log \left(\hat{p}^{(i)} \right) + (1 - y^{(i)})log \left(1 - \hat{p}^{(i)} \right) \right] $$

$$ J(\theta) = -\frac{1}{m}\sum_{i=1}^m \left[ y^{(i)}log \left(\hat{p}^{(i)} \right) + (1 - y^{(i)})log \left(1 - \hat{p}^{(i)} \right) \right] $$

式 ロジスティック回帰のコスト関数の偏微分


$$ \frac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m}\sum_{i=1}^m \left(\sigma(\theta^T \cdot x^{(i)}) - y^{(i)} \right) x_j^{(i)} $$

$$ \frac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m}\sum_{i=1}^m \left(\sigma(\theta^T \cdot x^{(i)}) - y^{(i)} \right) x_j^{(i)} $$

式 クラス$k$ に対するソフトマックススコア


$$ s_k(x) = (\theta^{(k)})^T \cdot x $$

$$ s_k(x) = (\theta^{(k)})^T \cdot x $$

式 ソフトマックス関数


$$ = \frac{exp(s_k(x))}{\sum_{j=1}^{K} exp(s_j(x))} $$

$$ \hat{p}_k = \sigma(s(x))_k $$

$$ = \frac{exp(s_k(x))}{\sum_{j=1}^{K} exp(s_j(x))} $$

$$ \hat{p}_k = \sigma(s(x))_k $$

式 ソフトマックス回帰分類器の予測


$$  = \mathrm{argmax}_k \ \left((\theta^{(k)})^T \cdot x \right) $$

$$  = \mathrm{argmax}_k \ s_k (x)  $$

$$ \hat{y} = \mathrm{argmax}_k \ \sigma(s(x))_k $$

$$ = \mathrm{argmax}_k \ \left((\theta^{(k)})^T \cdot x \right) $$

$$ = \mathrm{argmax}_k \ s_k (x) $$

$$ \hat{y} = \mathrm{argmax}_k \ \sigma(s(x))_k $$

式 交差エントロピーコスト関数


$$ J(\Theta) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} log \left(\hat{p}_k^{(i)} \right) $$

$$ J(\Theta) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} log \left(\hat{p}_k^{(i)} \right) $$

式 クラス$k$ についての交差エントロピーの勾配降下ベクトル


$$  = \frac{1}{m} \sum_{i=1}^m \left(\hat{p}_k^{(i)} - y_k^{(i)} \right) x^{(i)} $$

$$ \nabla_{\theta^{(k)}} J(\Theta) $$

$$ = \frac{1}{m} \sum_{i=1}^m \left(\hat{p}_k^{(i)} - y_k^{(i)} \right) x^{(i)} $$

$$ \nabla_{\theta^{(k)}} J(\Theta) $$

他のモデルの数式に関して

他のモデルの数式については、この記事の続きとするとか、別記事にするか検討しています。

とりあえずですが、今回はMathJax導入や数式の記法について少しばかりご紹介できたので、参考になれば幸いです。

それでは以上となります。

最後までご覧いただきありがとうございました。