<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI &gt; 機械学習基礎 on M1KE BL0G</title><link>https://www.m1ke.org/categories/ai_ml/</link><description>Recent content in AI &gt; 機械学習基礎 on M1KE BL0G</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><copyright>mike</copyright><atom:link href="https://www.m1ke.org/categories/ai_ml/index.xml" rel="self" type="application/rss+xml"/><item><title>Excelで学ぶ最小二乗法</title><link>https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/</link><pubDate>Mon, 24 Mar 2025 16:35:55 +0900</pubDate><guid>https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/</guid><description>&lt;img src="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/lsm.jpg" alt="Featured image of post Excelで学ぶ最小二乗法" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;機械学習を始めた頃に作った、5年前のスプレッドシートを見つけた&lt;/li&gt;
&lt;li&gt;内容は、最小二乗法の考え方を使って、キロメートルをマイルに変換する係数を求めるもの&lt;/li&gt;
&lt;li&gt;久々に見返してみると、単純な例ではあるものの、最小二乗法や機械学習の基本を理解するにはちょうどよい題材だった&lt;/li&gt;
&lt;li&gt;そこで、あらためて内容を整理しておく&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="昔のファイル"&gt;昔のファイル&lt;/h2&gt;
&lt;p&gt;Excelで、キロメートルからマイルへの変換係数を求めるファイルを作っていた。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/supushi.png"
width="1175"
height="171"
srcset="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/supushi_hu_ba0c9f3b9e3a5a80.png 480w, https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/supushi_hu_f521a25c4462c27a.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="687"
data-flex-basis="1649px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/excel.png"
width="1490"
height="560"
srcset="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/excel_hu_783f7370a7aa38af.png 480w, https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/excel_hu_b8cf973bb5455b35.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="266"
data-flex-basis="638px"
&gt;&lt;/p&gt;
&lt;h2 id="解説"&gt;解説&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;今回やることは、&lt;strong&gt;キロメートルをマイルに変換する係数&lt;/strong&gt;を、最小二乗法の考え方で求めること&lt;/li&gt;
&lt;li&gt;たとえば、100km は約 62.137mile&lt;/li&gt;
&lt;li&gt;つまり、本来の変換式は次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
mile = km \times 0.62137
$$&lt;ul&gt;
&lt;li&gt;この $0.62137$ が、キロメートルをマイルに変換するための係数&lt;/li&gt;
&lt;li&gt;ただし今回は、この係数を最初から使うのではなく、Excel上で少しずつ係数を更新しながら、正しい値に近づけていく&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="やりたいこと"&gt;やりたいこと&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;キロメートルを $x$、マイルを $y$ とする&lt;/li&gt;
&lt;li&gt;変換式を次のように置く&lt;/li&gt;
&lt;/ul&gt;
$$
y = ax
$$&lt;ul&gt;
&lt;li&gt;ここで、$a$ が求めたい係数&lt;/li&gt;
&lt;li&gt;今回の教師データは次の通り&lt;/li&gt;
&lt;/ul&gt;
$$
x = 100
$$$$
t = 62.137
$$&lt;ul&gt;
&lt;li&gt;$t$ は正解データ、つまり教師データである&lt;/li&gt;
&lt;li&gt;求めたいのは、次の式を満たす $a$ である&lt;/li&gt;
&lt;/ul&gt;
$$
62.137 = a \times 100
$$&lt;ul&gt;
&lt;li&gt;普通に計算すれば、次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
a = \frac{62.137}{100} \\\\
a = 0.62137
$$&lt;ul&gt;
&lt;li&gt;つまり、正解となる係数は $0.62137$ である&lt;/li&gt;
&lt;li&gt;しかし今回は、あえてこの値を直接求めず、Excelで学習させるようにして近づけていく&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="最小二乗法とは何か"&gt;最小二乗法とは何か&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;最小二乗法とは、&lt;strong&gt;予測値と正解値のズレを二乗し、その値がなるべく小さくなるようにする方法&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;今回の予測値は $ax$&lt;/li&gt;
&lt;li&gt;正解値は $t$&lt;/li&gt;
&lt;li&gt;したがって、誤差は次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
ax - t
$$&lt;ul&gt;
&lt;li&gt;この誤差を二乗したものが、今回小さくしたい値となる&lt;/li&gt;
&lt;/ul&gt;
$$
(ax - t)^2
$$&lt;ul&gt;
&lt;li&gt;Excelでは、この誤差の二乗がだんだん小さくなっていく様子をグラフで確認している&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="予測値を計算する"&gt;予測値を計算する&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;まずは、現在の係数 $a$ を使って予測値を計算する&lt;/li&gt;
&lt;li&gt;数学の式で書けば次の意味になる&lt;/li&gt;
&lt;/ul&gt;
$$
y = ax
$$&lt;ul&gt;
&lt;li&gt;最初は当てずぽうの係数を当てはめる&lt;/li&gt;
&lt;li&gt;たとえば、最初の係数を $a = 0.1$ とする&lt;/li&gt;
&lt;li&gt;すると結果は、次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
y = 0.1 \times 100 \\\\
y = 10
$$&lt;ul&gt;
&lt;li&gt;つまり、最初の予測では、100km を 10mile と予測していることになる&lt;/li&gt;
&lt;li&gt;しかし、本当の値は 62.137mile である&lt;/li&gt;
&lt;li&gt;この時点では、かなり大きく外れている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="誤差を計算する"&gt;誤差を計算する&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;E列では、予測値と正解値の差を計算する&lt;/li&gt;
&lt;li&gt;これを、数学の式では次の意味である&lt;/li&gt;
&lt;/ul&gt;
$$
ax - t
$$&lt;ul&gt;
&lt;li&gt;先ほどの例では、予測値が $10$だった&lt;/li&gt;
&lt;li&gt;そして、正解値は $62.137$&lt;/li&gt;
&lt;li&gt;なので、次のように誤差が求まる&lt;/li&gt;
&lt;/ul&gt;
$$
10 - 62.137 = -52.137
$$&lt;ul&gt;
&lt;li&gt;誤差がマイナスであるということは、予測値が正解値よりも小さいという意味となる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="誤差の二乗を計算する"&gt;誤差の二乗を計算する&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;そこで、誤差の二乗を計算する。&lt;/li&gt;
&lt;li&gt;これは、数学の式で書けば次の通り&lt;/li&gt;
&lt;/ul&gt;
$$
(ax - t)^2
$$&lt;ul&gt;
&lt;li&gt;最小二乗法では、この値を小さくすることが目的となる&lt;/li&gt;
&lt;li&gt;誤差をそのまま使わずに二乗する理由は、プラスの誤差とマイナスの誤差が打ち消し合わないようにするため&lt;/li&gt;
&lt;li&gt;また、大きな誤差ほどより大きく評価されるため、誤差を小さくする方向がわかりやすくなる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="係数を更新する"&gt;係数を更新する&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;F列では、新しい係数 $a$ を計算している&lt;/li&gt;
&lt;li&gt;これは、次のような意味となる&lt;/li&gt;
&lt;/ul&gt;
$$
a_{\text{new}} = a - \eta \times e \\\\
a_{\text{new}} = a - \eta(ax - t)
$$&lt;ul&gt;
&lt;li&gt;a_new: 新しいa&lt;/li&gt;
&lt;li&gt;a: 現在のa&lt;/li&gt;
&lt;li&gt;$\eta$: 学習率&lt;/li&gt;
&lt;li&gt;e: 誤差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで、誤差 $e$ は次のように定義する。&lt;/p&gt;
$$
e = ax - t
$$&lt;ul&gt;
&lt;li&gt;そして、今回の学習率は $0.001$ である&lt;/li&gt;
&lt;li&gt;最初の更新では、現在の係数が $0.1$、誤差が $-52.137$ なので、次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
a_{\text{new}} = 0.1 - 0.001 \times (-52.137)
$$&lt;p&gt;計算すると、次の値になる。&lt;/p&gt;
$$
a_{\text{new}} = 0.152137
$$&lt;ul&gt;
&lt;li&gt;誤差がマイナスなので、係数 $a$ は増える&lt;/li&gt;
&lt;li&gt;これは自然な動きとなる&lt;/li&gt;
&lt;li&gt;なぜなら、最初の予測値は $10$ であり、正解値 $62.137$ よりも小さすぎるから&lt;/li&gt;
&lt;li&gt;予測値を大きくするには、係数 $a$ を大きくする必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="係数が正解に近づいていく"&gt;係数が正解に近づいていく&lt;/h2&gt;
&lt;p&gt;最初の係数は次の値である。&lt;/p&gt;
$$
a = 0.1
$$&lt;p&gt;一方、本当の係数は次の値である。&lt;/p&gt;
$$
a = 0.62137
$$&lt;p&gt;Excelでは、係数が次のように少しずつ更新されていく。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.152137
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.1990603
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.2412913
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.2792991
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.3135062
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;このように、係数 $a$ が少しずつ $0.62137$ に近づいていく。&lt;/li&gt;
&lt;li&gt;係数が正しい値に近づくことで、予測値も正解値に近づいていく。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="グラフからわかること"&gt;グラフからわかること&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/gosa.png"
width="1099"
height="464"
srcset="https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/gosa_hu_87ce8c4efc036988.png 480w, https://www.m1ke.org/p/excel%E3%81%A7%E5%AD%A6%E3%81%B6%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95/gosa_hu_53d75769165224d8.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="236"
data-flex-basis="568px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;グラフでは、横軸に試行回数、縦軸に誤差の二乗を取っている&lt;/li&gt;
&lt;li&gt;最初は誤差が大きい&lt;/li&gt;
&lt;li&gt;これは、最初の係数 $a = 0.1$ では、100km を 10mile と予測してしまうから&lt;/li&gt;
&lt;li&gt;正解は 62.137mile であるため、最初の誤差はかなり大きい&lt;/li&gt;
&lt;li&gt;しかし、試行回数が増えるにつれて、係数 $a$ が更新される。その結果、予測値が正解値に近づき、誤差の二乗は急激に小さくなる&lt;/li&gt;
&lt;li&gt;この「誤差が小さくなっていく様子」が、最小二乗法の基本的なイメージである&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="機械学習との関係"&gt;機械学習との関係&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;今回の例は非常にシンプル&lt;/li&gt;
&lt;li&gt;入力は1つだけ（$x=100$）&lt;/li&gt;
&lt;li&gt;正解も1つだけ（$t=62.137$）&lt;/li&gt;
&lt;li&gt;求める係数も1つだけ（$a$）&lt;/li&gt;
&lt;li&gt;しかし、考え方は機械学習の基本と同じ&lt;/li&gt;
&lt;li&gt;流れは次の通り:
&lt;ol&gt;
&lt;li&gt;適当な係数から始める&lt;/li&gt;
&lt;li&gt;その係数を使って予測する&lt;/li&gt;
&lt;li&gt;予測値と正解値のズレを計算する&lt;/li&gt;
&lt;li&gt;誤差が小さくなるように係数を更新する&lt;/li&gt;
&lt;li&gt;この処理を何度も繰り返す&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;今回の例では、まず適当な係数として $a = 0.1$ から始めている&lt;/li&gt;
&lt;li&gt;次に、その係数を使って予測する
$$
y = ax
$$&lt;/li&gt;
&lt;li&gt;そして、予測値と正解値のズレを計算する
$$
e = ax - t
$$&lt;/li&gt;
&lt;li&gt;最後に、誤差が小さくなるように係数を更新する
$$
a_{\text{new}} = a - \eta(ax - t)
$$&lt;/li&gt;
&lt;li&gt;この流れを何度も繰り返すことで、係数はだんだん正解に近づいていく&lt;/li&gt;
&lt;li&gt;つまり、今回のExcelは、非常に小さな機械学習モデルを表していると言える&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="厳密な最小二乗法との違い"&gt;厳密な最小二乗法との違い&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;注意事項として、係数の更新式をわかりやすくするために、今回は次の形にしている&lt;/li&gt;
&lt;/ul&gt;
$$
a_{\text{new}} = a - \eta(ax - t)
$$&lt;ul&gt;
&lt;li&gt;しかし、最小二乗法では、本来は誤差そのものではなく、誤差の二乗を小さくする&lt;/li&gt;
&lt;li&gt;誤差を $e$ とすると、次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
e = ax - t
$$&lt;ul&gt;
&lt;li&gt;そのため、誤差の二乗、つまり損失 $E$ は次のように定義できる&lt;/li&gt;
&lt;/ul&gt;
$$
E = e^2 = (ax - t)^2
$$&lt;ul&gt;
&lt;li&gt;係数 $a$ をどの方向に更新すれば損失 $E$ が小さくなるかを知るために、$E$ を $a$ で微分する&lt;/li&gt;
&lt;li&gt;すると、次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
\frac{dE}{da} = 2x(ax - t)
$$&lt;ul&gt;
&lt;li&gt;したがって、厳密な勾配降下法では、更新式は次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
a_{\text{new}} = a - \eta \cdot 2x(ax - t)
$$&lt;ul&gt;
&lt;li&gt;つまり、Excelで使った簡易版の更新式とは少し形が異なる&lt;/li&gt;
&lt;li&gt;また、損失関数を次のように置くことも多い&lt;/li&gt;
&lt;li&gt;なぜ $\frac{1}{2}$ を使うかというと、微分したときに $2$ が消えて、式が簡単になるからである&lt;/li&gt;
&lt;/ul&gt;
$$
E = \frac{1}{2}(ax - t)^2
$$&lt;ul&gt;
&lt;li&gt;この場合、$E$ を $a$ で微分すると、次のようになる&lt;/li&gt;
&lt;/ul&gt;
$$
\frac{dE}{da} = x(ax - t)
$$&lt;ul&gt;
&lt;li&gt;したがって、更新式は次の形になる&lt;/li&gt;
&lt;/ul&gt;
$$
a_{\text{new}} = a - \eta x(ax - t)
$$&lt;ul&gt;
&lt;li&gt;今回のExcelでは、$x = 100$ が固定である&lt;/li&gt;
&lt;li&gt;そのため、$x$ の影響を学習率側に含めた簡易版として、次の更新式を使っていると考えられる&lt;/li&gt;
&lt;/ul&gt;
$$
a_{\text{new}} = a - \eta(ax - t)
$$&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;今回は、Excelを使って、キロメートルをマイルに変換する係数を最小二乗法の考え方で求めた&lt;/li&gt;
&lt;li&gt;最初は、適当な係数 $a = 0.1$ から始めた&lt;/li&gt;
&lt;li&gt;そこから、次の流れを繰り返した
&lt;ol&gt;
&lt;li&gt;予測する&lt;/li&gt;
&lt;li&gt;誤差を計算する&lt;/li&gt;
&lt;li&gt;誤差の二乗を計算する&lt;/li&gt;
&lt;li&gt;係数を更新する&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;この繰り返しによって、係数 $a$ は少しずつ正解である $0.62137$ に近づいていった&lt;/li&gt;
&lt;li&gt;Excelを使うことで、最小二乗法の「誤差を小さくする」という考え方を視覚的に理解できる&lt;/li&gt;
&lt;li&gt;特に、グラフで誤差の二乗が急激に小さくなっていく様子を見ると、数式だけではわかりにくい学習のイメージがつかみやすい。&lt;/li&gt;
&lt;li&gt;キロからマイルへの変換という単純な例でも、最小二乗法や機械学習の基本的な考え方は十分に学ぶことができる&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>machinelearning.wtfの機械学習の用語の翻訳</title><link>https://www.m1ke.org/p/machinelearning.wtf%E3%81%AE%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E7%94%A8%E8%AA%9E%E3%81%AE%E7%BF%BB%E8%A8%B3/</link><pubDate>Mon, 24 Mar 2025 16:35:55 +0900</pubDate><guid>https://www.m1ke.org/p/machinelearning.wtf%E3%81%AE%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E7%94%A8%E8%AA%9E%E3%81%AE%E7%BF%BB%E8%A8%B3/</guid><description>&lt;img src="https://www.m1ke.org/p/machinelearning.wtf%E3%81%AE%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E7%94%A8%E8%AA%9E%E3%81%AE%E7%BF%BB%E8%A8%B3/ml.png" alt="Featured image of post machinelearning.wtfの機械学習の用語の翻訳" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;semi-supervised learningについて調べていたら&lt;code&gt;machinelearning.wtf&lt;/code&gt;というサイトにあたった&lt;/li&gt;
&lt;li&gt;Machine Learning Glossary という基本的な機械学習の用語集のサイト&lt;/li&gt;
&lt;li&gt;少し読んでて色々と面白かったので、全部読みたかったので、AIに簡潔にまとめてもらった&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="機械学習の設計と学習タイプ-learning-paradigms"&gt;機械学習の設計と学習タイプ (Learning Paradigms)&lt;/h2&gt;
&lt;h3 id="基本的な学習方法"&gt;基本的な学習方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;教師あり学習 (Supervised Learning)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定義&lt;/strong&gt;: 入力データ $X$ と、それに対応する正解ラベル（ターゲット） $Y$ のペアを用いてモデルを訓練する手法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目的&lt;/strong&gt;: 未知の入力に対して、正しい出力（クラスや数値）を予測する関数を学習する。代表例に分類（Classification）と回帰（Regression）がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;教師なし学習 (Unsupervised Learning)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定義&lt;/strong&gt;: 正解ラベルのないデータを受け取り、データ自体に潜む構造、パターン、あるいは関係性を見つけ出す手法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主なタスク&lt;/strong&gt;: データを似たもの同士に分ける「クラスタリング」、高次元のデータを扱いやすくする「次元削減」、異常を検知する「異常検知」など。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;半教師あり学習 (Semi-supervised Learning)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定義&lt;/strong&gt;: 大量の「ラベルなしデータ」と、少量の「ラベルありデータ」を組み合わせて学習を行う手法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;メリット&lt;/strong&gt;: すべてのデータに手動でラベルを付けるコストを劇的に削減しつつ、教師なし学習よりも高い精度（予測の方向性）を得ることができる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="高度な学習アプローチ"&gt;高度な学習アプローチ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自己教師あり学習 (Self-supervised Learning)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定義&lt;/strong&gt;: データ自身から自動的に疑似的な正解ラベル（Pretext task）を生成して学習する手法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;応用&lt;/strong&gt;: 大規模言語モデル（LLM）の「次の単語予測」や、画像表現学習（Contrastive Learning）などで中心的な役割を果たす。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;弱教師あり学習 (Weak Supervision)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定義&lt;/strong&gt;: 専門家による高品質なラベルの代わりに、クラウドソーシングによるノイズを含むラベル、大雑把なルールベースのラベル（Heuristic labels）、あるいは別の簡易モデルが出力した低品質なラベルを用いて訓練する手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;強化学習 (Reinforcement Learning - RL)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定義&lt;/strong&gt;: エージェント（行動主体）が環境（Environment）の中で行動（Action）を選択し、その結果得られる報酬（Reward）を最大化するように試行錯誤を通じて学習する手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="データの割り当てと統計的仮定-data--evaluation-setup"&gt;データの割り当てと統計的仮定 (Data &amp;amp; Evaluation Setup)&lt;/h2&gt;
&lt;h3 id="データセットの分割"&gt;データセットの分割&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;訓練データセット (Training Dataset)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;モデルのパラメータ（重みとバイアス）を直接更新・調整するために使用される最大のデータ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;検証データセット (Validation Dataset)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;訓練中のモデルの性能を評価し、過学習を監視したり、ハイパーパラメータ（学習率や層の数など）を最適化するために使用されるデータ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;テストデータセット (Test Dataset)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;訓練およびハイパーパラメータ調整が完全に終了した最終モデルに対して、一度だけ適用される独立したデータ。モデルの「真の汎化性能」を計測する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ミニバッチ (Mini-batch)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;巨大なデータセットを一度に処理できない場合や、効率的な最適化を行うために分割された小規模なデータの塊（サブセット）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="評価検証アルゴリズム"&gt;評価・検証アルゴリズム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;交差検証 (Cross Validation)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;データを $K$ 個のグループ（フォールド）に分割し、そのうちの1つを検証用、残りを訓練用として $K$ 回学習と評価を繰り返す手法。限定されたデータセットで過学習を防ぎ、信頼性の高い評価を行う。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;独立同分布 (i.i.d - Independent and Identically Distributed)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;データセット内の各サンプルが「互いに他のサンプルに影響を与えず（独立）」、かつ「すべて同じ確率分布から発生している（同分布）」という仮定。ほとんどの統計的機械学習アルゴリズムの前提となる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="エラー分析とモデルの課題-error-analysis--constraints"&gt;エラー分析とモデルの課題 (Error Analysis &amp;amp; Constraints)&lt;/h2&gt;
&lt;h3 id="バイアスとバリアンス"&gt;バイアスとバリアンス&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;バイアス・バリアンスのトレードオフ (Bias-Variance Tradeoff)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;モデルの予測誤差を構成する2つの主要因のバランス関係。一方を下げようとすると、もう一方が上がりやすくなる。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;バイアス (Bias)&lt;/strong&gt;: モデルの前提や構造が単純すぎるために発生する一貫した誤差。**アンダーフィッティング（過小適合）**を招く。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;バリアンス (Variance)&lt;/strong&gt;: 訓練データの微細なノイズや個体差に対してモデルが敏感すぎるために発生する誤差。**オーバーフィッティング（過学習）**を招く。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="適合の課題"&gt;適合の課題&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;オーバーフィッティング (Overfitting / 過学習)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;モデルが訓練データのノイズや特殊なパターンまで過剰に学習してしまい、未知のテストデータに対する性能（汎化性能）が著しく低下する現象。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;アンダーフィッティング (Underfitting / 過小適合)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;モデルの表現力が低すぎる（または訓練不足である）ため、データの根底にある本質的な構造やパターンを捉えきれていない状態。訓練データでもテストデータでもエラーが高くなる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="ニューラルネットワークの構成要素-neural-network-components"&gt;ニューラルネットワークの構成要素 (Neural Network Components)&lt;/h2&gt;
&lt;h3 id="活性化関数-activation-functions"&gt;活性化関数 (Activation Functions)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;活性化関数 (Activation function)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;各ニューロンの出力を決定する関数。入力の線形結合に対して適用され、ネットワークに&lt;strong&gt;非線形性&lt;/strong&gt;を導入する。これにより、単純な直線の組み合わせでは表現できない複雑な境界線を学習可能にする。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReLU (Rectified Linear Unit)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数式&lt;/strong&gt;: $f(x) = \max(0, x)$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特徴&lt;/strong&gt;: 入力が正であればそのまま出力し、負であれば0を出力する。計算が非常に高速で、勾配消失問題を劇的に緩和するため、最も広く使われている。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leaky ReLU&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数式&lt;/strong&gt;: $f(x) = \max(\alpha x, x)$ （一般に $\alpha = 0.01$ などの小さな値）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特徴&lt;/strong&gt;: 入力が負の領域でもわずかな傾きを持たせることで、ニューロンが完全に停止する問題を解決する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dying ReLU&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;現象&lt;/strong&gt;: 訓練中の大きな勾配更新によって、あるニューロンの入力が常に負になってしまい、ReLUの出力と勾配が完全にゼロ（機能停止）になってしまう現象。一度この状態に陥ると、そのニューロンは二度と更新されなくなる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Softmax (ソフトマックス関数)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;役割&lt;/strong&gt;: 出力層のベクトルを、各要素が0〜1の範囲に収まり、かつ総和が1になるように変換する関数。多クラス分類において、各クラスの「予測確率」を表現するために使用される。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="最適化手法アルゴリズム-optimizers--algorithms"&gt;最適化手法・アルゴリズム (Optimizers &amp;amp; Algorithms)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;勾配降下法 (Gradient Descent)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;損失関数（エラー）の勾配を計算し、その傾きと逆方向にモデルのパラメータ（重み）を繰り返し更新して最小値を目指す基本的なアルゴリズム。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;確率的勾配降下法 (Stochastic Gradient Descent - SGD)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;全データではなく、ランダムに選ばれた1つ（または少数）のサンプルごとに勾配を計算してパラメータを更新する手法。計算コストを抑え、局所最適解からの脱出を容易にする。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AdaGrad (Adaptive Gradient Algorithm)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;過去の勾配の履歴を蓄積し、頻繁に更新されるパラメータの学習率を小さく、あまり更新されないパラメータの学習率を大きく自動調整する手法。稀な特徴量の学習に強い。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RMSprop (Root Mean Square Propagation)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;過去の勾配の二乗を指数移動平均で減衰させながら蓄積し、学習率を調整する手法。AdaGradが訓練後半に学習率が下がりすぎて進まなくなる問題を解決する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADAM Optimizer (Adaptive Moment Estimation)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;過去の勾配の平均（Momentum）と、過去の勾配の二乗の指数移動平均（RMSProp）の2つの概念を組み合わせた最適化アルゴリズム。現在のディープラーニングにおいて最も安定し、広く使われている。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;適応的学習率 (Adaptive learning rate)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;訓練の進捗やパラメータごとの勾配の振る舞いに応じて、ハイパーパラメータである学習率を動的かつ自動的に変化させる仕組み全般。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モメンタム (Momentum)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;物理的な「慣性」の概念を勾配降下法に取り入れた手法。過去の更新方向を一定の割合で維持することで、局所最適解（ローカルミニマム）の脱出を助け、パラメータの振動を抑制する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1-bit Stochastic Gradient Descent (1-bit SGD)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;複数のマシンで並列して訓練を行う（分散学習）際、データ通信量を削減するため、各ノードが計算した勾配の値を1ビット（正か負か）の符号情報のみに量子化して通信する高速化技術。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="正則化初期化課題-regularization-initialization--learning-issues"&gt;正則化・初期化・課題 (Regularization, Initialization &amp;amp; Learning Issues)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;バッチ正規化 (Batch Normalization)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ニューラルネットワークの各中間層の出力を、ミニバッチごとに平均0、分散1に正規化（スケーリング）する手法。学習速度の向上、初期値依存の軽減、過学習の抑制（正則化効果）をもたらす。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内部共変量シフト (Internal Covariate Shift)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ネットワークの層が深くなるにつれ、前の層のパラメータ更新によって、後ろの層への入力データの確率分布が訓練中に絶えず変化してしまう現象。バッチ正規化はこれを緩和するために導入された。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ドロップアウト (Dropout)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;訓練の各ステップにおいて、ランダムに一定割合（例: 50%）のニューロンを無効化（ゼロに）して学習させる強力な正則化手法。特定のニューロンへの過度な依存（共同適応）を防ぎ、過学習を抑制する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;倒置ドロップアウト (Inverted Dropout)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;訓練時にドロップアウトを適用すると、生存したニューロンの出力の総和が小さくなってしまうため、訓練時にあらかじめ出力を $(1-p)$ で割ることでスケールを補正する手法。これにより、推論（テスト）時に特別なスケーリング処理を行う必要がなくなる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ランダム初期化 (Random Initialization)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ネットワークのパラメータ（重み）を一様な0ではなく、ランダムな小さな値で初期化すること。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;対称性の打破 (Symmetry Breaking)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;もしすべての重みを同じ値（例：0）で初期化すると、すべてのニューロンが全く同じ勾配を計算し、同じ値に更新されてしまう。これ（対称性）を防ぎ、各ニューロンに異なる役割を持たせるためにランダム初期化が必要となる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heの初期化 (He Initialization)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;活性化関数にReLU（またはその派生）を使用するディープネットワークに最適化された重みの初期化手法。前層のノード数 $n$ に対して、分散 $2/n$ のガウス分布から重みを抽出する。層が深くても勾配消失・爆発を防ぐ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;勾配消失問題 (Vanishing Gradient Problem)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ネットワークが深くなるにつれ、出力層から入力層へ向かって誤差を逆伝播する過程で勾配がどんどん小さくなり、入力層に近い層のパラメータが全く学習されなくなる現象。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;勾配爆発問題 (Exploding Gradient Problem)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;勾配消失とは逆に、大きな勾配（または1より大きな重み）が何層も掛け合わされることで勾配が指数関数的に肥大化し、モデルのパラメータが不安定になり破綻する現象。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ネットワーク特有の現象"&gt;ネットワーク特有の現象&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;破滅的忘却 (Catastrophic Forgetting)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;一般的なニューラルネットワークが新しいタスク（例: 犬の分類）を学習した際、それ以前に完璧に学習していた古いタスク（例: 猫の分類）の知識（パラメータ）を急激に上書きしてしまい、完全に忘れてしまう現象。継続学習（Continual Learning）における大きな課題。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="コンピュータビジョン-computer-vision"&gt;コンピュータビジョン (Computer Vision)&lt;/h2&gt;
&lt;h3 id="畳み込み演算と空間操作"&gt;畳み込み演算と空間操作&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;フィルター (Filter / 畳み込みカーネル)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;画像からエッジ、テクスチャ、形状などの特徴を抽出するために、入力画像の上をスライド（畳み込み）させる小さな行列。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1x1 Convolution (1x1 畳み込み)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;カーネルサイズが $1 \times 1$ の畳み込み。画像の縦横（空間解像度）サイズはそのままに、チャンネル（特徴量）の次元数を削減・増加させたり、非線形活性化関数を挟んで表現力を高めるために使われる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プーリング層 (Pooling layer)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;特徴マップの空間サイズを縮小し、計算量を削減すると同時に、物体の位置が多少ズレても同じ特徴として捉える「位置不変性」を付与する層。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Max Pooling (最大値プーリング)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;プーリング層の一種で、指定された領域内（ウィンドウ内）の最大値のみを抽出して出力する。エッジや特徴の存在を際立たせる効果がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Average Pooling (平均値プーリング)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;プーリング層の一種で、指定された領域内のピクセル値の平均値を計算して出力する。全体的な特徴を滑らかにダウンサンプリングする。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ストライド (Stride)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;畳み込み演算やプーリングにおいて、フィルター（カーネル）を画像上で1ステップごとに「何ピクセルずつ移動させるか」を指定するハイパーパラメータ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パディング (Padding)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;畳み込み処理を行う前に、入力画像の周囲に特定のデータ（通常は0）を付け足す操作。画像の端にあるピクセル情報が消失するのを防ぎ、出力サイズを制御する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Same Convolution&lt;/strong&gt;: 入力画像と出力特徴マップの空間サイズが全く同じになるように自動でパディングを行う設定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Valid Convolution&lt;/strong&gt;: パディングを一切行わない（No padding）設定。出力サイズは入力より小さくなる。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero Padding&lt;/strong&gt;: パディングの際、周囲を「0」のピクセルで埋める最も標準的な手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ソーベルフィルター (Sobel Filter)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;画像の水平方向・垂直方向における輝度の急激な変化（微分）を計算し、エッジ（輪郭）を検出する古典的な画像処理用畳み込みフィルター。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="物体検出と認識"&gt;物体検出と認識&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;バウンディングボックス (Bounding Box)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;画像内に存在する対象の物体を囲む四角い枠。一般的に、中心座標 $(x, y)$ と幅・高さ $(w, h)$、または左上と右下の2点の座標で指定される。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;アンカーボックス (Anchor Box)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;物体検出（YOLOやFaster R-CNNなど）において、画像内の各位置にあらかじめ配置される、様々なアスペクト比（縦横比）やサイズを持つ固定の候補枠。モデルはこの枠を基準に変形（オフセット）を予測する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ノンマックスサプレッション (Non-Max Suppression / NMS)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;物体検出モデルが、同じ1つの物体に対して重複して出力した大量のバウンディングボックスの中から、最も信頼度（確信度）が高いものだけを残し、それと大きく重なっている他の余分なボックスを排除するアルゴリズム。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;物体位置特定 (Object Localization)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;画像内に存在する「特定の1つの物体」が何であるかを分類すると同時に、それが画像内のどこにあるかをバウンディングボックスで特定するタスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="顔に関するタスク区分"&gt;顔に関するタスク区分&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;顔検出 (Face Detection)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;画像や映像の中に「人間の顔」が映っているかどうかを判定し、存在する場合はその位置（バウンディングボックス）を特定するタスク。誰の顔かは識別しない。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;顔認識 (Face Recognition)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;検出された顔が「データベースに登録されている誰のものであるか」を特定（1対多の照合）するタスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;顔検証 (Face Verification)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;提示された2つの顔画像（または顔とIDカード）を比較し、「これらは同一人物であるか否か」を判定する1対1の認証タスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="代表的なcnnアーキテクチャ"&gt;代表的なCNNアーキテクチャ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LeNet&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;1990年代にYann LeCun氏によって開発された、郵便番号の手書き数字認識（MNIST）用の初期の画期的な畳み込みニューラルネットワーク。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AlexNet&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;2012年のImageNet画像認識コンペティションで圧倒的な優勝を果たし、現在のディープラーニングブームの決定的な引き金となったモデル。ReLUやGPUの活用、ドロップアウトを導入。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VGGNet&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;2014年に提案されたモデル。$3 \times 3$ の非常に小さな畳み込みフィルターをシンプルに何層も深く積み重ねるアーキテクチャで、ネットワークの「深さ」の重要性を証明した。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ResNet (Residual Network)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;「スキップ接続（残差接続）」という、入力を数層先へ直接バイパスする構造を取り入れた革新的モデル。これにより、100層や1000層を超えるような極めて深いネットワークでも、勾配消失を起こさずに安定して学習可能になった。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="自然言語処理-natural-language-processing"&gt;自然言語処理 (Natural Language Processing)&lt;/h2&gt;
&lt;h3 id="テキスト表現と単語分散表現"&gt;テキスト表現と単語分散表現&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ワンホットエンコーディング (One-Hot Encoding)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;語彙（単語リスト）の数と同じ次元を持つベクトルを作成し、対象の単語に対応するインデックスだけを「1」、他の要素をすべて「0」にする表現手法。単語同士の「意味の近さ」を表現できないデメリットがある。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;単語埋め込み (Word Embedding / 単語ベクトル)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;単語を、その意味的な類似性や文脈を反映した、固定長（例: 300次元）の連続的な実数密ベクトルに変換する技術。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;word2vec&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;大量のテキストから、周辺の単語の文脈を利用して単語埋め込みを高速に学習する手法。内部に「CBOW」と「Skip-gram」という2つの手法を持つ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CBOW (Continuous Bag-of-Words)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;word2vecの学習アプローチの1つ。周辺の複数の単語（文脈）を入力として与え、その中心にある1つの単語を予測・当てることで単語ベクトルを学習する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip-gram&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;word2vecの学習アプローチの1つ。1つの中心単語を入力として与え、その周辺に現れる可能性の高い複数の単語（文脈）を予測・当てることでベクトルを学習する。一般にCBOWより高精度とされる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;doc2vec / Paragraph Vector&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;word2vecの仕組みを拡張し、単語だけでなく文、段落、あるいは文書全体を固定長のベクトルとして表現（分散表現）する手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fastText&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Facebook（現Meta）が開発したword2vecの発展系。単語を文字の集まり（Subword / 部分語）として扱う。辞書にない未知語（OOV）に対しても、部分語の組み合わせからベクトルを計算できる強みがある。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bag-of-Words (BoW)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;文章内の単語の出現順序や文法構造を完全に無視し、各単語が文章中に「何回出現したか」という頻度カウント（カウントベクトル）だけでテキストを表現する古典的かつ強力な手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;N-gram&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;テキストにおいて、連続する $N$ 個の単語（または文字）の塊やシーケンス。1つの場合はUni-gram、2つの場合はBi-gram、3つの場合はTri-gramと呼ぶ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bag-of-n-grams&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Bag-of-Wordsの拡張。単語1つずつではなく、連続する $N$ 個の単語の塊（N-gram）を1つの単位として扱い、その出現頻度を記録する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="言語タスクとアルゴリズム"&gt;言語タスクとアルゴリズム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ビームサーチ (Beam Search)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;文章生成（翻訳やテキスト生成など）において、各ステップで最も確率が高い上位 $k$ 個（この $k$ をビーム幅と呼ぶ）の文候補を常にキープしながら探索を進める近似アルゴリズム。すべての組み合わせを探索する貪欲法（Greedy Search）より精度が高く、全探索より圧倒的に軽量。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sequence to Sequence Learning (seq2seq)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ある可変長の系列データ（例：英語の文）を入力として受け取り、別の可変長の系列データ（例：日本語の文）を出力するモデル構造。入力を固定長ベクトルに圧縮する「Encoder（符号化器）」と、そこから目的の系列を出力する「Decoder（復号化器）」のペアで構成される。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;抽出型文書要約 (Extractive Sentence Summarization)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;原文に含まれる文やフレーズの中から、重要度が高いと判定された部分をそのまま抜き出し（コピーして）、それらを組み合わせて要約文を作成する手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;抽象型文書要約 (Abstractive Sentence Summarization)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;原文の言葉をそのまま使うのではなく、モデルが文脈全体の意味を理解した上で、人間のように新しい言葉、文法、表現を使って自発的に要約文を1から生成する高度な手法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;固有表現認識 (Named Entity Recognition - NER)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;テキスト中から、人名、地名、組織名、日付、時間、パーセントといった、特定のカテゴリ（固有表現）に該当する単語やフレーズを抽出・分類するタスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;共参照解析 (Coreference Resolution)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;テキスト中に登場する「彼」「彼女」「それ」などの代名詞や指示代名詞が、文内の具体的にどの名詞（指示対象）を指しているかを突き止め、紐付けるタスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="生成モデル回帰モデル新興技術-advanced-architecture"&gt;生成モデル・回帰モデル・新興技術 (Advanced Architecture)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Generative Adversarial Network (GAN / 敵対的生成ネットワーク)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;2つのネットワークを互いに競い合わせて成長させる生成モデルのフレームワーク。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generator (生成器)&lt;/strong&gt;: 本物のデータに似せた偽物データを生成し、識別器を騙そうとする。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discriminator (識別器)&lt;/strong&gt;: 入力されたデータが本物（実データ）か、Generatorが作った偽物かを見破ろうとする。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モード崩壊 (Mode Collapse)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;GANの訓練中に発生する代表的な失敗現象。Generatorが多様なデータを生成することを諦め、Discriminatorを最も簡単に騙すことができる特定の数少ないパターン（例：数字の生成で「1」ばかりを生成する）のみを繰り返し出力するようになる現象。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autoencoder (自己符号化器)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ニューラルネットワークに入力 $X$ を与え、出力層で同じ $X$ を復元（再現）するように学習するニューラルネットワーク。中間層（ボトルネック）の次元を小さくすることで、重要な特徴だけを抽出する「次元削減」や「異常検知」に応用される。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long Short-Term Memory (LSTM)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;従来の回帰型ニューラルネットワーク（RNN）が抱えていた長期間の時系列依存関係を学習できないという弱点を、情報を記憶・忘却・出力するための「3つのゲート構造（入力ゲート、忘却ゲート、出力ゲート）」と「セル状態」を導入することで解決したアーキテクチャ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ニューラルチューリングマシン (NTM / Neural Turing Machine)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;ニューラルネットワークのアーキテクチャに、外部のデジタルメモリ（記憶装置）を結合した高度なモデル。ネットワークがメモリの特定のアドレスに対してデータの読み書きを行い、高度なプログラム的処理やアルゴリズムを学習できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プロンプトエンジニアリング (Prompt Engineering)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;大規模言語モデル（LLM）に対して、期待する正確な回答、特定のフォーマット、あるいは適切な振る舞いを引き出すために、入力文（プロンプト）の文言や構造を設計・最適化する技術。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="数学統計評価指標-mathematics--evaluation-metrics"&gt;数学・統計・評価指標 (Mathematics &amp;amp; Evaluation Metrics)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Precision (適合率)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;分類モデルの評価指標の1つ。モデルが「陽性（正）」と予測したサンプルのうち、実際に本物の陽性であったサンプルの割合。偽陽性（誤検出）を減らしたいタスクで重視される。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recall (再現率)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;分類モデルの評価指標の1つ。実際に存在する本物の陽性サンプルのうち、モデルが漏らさずに「陽性」と予測（検出）できたサンプルの割合。見落とし（偽陰性）を減らしたいタスクで重視される。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;F1スコア (F1 Score)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;分類モデルの評価指標。&lt;strong&gt;適合率 (Precision)&lt;/strong&gt; と &lt;strong&gt;再現率 (Recall)&lt;/strong&gt; の調和平均。陽性と陰性のデータ数が極端に偏っている「不均衡データ」において、モデルの正確性をバランスよく測るのに最適。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intersection over Union (IoU)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;2つの集合の類似度を評価する指標で、数式は「共通部分の面積 $\div$ 集合全体の面積」。物体検出においては、正解のバウンディングボックスとモデルの予測ボックスがどれくらい正確に重なっているかを評価する（別名：ジャカード係数 / Jaccard Index）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パープレキシティ (Perplexity)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;言語モデルの性能を評価する指標で、直訳すると「当惑度」。モデルが次の単語を予測する際、候補を何単語にまで絞り込めているか（選択肢の数）を表す。値が小さいほど予測の迷いがなく、モデルが優秀であることを意味する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ヒンジ損失 (Hinge Loss)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;主にサポートベクターマシン（SVM）や最大マージン分類器で用いられる損失関数。正解クラスの予測値が、決定境界から一定以上のマージン（安全な余白）を持って正しく分類されているかを評価し、マージンを侵したデータに対してペナルティを課す。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;アダマール積 (Hadamard Product)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;同じサイズ（次元）を持つ2つの行列、またはベクトルにおいて、対応する位置にある要素同士を単純に掛け合わせる演算。記号 $\circ$ や $\odot$ で表現される。行列表現の積（内積など）とは異なる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;凸包 (Convex Hull)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;幾何学の概念。与えられた点集合をすべて内側に包み込むような、最小の凸多角形（あるいは凸多面体）。点の集まりの一番外側を輪ゴムで囲んだときの形に相当する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="分散学習とスケーリング-distributed-learning"&gt;分散学習とスケーリング (Distributed Learning)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;データ並列化 (Data Parallelism)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;非常に大きなデータセットを用いてモデルを訓練する際、データを複数の計算ノード（複数のGPUなど）に分割して割り当てる並列化手法。各ノードは「全く同じモデルのコピー」を保持し、それぞれに割り当てられたデータで勾配を計算後、全員の勾配を集計（同期）して一斉にパラメータを更新する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モデル並列化 (Model Parallelism)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;モデル自体のパラメータ数（サイズ）が巨大すぎて、1つのGPUのメモリに収まりきらない場合に使用される並列化手法。モデルの異なる層や、特定の大きな行列（パラメータ）自体を複数のGPUに分割して配置し、各GPUが協調しながら順伝播・逆伝播をバトンリレーのように計算する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;基礎的な内容なので8割5分ぐらいは知っていたが、全体像としては悪くなかった&lt;/li&gt;
&lt;li&gt;機械学習は広い分野なので、用語の整理は大切&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://machinelearning.wtf/" target="_blank" rel="noopener"
&gt;Machine Learning Glossary - Machine Learning Glossary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://medium.com/enjoy-algorithm/machine-learning-glossary-e2fab1fc1e61" target="_blank" rel="noopener"
&gt;Machine Learning Glossary | Medium | EnjoyAlgorithms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>機械学習のモデル構築の所管</title><link>https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E6%A7%8B%E7%AF%89%E3%81%AE%E6%89%80%E7%AE%A1/</link><pubDate>Thu, 16 Jan 2025 18:49:52 +0900</pubDate><guid>https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E6%A7%8B%E7%AF%89%E3%81%AE%E6%89%80%E7%AE%A1/</guid><description>&lt;img src="https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E6%A7%8B%E7%AF%89%E3%81%AE%E6%89%80%E7%AE%A1/dnn.jpeg" alt="Featured image of post 機械学習のモデル構築の所管" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;いくつかの画像分類の機械学習プロジェクトを経験してきて思ったこと&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="結論"&gt;結論&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;期待値を下げろ
&lt;ul&gt;
&lt;li&gt;DNNのモデルなんて先行研究があってもどうなるかはわからない&lt;/li&gt;
&lt;li&gt;サンドボックスの理想的な環境で結果が出ても、Sim2Realに進んだらうまく行かない事が多い&lt;/li&gt;
&lt;li&gt;人より精度が高かったら導入してもらうように説明するべき&lt;/li&gt;
&lt;li&gt;機械の期待値を下げて、導入してもらうのが大切&lt;/li&gt;
&lt;li&gt;くれぐれもDNNで何でもできると説明するのはよすべき&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学習データは絶対に生成する&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;生成データ（synthetic data）が一番大切&lt;/li&gt;
&lt;li&gt;それを確率的に生成するので、入力画像の分布をコントロールする&lt;/li&gt;
&lt;li&gt;下地を寄せる (例えば、自動生成した画像の背景など)&lt;/li&gt;
&lt;li&gt;ノイズを入れる&lt;/li&gt;
&lt;li&gt;文字のフォントを合わせる&lt;/li&gt;
&lt;li&gt;自動運転だって何だって、うまく行くプロジェクトはそうなる&lt;/li&gt;
&lt;li&gt;これができないと、残念ながらPDCAを高速に回せない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;画像の特徴
&lt;ul&gt;
&lt;li&gt;PNGとJPGでは分布が異なる&lt;/li&gt;
&lt;li&gt;Y軸でLog、X軸は0~255のPixelでヒストグラムを作る&lt;/li&gt;
&lt;li&gt;例えば、文字の中心は黒(0)で輪郭は(1~255)になる&lt;/li&gt;
&lt;li&gt;それがjpgだと0が弱い。他方、pngは非圧縮なので0が強い&lt;/li&gt;
&lt;li&gt;そうすると、二値化したときに変化がでる&lt;/li&gt;
&lt;li&gt;なので、最頻値を二値化するときはthreasholdで見る&lt;/li&gt;
&lt;li&gt;最頻値の理由
&lt;ul&gt;
&lt;li&gt;白と黒の図面の場合は、最も出現するのが白のため&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;経験的に決めていることもある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;指標は一つにフォーカスする
&lt;ul&gt;
&lt;li&gt;例えば、取るのがそもそも難しい課題は、最初はRecallにフォーカスするとか&lt;/li&gt;
&lt;li&gt;Recallで間違ってもいいので欲しい画像を取れたら、あとあといらない物を消す前処理を入れる&lt;/li&gt;
&lt;li&gt;Precisionは低くてもやる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;課題の選択
&lt;ul&gt;
&lt;li&gt;全部の課題に対処することはできない&lt;/li&gt;
&lt;li&gt;エッジケースを除いて、正常系で、さらに簡易的なものを選択する&lt;/li&gt;
&lt;li&gt;別の言い方だと、分母を絞る&lt;/li&gt;
&lt;li&gt;90点と50点だと印象が全然違う&lt;/li&gt;
&lt;li&gt;先にテストの問題を自分で狭めて高いスコアを出せるように調整する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;特徴
&lt;ul&gt;
&lt;li&gt;RGBで特徴量を入れる&lt;/li&gt;
&lt;li&gt;普通の画像で入れるよりも、RGBで解く超量をまとめる前処理をしてモデルに入れる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;精度と速度
&lt;ul&gt;
&lt;li&gt;精度を優先したあとに、処理速度を最適化する&lt;/li&gt;
&lt;li&gt;ONNX Runtimeで最適化する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;失敗時
&lt;ul&gt;
&lt;li&gt;エラーについて考察をする（エラーアナリシス）&lt;/li&gt;
&lt;li&gt;失敗を集めて、hard negative miningする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$時間軸 \times 課題軸$でReportをまとめる
&lt;ul&gt;
&lt;li&gt;例
&lt;ul&gt;
&lt;li&gt;過去の課題 (past tasks)&lt;/li&gt;
&lt;li&gt;今週の課題 (present tasks)&lt;/li&gt;
&lt;li&gt;今週の進捗 (present progress)&lt;/li&gt;
&lt;li&gt;今週の改善点 (present conclusion)&lt;/li&gt;
&lt;li&gt;今後のスケジュール (future tasks)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;課題ベースで話す&lt;/li&gt;
&lt;li&gt;スケジュールベースで話す&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;定量的と定性的に
&lt;ul&gt;
&lt;li&gt;数量的に判断する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;データが中心&lt;/li&gt;
&lt;li&gt;パターンの整理 (ルールベースの場合は)
&lt;ul&gt;
&lt;li&gt;特に、お客さん自体もルールを完全に把握していない時がある&lt;/li&gt;
&lt;li&gt;情報を整理して交通整理することは大切&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;データの選別の基準
&lt;ul&gt;
&lt;li&gt;事業ドメインやスコープの内・外&lt;/li&gt;
&lt;li&gt;コアユーザー vs. ライトユーザーのデータ&lt;/li&gt;
&lt;li&gt;標準データ（ISO標準） vs. 非標準データ&lt;/li&gt;
&lt;li&gt;フィージビリティ
&lt;ul&gt;
&lt;li&gt;できる所をやる =&amp;gt; 費用対効果high&lt;/li&gt;
&lt;li&gt;できない所をやらない =&amp;gt; 費用対効果low&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ベースラインを作る
&lt;ul&gt;
&lt;li&gt;まずは簡単なやり方でベースラインを作る&lt;/li&gt;
&lt;li&gt;ムーンショットを狙うと、うまく行かなかった時にソフトランディングできない&lt;/li&gt;
&lt;li&gt;そのため、予め安全地帯を確保するのが大切&lt;/li&gt;
&lt;li&gt;複数の手段を用意して、予め失敗に備える&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;アルゴが優先
&lt;ul&gt;
&lt;li&gt;機械学習のDNNよりアルゴを優先するべき&lt;/li&gt;
&lt;li&gt;もしくは、DNNよりLLMを優先&lt;/li&gt;
&lt;li&gt;なぜなら、DNNは未知の変数が多く汎化性能も不明な事が往々にして発生する&lt;/li&gt;
&lt;li&gt;結果をCherry-pickしたり、一面的に見て精度を判断してしまう事が多い&lt;/li&gt;
&lt;li&gt;はじめから堅く古典的アルゴで攻めて、もしくは万能のLLMで攻める&lt;/li&gt;
&lt;li&gt;それでも要件を満たせないなら、DNNに進む&lt;/li&gt;
&lt;li&gt;DNNの場合はデータが命なので、どれだけデータを集められるかの戦いになる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;課題もモデルもless is more
&lt;ul&gt;
&lt;li&gt;例えば、XXXの価格予測の問題&lt;/li&gt;
&lt;li&gt;まず価格を簡単なものと難しいものに分ける&lt;/li&gt;
&lt;li&gt;これは誰でもできる&lt;/li&gt;
&lt;li&gt;しかし本質は、モデルを2つに分けた方がいい&lt;/li&gt;
&lt;li&gt;つまり、そもそも混合モデルであるという前提を持つ&lt;/li&gt;
&lt;li&gt;なぜこうするかというと、１つのモデルだと外した時にエラーアナリシスがやりにくいから&lt;/li&gt;
&lt;li&gt;つまり、めんどくさいかもしれないが、予めモデル自体も分解する&lt;/li&gt;
&lt;li&gt;すれば、重み調整やモデルの調整やデバッグもしやすく、本当の課題が見やすくなる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EdgeではモデルはC++で動かす
&lt;ul&gt;
&lt;li&gt;Edgeで早く動かしたいなら、まずはMobileNetとかの軽いモデルを選ぶ&lt;/li&gt;
&lt;li&gt;その上で、軽いランタイムを使ってC++で高速に動かす&lt;/li&gt;
&lt;li&gt;くれぐれも、Pythonで動かさないように&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Server-sideのLLMの場合は
&lt;ul&gt;
&lt;li&gt;Prompt Engineeringをする
&lt;ul&gt;
&lt;li&gt;特にFew-shotが絶大&lt;/li&gt;
&lt;li&gt;さらに、CoTで分割統治法的に課題をStepByStepで解くのも大切&lt;/li&gt;
&lt;li&gt;本質的にはその2つが一番効く&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Context engineeringも大事
&lt;ul&gt;
&lt;li&gt;Messageは圧縮するべき&lt;/li&gt;
&lt;li&gt;これをしないと、メッセージが長くなると確実にやり取りがバグる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cacheを使う
&lt;ul&gt;
&lt;li&gt;特にAWS BedrockのClaude系のモデルはCacheが強い&lt;/li&gt;
&lt;li&gt;System Promptとかは、経験上9割引になるので有効活用する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Routerパターンと特化Agentを使う
&lt;ul&gt;
&lt;li&gt;一つのAgentに全部やらせるのは難しいのでAgentを複数用意し、Router Agentに振り分けさせるのがいい&lt;/li&gt;
&lt;li&gt;Promptも最適化する事もできる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Prompt Engineeringは限界がある
&lt;ul&gt;
&lt;li&gt;たとえRouterパターンやStrands-Agentが持つGraph機能やらで分割しても限界がある&lt;/li&gt;
&lt;li&gt;本質的にはLoRAなどでファインチューニングするべき&lt;/li&gt;
&lt;li&gt;Agentは確率的に間違えるのでPromptのチューニングは限界がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSEやNDJSONでStream処理するのは限界がある
&lt;ul&gt;
&lt;li&gt;structured outputをjson一つに対して行えないので、一度Agentが結果を間違えるとめんどくさくなる&lt;/li&gt;
&lt;li&gt;シナリオテストをたくさん実行するのと、fallback用の処理がないと厳しい&lt;/li&gt;
&lt;li&gt;間違えたらリトライする仕組みを入れる必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;先行研究やOSSを真似る
&lt;ul&gt;
&lt;li&gt;これは機械学習だけではないが、基本真似が一番速い&lt;/li&gt;
&lt;li&gt;人類の進化も真似から始まったし、近代の日本も欧州の真似をしただけ&lt;/li&gt;
&lt;li&gt;真似=学ぶ、学校だって先生を真似るし、武道でも守破離が基本&lt;/li&gt;
&lt;li&gt;最初は先行者を真似るべき&lt;/li&gt;
&lt;li&gt;TPPした後に、進化させてTPPSする&lt;/li&gt;
&lt;li&gt;つまりは、最初はベースラインを少し改造しただけでOKという事&lt;/li&gt;
&lt;li&gt;ムーンショットは狙うより、実現可能性の検証のため、既存+ちょっと改造で最初はOK&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;HDDとSSDとRAMを使い分ける
&lt;ul&gt;
&lt;li&gt;データセットは容量の大きいHDDに保存するべき&lt;/li&gt;
&lt;li&gt;しかし、データセットから計算した特徴量は、予め計算してNVMeのSSDに置くべき&lt;/li&gt;
&lt;li&gt;なぜなら、毎回特徴量の計算やEpochごとに大きなIOが発生するため&lt;/li&gt;
&lt;li&gt;例えば、音系のモデルなら音声を圧縮したMelスペクトルとかは学習の前に計算しておく&lt;/li&gt;
&lt;li&gt;また、data mixingを学習時にやってaugumentationしているなら、それはオンメモリにするべき&lt;/li&gt;
&lt;li&gt;SSDはランダムアクセスに弱く、それをやると無駄なIOが発生して待ち時間が長くなるから&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;学習データの品質について
&lt;ul&gt;
&lt;li&gt;データの量は大切だが、なぜ大切かというと多様性のため&lt;/li&gt;
&lt;li&gt;特に、学習時の $データセットの分布=推論時の分布$ が理想&lt;/li&gt;
&lt;li&gt;そして、その分布のズレ（Distribution Shift）がそのままエラーになる&lt;/li&gt;
&lt;li&gt;分布ズレの原因は以下が考えられる:
&lt;ul&gt;
&lt;li&gt;共変量シフト：$P(X)$ が変わる （つまり、予測の割合は変わらないけど、入力の割合が変わる）&lt;/li&gt;
&lt;li&gt;ターゲットシフト / ラベルシフト：$P(Y)$ が変わる（入力の割合は変わらないけど、予測の割合が変わる）&lt;/li&gt;
&lt;li&gt;コンセプトシフト：$P(Y｜X)$ が変わる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;だからクラスの分布も大事&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;データの量と質
&lt;ul&gt;
&lt;li&gt;例えば、音からsilence/speakingの分類をするとする&lt;/li&gt;
&lt;li&gt;学習後、推論すると環境音でsigmoidの結果が0.5になった&lt;/li&gt;
&lt;li&gt;この理由は、DNNから出力されたlogitが0を出したから&lt;/li&gt;
&lt;li&gt;つまり、どっちか分からないから0.5になった&lt;/li&gt;
&lt;li&gt;本来はsigmoidの結果は0にならないといけないが、データセットに同じ環境音がないからそうなったということ&lt;/li&gt;
&lt;li&gt;結局はDNNは巨大な場合分けをする機械なので、その機械にケースにあったデータを渡す必要があるということ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;学習がうまくいかない時のシンプルなエラーアナリシス
&lt;ul&gt;
&lt;li&gt;学習後にテストデータでうまくいかない =&amp;gt; 学習データが間違っている、学習方法の間違い、学習不足やShift、DNNのパラーメター不足など&lt;/li&gt;
&lt;li&gt;学習後にテストデータでうまくいっている =&amp;gt; 学習とデモの分布のズレが原因なので、学習データセットの不足&lt;/li&gt;
&lt;li&gt;Evalが頭打ち =&amp;gt; モデルの未学習が多い（つまり、データをしっかり学習して汎化・一般化していない）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;学習データの蒸留
&lt;ul&gt;
&lt;li&gt;基本的に蒸留してTPPするのが一番てっとり速い&lt;/li&gt;
&lt;li&gt;特にデータセットが悪いと、いくら量や多様性を増やしてもgarbage in, garbage outになるから&lt;/li&gt;
&lt;li&gt;質の高いデータセットを作る意味でも、予めteacher-studentモデルでやったほうがいい&lt;/li&gt;
&lt;li&gt;特に、データセットは用意したのに、意図しない挙動をする時はデータセットの質が低い場合が多い&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dataのかさ増し
&lt;ul&gt;
&lt;li&gt;画像系では、マージンをいれるなどして汎化性能を高める為data augmentationを行う&lt;/li&gt;
&lt;li&gt;音声系だと、noise mixing augumentationや、データの前後に無音margenを入れるなどのmixingが過学習を抑えられる&lt;/li&gt;
&lt;li&gt;Data Mixingは既存2つのデータの合成で、Data Aumentationは1つのデータを加工する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;色々なパターンがあるが、失敗しないと学ばなないことが多い&lt;/li&gt;
&lt;li&gt;セルフニューラルネットワークの学習は続くだろう&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>決定木のアルゴの基本</title><link>https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/</link><pubDate>Fri, 18 Oct 2024 22:41:54 +0900</pubDate><guid>https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/</guid><description>&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/feature.jpg" alt="Featured image of post 決定木のアルゴの基本" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;久々にXGBoostを仕事で使ったので、昔に残していた決定木のメモを移す&lt;/li&gt;
&lt;li&gt;そのころは、RのC5.0アルゴを分類問題に使っていた&lt;/li&gt;
&lt;li&gt;よく使われるXGBoostも中味は決定木が本質&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="概要"&gt;概要&lt;/h2&gt;
&lt;h3 id="決定木"&gt;決定木&lt;/h3&gt;
&lt;h4 id="決定木とは"&gt;決定木とは&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;決定木の目的は目的は条件によって、エントロピーを下げること&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;決定疑は次の2つがある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分類木（Classification Tree）&lt;/li&gt;
&lt;li&gt;回帰木（Regression Tree）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="イメージ"&gt;イメージ&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_0.png"
width="829"
height="510"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_0_hu_34e273d3564cb663.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_0_hu_8f40bc7ac889a9e3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="162"
data-flex-basis="390px"
&gt;&lt;/p&gt;
&lt;h4 id="決定木の特徴"&gt;決定木の特徴&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ノンパラメトリックな教師あり学習の手法&lt;/li&gt;
&lt;li&gt;決定木はアルゴリズムの名前ではない
&lt;ul&gt;
&lt;li&gt;アルゴリズム名はID3やC4.5，CART&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="決定木のproscons"&gt;決定木のPros&amp;amp;Cons&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Pros
&lt;ul&gt;
&lt;li&gt;可読性が高い
&lt;ul&gt;
&lt;li&gt;NOTE: Random ForestやXGBoostは高くない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;説明変数・目的変数共に名義尺度から間隔尺度まで様々扱える
&lt;ul&gt;
&lt;li&gt;同一カラムの単純な比較であり、正規化も必要ない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;外れ値に対して頑健&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cons
&lt;ul&gt;
&lt;li&gt;過学習を起こしやすい
&lt;ul&gt;
&lt;li&gt;max_depthを設定する必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;線形性のあるデータには適していない
&lt;ul&gt;
&lt;li&gt;損失関数を使う回帰の方がいい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="アルゴリズムの比較"&gt;アルゴリズムの比較&lt;/h3&gt;
&lt;h4 id="決定木のアルゴリズム比較"&gt;決定木のアルゴリズム比較&lt;/h4&gt;
&lt;p&gt;よく使われる決定疑のアルゴ。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/algorithms_0.png"
width="807"
height="949"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/algorithms_0_hu_7f688255fff5e5ce.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/algorithms_0_hu_4436d03901e820b2.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="85"
data-flex-basis="204px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scikit-learn は最適化したバージョンの CARTのみを実装している
&lt;ul&gt;
&lt;li&gt;CARTはC4.5 によく類似した手法&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;数値データで表現される目的変数（=回帰） にも対応している特徴がある&lt;/li&gt;
&lt;li&gt;C5.0はC4.5 の改善版で、より少ないメモリ消費で動作するよう、パフォーマンスの改善が行われている&lt;/li&gt;
&lt;li&gt;RではC5.0のパッケージを利用可能&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&lt;/th&gt;
&lt;th&gt;分岐に利用する情報&lt;/th&gt;
&lt;th&gt;分岐数&lt;/th&gt;
&lt;th&gt;目的変数の型&lt;/th&gt;
&lt;th&gt;説明変数の型&lt;/th&gt;
&lt;th&gt;特徴&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AID&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;２分岐まで&lt;/td&gt;
&lt;td&gt;数値変数&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;1971年に、Morganらにより考案された「自動交互作用検知」と呼ばれるアルゴリズム。変数間の関連を統計的に検出することが目的でしたが、AIDからCHAIDへ発展し、それが決定木を構築するツールとして一般的に使われた&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CHAID&lt;/td&gt;
&lt;td&gt;カイ2乗値&lt;/td&gt;
&lt;td&gt;３分岐以上可能&lt;/td&gt;
&lt;td&gt;カテゴリカル変数&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;1980年に、Perreaultらにより考案された「カイ2乗AID」と呼ばれる学習アルゴリズム。学習アルゴリズムの中で、最も古いものとして知られている。CARTやC5.0では過学習させてから枝刈りを行いうが、CHAIDでは過学習が起こるまえに木構造の生長を止める。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CART&lt;/td&gt;
&lt;td&gt;ジニ係数&lt;/td&gt;
&lt;td&gt;２分岐まで&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;1984年にBreimanらによって考案された「分類木と回帰木生成器」と呼ばれる学習アルゴリズム。CARTは、C5.0と並び、決定木を構築する代表的なアルゴリズムとして用いられている。CARTでは、過学習を避け、正確な予測モデルを構築するために、いったん木を生長させた後に枝刈りを行う。なお、scikit-learnでは、最適化したバージョンのCARTを実装しているため、Pythonによる実装が容易。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID3&lt;/td&gt;
&lt;td&gt;エントロピー&lt;/td&gt;
&lt;td&gt;２分岐まで&lt;/td&gt;
&lt;td&gt;カテゴリカル変数&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;1986年に、Quinlanにより考案された「繰り返し2分木生成器」と呼ばれる学習アルゴリズム。最も単純な機械学習アルゴリズムとしても知られているいる。ヒストリカル変数に対して情報量を用いて、木を構築する。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C4.5&lt;/td&gt;
&lt;td&gt;エントロピー&lt;/td&gt;
&lt;td&gt;３分岐以上可能&lt;/td&gt;
&lt;td&gt;カテゴリカル変数&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;1993年に、Quinlanにより考案されたID3の改善版となる学習アルゴリズム。メモリ効率が良く、意思決定ツリーが小さく、またboostingと呼ばれる技術により高精度であることが利点。また、欠測のあるデータをそのまま利用することができるのも利点の一つとしてあげられる。C4.5 は学習済みの木を if-then で表されるセットに変換し、評価や枝刈り (決定木の不要な枝を取り除く技術) に用いられる。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C5.0&lt;/td&gt;
&lt;td&gt;エントロピー&lt;/td&gt;
&lt;td&gt;３分岐以上可能&lt;/td&gt;
&lt;td&gt;カテゴリカル変数&lt;/td&gt;
&lt;td&gt;数値変数・カテゴリカル変数&lt;/td&gt;
&lt;td&gt;C4.5の改善版で、決定木を構築する代表的なアルゴリズムのひとつ。C4.5に比べ、より効率的にメモリを使用することでパフォーマンスの改善が行われている。CARTとよく似ているが、CARTでは常に２分木構造の決定木を生成するが、C5.0では３分岐以上の木を生成することができる。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="決定木とベイジアンネットワーク"&gt;決定木とベイジアンネットワーク&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;決定木では、説明変数の分岐条件の下において目的変数の分布を計算するが、実は左右対称のツリー構造を持つ決定木と子ノードが一つのベイジアンネットワークは等価となる&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/dt_vs_baysian_1.png"
width="807"
height="447"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/dt_vs_baysian_1_hu_39d776fcc9b81733.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/dt_vs_baysian_1_hu_fe3aeb29dd4ae857.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="180"
data-flex-basis="433px"
&gt;&lt;/p&gt;
&lt;h3 id="決定木の例"&gt;決定木の例&lt;/h3&gt;
&lt;h4 id="決定木の例cart"&gt;決定木の例（CART）&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/example_1.png"
width="1049"
height="411"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/example_1_hu_2f1efaf1cd27230b.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/example_1_hu_d03ef70b2a4e3059.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="255"
data-flex-basis="612px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラスは2つで分類木を行った&lt;/li&gt;
&lt;li&gt;サンプルは4647個&lt;/li&gt;
&lt;li&gt;無論、ルートノードで4647個のサンプルデータがある&lt;/li&gt;
&lt;li&gt;ルートノード
&lt;ul&gt;
&lt;li&gt;ある説明変数の0番目の値が
&lt;ul&gt;
&lt;li&gt;-0.074以下だった場合は、左のノードに移動し、63個サンプルがある
&lt;ul&gt;
&lt;li&gt;その移動先のノードでは、1番目のクラスは27個、2番目のクラスは36個だった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;-0.074より大きかった場合は、右のノードに移動し、4584個サンプルがある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リーフノードでは基本的に多数決で決まる
&lt;ul&gt;
&lt;li&gt;value = [14, 13] ⇒ 予測の時は全て1番目のクラスになる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ノードでgini不純度= 0 ⇒ そのノードは一つのクラスのみ&lt;/li&gt;
&lt;li&gt;ノードでgini不純度= 0.5 ⇒ そのノードのクラスは半々&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="不純度"&gt;不純度&lt;/h2&gt;
&lt;h3 id="不純度と情報利得"&gt;不純度と情報利得&lt;/h3&gt;
&lt;h4 id="不純度-1"&gt;不純度&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;1 つのノードに異なるクラスのサンプルが含まれる割合を数値化した値。&lt;br&gt;
1 つのノードに含まれるサンプルが複数のクラスに由来しているものであれば、そのノードの不純度は大きい&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/impurity_gain_0.png"
width="1093"
height="493"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/impurity_gain_0_hu_382f3b097e2ce985.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/impurity_gain_0_hu_9402258807c1434d.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="221"
data-flex-basis="532px"
&gt;&lt;/p&gt;
&lt;h4 id="情報利得"&gt;情報利得&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;親ノードの不純度とその子ノードの不純度の差を表す。&lt;br&gt;
親ノードの不純度が大きく、子ノードの不純度が小さいとき、情報利得が最も大きくなる&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/impurity_gain_1.png"
width="1093"
height="879"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/impurity_gain_1_hu_11dc3a66e82bcf63.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/impurity_gain_1_hu_9ea375da09ceafdb.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="124"
data-flex-basis="298px"
&gt;&lt;/p&gt;
&lt;h3 id="不純度の算出"&gt;不純度の算出&lt;/h3&gt;
&lt;h4 id="不純度の算出のポイント"&gt;不純度の算出のポイント&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;ポイントはノードの中のエントロピーを最小にする条件を選ぶこと&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;まず，構築のために学習データが全てルートノードに集め&lt;/li&gt;
&lt;li&gt;そこで，そのデータの持つ特徴の中で集められたデータを一番よく分割する特徴と閾値の組を選ぶ
&lt;ul&gt;
&lt;li&gt;例: age &amp;gt; 12などの条件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;その特徴と閾値で分割後，またそれぞれのノードで分割を繰り返し行っていいく&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="不純度の算出式"&gt;不純度の算出式&lt;/h4&gt;
$$
I_H(t) = - \sum_{i = 1}^{c} p(i|t) \ log_2 p(i|t)
$$&lt;p&gt;ただし、&lt;/p&gt;
$$
p(i|t) = \frac{n_i}{N}
$$&lt;p&gt;
変数はそれぞれ次を示している:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cはノード内のクラス数&lt;/li&gt;
&lt;li&gt;tは現在のノード&lt;/li&gt;
&lt;li&gt;$n_i$はノード内のクラス$i$に属するデータ数&lt;/li&gt;
&lt;li&gt;Nはノード内データのデータ数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;つまり、あるノード$t$において、そのノードに属しているデータを持つクラスに対して、データ全体を使って、クラス別エントロピーの総和を取っている。&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="不純度計算の例"&gt;不純度計算の例&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_flow_1.png"
width="378"
height="204"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_flow_1_hu_ff101bad269d3646.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_flow_1_hu_1090978e03011aee.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="185"
data-flex-basis="444px"
&gt;&lt;/p&gt;
&lt;p&gt;上のノードtについて考えると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラス数: 3&lt;/li&gt;
&lt;li&gt;サンプル数: 9&lt;/li&gt;
&lt;li&gt;赤のサンプル数: 3&lt;/li&gt;
&lt;li&gt;青のサンプル数: 2&lt;/li&gt;
&lt;li&gt;緑のサンプル数: 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例) 上の例は3クラスなので、不純度は次となる&lt;/p&gt;
$$
I_H(t) = - ( \frac{3}{9} log_2 \frac{3}{9} + \frac{2}{9} log_2 \frac{2}{9} + \frac{4}{9} log_2 \frac{4}{9} ) \simeq 1.5294
$$&lt;p&gt;例) もっともエントロピーが低い状態(あるノードに1つのクラスのみで、全部サンプル同じところに属している)は:&lt;/p&gt;
$$
I_H(t) = - \sum_{i = 1}^{1} \frac{n_i}{N} log_2 \frac{n_i}{N} = \frac{N}{N} log_2 \frac{N}{N} = 0
$$&lt;p&gt;例) もっともエントロピーが高い状態(あるノードに全クラス別々に一つづつのサンプルが属している)は:&lt;/p&gt;
$$
{I_H(t) = - \sum_{i = 1}^{N} \frac{1}{N} log_2 \frac{1}{N} = log_2 N
}
$$&lt;p&gt;なお、$1/N$になっている理由は、N個あるが、N個が全部バラバラを想定しているから&lt;/p&gt;
&lt;p&gt;つまり、不純度が最も低ければエントロピーの値は0，不純度が高くなればなるほどエントロピーの値が大きくなる&lt;/p&gt;
&lt;h4 id="情報利得の算出"&gt;情報利得の算出&lt;/h4&gt;
$$
{\Delta I_H(t) = I_H(t_B) - \sum_{i=1}^{b} w_i I_{Hi} (t_{Ai})
}
$$&lt;p&gt;変数はそれぞれ下を示す&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$b$は分岐（ブランチ）の数&lt;/li&gt;
&lt;li&gt;$tB$は分岐前のノード&lt;/li&gt;
&lt;li&gt;$tA$は分岐後のノード&lt;/li&gt;
&lt;li&gt;$w_i$は重み（分岐前に対するデータの量の割合）
&lt;ul&gt;
&lt;li&gt;要はあるブランチでたくさんのデータが対称の場合はそれだけ不純度を重要視するということ&lt;/li&gt;
&lt;li&gt;あくまで不純度は全体に対するクラスの比の情報量なので、それに量を追加した感じ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分岐前のエントロピーと分岐後のエントロピーの合計との差を計算している&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;つまり、分岐前より分岐後の方がエントロピーが下がったかどうかを見ている&lt;/li&gt;
&lt;li&gt;エントロピーには加法性があるので、元のエントロピー - ブランチ先でのエントロピーの合計で計算することによって、どれだけエントロピーを削減したかがわかる&lt;/li&gt;
&lt;li&gt;また、決定木の役割はエントロピーを下げることであり、エントロピーが下がっていなかったら分岐の意味がないから&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="例"&gt;例&lt;/h4&gt;
&lt;p&gt;紅葉狩りに行くか否かを天気・気温・風速という素性から決定するモデルの構築の例&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_flow_2.png"
width="1002"
height="565"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_flow_2_hu_7028da8fd5e29579.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/tree_flow_2_hu_ef7e99dc0aefc0bd.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="425px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラスは2つ。行くか行かないか。&lt;/li&gt;
&lt;li&gt;初期状態では、行く&lt;/li&gt;
&lt;li&gt;$ΔI_A$は「天気が晴・曇・雨」
&lt;ul&gt;
&lt;li&gt;w: は晴れが2/5、曇りが2/5、雨が1/5&lt;/li&gt;
&lt;li&gt;ブランチは3つ&lt;/li&gt;
&lt;li&gt;最初の重みは晴れで晴れは2つなので、晴れのノードではYes/Noが一つづつ&lt;/li&gt;
&lt;li&gt;$-2(\frac{1}{2} log_2 \frac{1}{2} )$なので1となる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$ΔI_S$は「天気が晴か否か」&lt;/li&gt;
&lt;li&gt;$ΔI_C$は「天気が曇か否か」&lt;/li&gt;
&lt;li&gt;$ΔI_R$は「天気が雨か否か」&lt;/li&gt;
&lt;li&gt;$ΔI_T$は「気温が高いか低いか」&lt;/li&gt;
&lt;li&gt;$ΔI_W$は「風速が強いか弱いか」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;風速で分類が一番情報利得が高いので、それが選択される。&lt;/p&gt;
&lt;h3 id="ジニ不純度"&gt;ジニ不純度&lt;/h3&gt;
&lt;h4 id="ジニ不純度-1"&gt;ジニ不純度&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;不純度が最も低ければ0，不純度が高くなればなるほどジニ不純度の値が1に漸近する不純度の指標&lt;/p&gt;
&lt;/blockquote&gt;
$$
I_G(t) = 1- \sum_{i = 1}^{c} p(i|t)^2
$$&lt;p&gt;ただし、&lt;/p&gt;
$$
p(i|t) = \frac{n_i}{N}
$$&lt;p&gt;ノードの不純度が最も低いときのジニ不純度は、&lt;/p&gt;
$$
{I_G(t) = 1- \sum_{i = 1}^{1} (\frac{N}{N})^2 = 0
}
$$&lt;p&gt;ノードの不純度が最も高いときのジニ不純度は、&lt;/p&gt;
$$
{I_G(t) = 1- \sum_{i = 1}^{N} (\frac{1}{N})^2 = 1 - \frac{1}{N}
}
$$&lt;h4 id="情報利得-1"&gt;情報利得&lt;/h4&gt;
&lt;p&gt;エントロピーと同様に情報利得は次になる。&lt;/p&gt;
$$
{\Delta I_G(t) = I_G(t_B) - w_L I_G(t_L) - w_R I_G(t_R)}
$$&lt;ul&gt;
&lt;li&gt;$tB$は分岐前のノード&lt;/li&gt;
&lt;li&gt;$tL$およびtRはそれぞれ分岐後の左ノード右ノード&lt;/li&gt;
&lt;li&gt;$wL$およびwRはそれぞれ分岐後のノードの重み（分岐前に対するデータの量の割合）を示している&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="決定木の種類"&gt;決定木の種類&lt;/h2&gt;
&lt;h3 id="分類木"&gt;分類木&lt;/h3&gt;
&lt;p&gt;例)&lt;/p&gt;
&lt;p&gt;日々の温度と湿度のデータ、その日Aさんが暑いと感じたか暑くないと感じたかかのデータが与えられた状況で（赤=暑い、青=熱くない）&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_1.png"
width="300"
height="221"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_1_hu_8d4efa8ad448389b.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_1_hu_1ec12ad84fe551a8.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="135"
data-flex-basis="325px"
&gt;&lt;/p&gt;
&lt;p&gt;例えば、温度が27度で湿度が40%の日は暑くないと感じた&lt;br&gt;
このデータから「温度と湿度がどのようなときにどう感じるのか？」といったことを木で表現すると、&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_2.png"
width="394"
height="382"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_2_hu_fa2176c7cadbf3bb.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_2_hu_5a7662ac77bea165.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="103"
data-flex-basis="247px"
&gt;&lt;/p&gt;
&lt;p&gt;この木をさっきのグラフに描画すると、下のようになる。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_3.png"
width="398"
height="292"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_3_hu_aac557b18a01acdc.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/classification_3_hu_e89cdcb2c5fcba31.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="136"
data-flex-basis="327px"
&gt;&lt;/p&gt;
&lt;h3 id="回帰木"&gt;回帰木&lt;/h3&gt;
&lt;p&gt;日々の温度と湿度のデータ．その日Aさんが飲んだ水の量のデータが与えらえれた状況を例として考える。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_1.png"
width="300"
height="217"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_1_hu_79bb8af0fca05b9a.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_1_hu_9176d05b601bd54b.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
&gt;&lt;/p&gt;
&lt;p&gt;例えば温度が27度で湿度が40%の日は水を1.5L飲んでいる。&lt;br&gt;
分類木のときと同様にこのデータから「温度と湿度がどのようなときに水を何L飲むか？」といったことを木で表現できる&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_2.png"
width="398"
height="372"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_2_hu_4f3fe7b219a9acae.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_2_hu_3a9a3758e9f8ad5e.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="106"
data-flex-basis="256px"
&gt;&lt;/p&gt;
&lt;p&gt;この図をグラフに描画するとこのようになる。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_3.png"
width="396"
height="293"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_3_hu_d9cdbfa27bd4ab1e.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/regression_3_hu_8cfade5b57b47a16.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="135"
data-flex-basis="324px"
&gt;&lt;/p&gt;
&lt;h3 id="ランダムフォレスト"&gt;ランダムフォレスト&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;アンサンブル学習のバギングをベースに、少しずつ異なる決定木をたくさん集めたもの&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/random_1.png"
width="1193"
height="708"
srcset="https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/random_1_hu_cf4ea38db80aba10.png 480w, https://www.m1ke.org/p/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%81%AE%E5%9F%BA%E6%9C%AC/random_1_hu_589b54750a008871.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="168"
data-flex-basis="404px"
&gt;&lt;/p&gt;
&lt;h3 id="勾配ブースティング木"&gt;勾配ブースティング木&lt;/h3&gt;
&lt;p&gt;有名なのは XGBoostとLightGBM。&lt;/p&gt;
&lt;p&gt;XGBoost:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブースティングベースのアンサンブル学習&lt;/li&gt;
&lt;li&gt;複数の決定木を作成する&lt;/li&gt;
&lt;li&gt;決定木ででのleafの結果とlabelを元に誤差を算出する&lt;/li&gt;
&lt;li&gt;その誤差を更に目的関数にして学習する&lt;/li&gt;
&lt;li&gt;これをK回繰り返す&lt;/li&gt;
&lt;li&gt;ただし、前回の決定木での情報を利用するため決定木の勾配を使う&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;決定木系のアルゴはよく使われかつ良く使えるアルゴ&lt;/li&gt;
&lt;li&gt;派生形もあるが、基本となるアルゴはシンプルかつエレガントにできている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ref"&gt;REF&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://www.analyticsdlab.co.jp/column/decisiontree.html" target="_blank" rel="noopener"
&gt;決定木の解説 - Analytics D-Lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://gist.github.com/mgoldchild/9070a1f101bf98288d21faeee42eaac8" target="_blank" rel="noopener"
&gt;Decision Tree Example Gist - mgoldchild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pythondatascience.plavox.info/scikit-learn/scikit-learn%E3%81%A7%E6%B1%BA%E5%AE%9A%E6%9C%A8%E5%88%86%E6%9E%90" target="_blank" rel="noopener"
&gt;決定木分析 - Python Data Science&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://axa.biopapyrus.jp/machine-learning/decision-tree/" target="_blank" rel="noopener"
&gt;機械学習の決定木 - Bio Papyrus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/3000manJPY/items/ef7495960f472ec14377#%E5%AE%9F%E8%A3%85python--scikit-learn" target="_blank" rel="noopener"
&gt;Pythonとscikit-learnでの決定木実装 - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://darden.hatenablog.com/entry/2016/12/09/221630" target="_blank" rel="noopener"
&gt;Pythonによる機械学習の決定木実装 - dardenのブログ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/triwave33/items/aad60f25485a4595b5c8" target="_blank" rel="noopener"
&gt;決定木の基礎 - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kefism.hatenablog.com/entry/2017/06/11/182959" target="_blank" rel="noopener"
&gt;決定木の説明 - KEFのブログ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>野球のストライク判定でわかるAccuracy、Precision、Recall、FPR、F1</title><link>https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/</link><pubDate>Wed, 01 May 2024 21:18:33 +0900</pubDate><guid>https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/</guid><description>&lt;img src="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/abs.jpeg" alt="Featured image of post 野球のストライク判定でわかるAccuracy、Precision、Recall、FPR、F1" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;機械学習の分類モデルを評価するとき、次のような指標がよく使われる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracy&lt;/li&gt;
&lt;li&gt;Precision&lt;/li&gt;
&lt;li&gt;Recall&lt;/li&gt;
&lt;li&gt;False Positive Rate&lt;/li&gt;
&lt;li&gt;F1 Score&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;数式だけを見ると、それぞれの違いが分かりにくい。&lt;/p&gt;
&lt;p&gt;そこでこの記事では、投球をストライクかボールに分類する &lt;strong&gt;アンパイア（審判）&lt;/strong&gt; を例に、各指標の意味を整理する。&lt;/p&gt;
&lt;p&gt;ここでは、次のように考える。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;positive: ストライク&lt;/li&gt;
&lt;li&gt;negative: ボール&lt;/li&gt;
&lt;li&gt;モデル: 投球をストライクかボールに判定するアンパイア&lt;/li&gt;
&lt;li&gt;正解ラベル: センサーや人手によって事前に決められた正しい判定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、アンパイアが「ストライク」と判定することをpositive判定として扱う。&lt;/p&gt;
&lt;h3 id="用語positivenegativeacceptreject"&gt;用語（positive/negative、accept/reject）&lt;/h3&gt;
&lt;p&gt;分類の文脈では、次の4つの用語がよく使われる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用語&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;この記事での対応&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Positive&lt;/td&gt;
&lt;td&gt;検出したい方の事象&lt;/td&gt;
&lt;td&gt;ストライク&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Negative&lt;/td&gt;
&lt;td&gt;それ以外の事象&lt;/td&gt;
&lt;td&gt;ボール&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accept&lt;/td&gt;
&lt;td&gt;受理する（通す）&lt;/td&gt;
&lt;td&gt;ストライクと判定する（＝positive判定と同じ意味）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reject&lt;/td&gt;
&lt;td&gt;拒否する（弾く）&lt;/td&gt;
&lt;td&gt;ボールと判定する（＝negative判定と同じ意味）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;positive/negativeは、機械学習・統計の分類問題で最も一般的に使われる用語&lt;/li&gt;
&lt;li&gt;accept/rejectは、検定（帰無仮説をrejectする、等）や、認証・品質検査（合格をaccept、不合格をrejectとする、等）の文脈でよく使われる、positive/negativeとほぼ同じ意味の言い換え&lt;/li&gt;
&lt;li&gt;どちらも「2つのグループのどちらに分類するか」という同じ話をしているだけなので、出てきた分野によって呼び方が違う、程度に捉えておけばよい&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="前提"&gt;前提&lt;/h2&gt;
&lt;h3 id="野球の混同行列"&gt;野球の混同行列&lt;/h3&gt;
&lt;p&gt;野球の判定を二値分類として考える。&lt;/p&gt;
&lt;p&gt;アンパイアの判定結果は、次の4種類に分けられる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th&gt;実際はストライク&lt;/th&gt;
&lt;th&gt;実際はボール&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ストライクと判定&lt;/td&gt;
&lt;td&gt;True Positive（TP）&lt;/td&gt;
&lt;td&gt;False Positive（FP）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボールと判定&lt;/td&gt;
&lt;td&gt;False Negative（FN）&lt;/td&gt;
&lt;td&gt;True Negative（TN）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;それぞれを野球の言葉で表すと、次のようになる。&lt;/p&gt;
&lt;h3 id="4つの結果"&gt;4つの結果&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;TP: True Positive
&lt;ul&gt;
&lt;li&gt;実際にストライクだった投球を、ストライクと正しく判定した&lt;/li&gt;
&lt;li&gt;これは正しい判定&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FP: False Positive
&lt;ul&gt;
&lt;li&gt;実際にはボールだった投球を、ストライクと誤判定した&lt;/li&gt;
&lt;li&gt;打者からすると、ボール球をストライクにされた状態&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FN: False Negative
&lt;ul&gt;
&lt;li&gt;実際にはストライクだった投球を、ボールと誤判定した&lt;/li&gt;
&lt;li&gt;投手からすると、ストライクを見逃された状態&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;TN: True Negative
&lt;ul&gt;
&lt;li&gt;実際にボールだった投球を、ボールと正しく判定した&lt;/li&gt;
&lt;li&gt;これも正しい判定&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ラベルの意味"&gt;ラベルの意味&lt;/h3&gt;
&lt;p&gt;ラベルは以下の組み合わせになっている。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{審判の予測が正解かどうか} {審判の予測結果}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;例えば、False Negative = ボールと誤判定した = 実際はストライクボールだったということ。&lt;/p&gt;
&lt;h2 id="野球の具体例"&gt;野球の具体例&lt;/h2&gt;
&lt;h3 id="100球を判定した例"&gt;100球を判定した例&lt;/h3&gt;
&lt;p&gt;アンパイアが100球を判定したとする。&lt;/p&gt;
&lt;p&gt;実際の投球は、次のように分かれていた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;実際のストライク: 40球&lt;/li&gt;
&lt;li&gt;実際のボール: 60球&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;アンパイアの判定結果は、次のようになった。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th style="text-align: right"&gt;実際にストライク&lt;/th&gt;
&lt;th style="text-align: right"&gt;実際にボール&lt;/th&gt;
&lt;th style="text-align: right"&gt;合計&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ストライクと判定&lt;/td&gt;
&lt;td style="text-align: right"&gt;36&lt;/td&gt;
&lt;td style="text-align: right"&gt;6&lt;/td&gt;
&lt;td style="text-align: right"&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボールと判定&lt;/td&gt;
&lt;td style="text-align: right"&gt;4&lt;/td&gt;
&lt;td style="text-align: right"&gt;54&lt;/td&gt;
&lt;td style="text-align: right"&gt;58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合計&lt;/td&gt;
&lt;td style="text-align: right"&gt;40&lt;/td&gt;
&lt;td style="text-align: right"&gt;60&lt;/td&gt;
&lt;td style="text-align: right"&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;したがって、それぞれの件数は次のようになる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TP: 36&lt;/li&gt;
&lt;li&gt;FP: 6&lt;/li&gt;
&lt;li&gt;FN: 4&lt;/li&gt;
&lt;li&gt;TN: 54&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この例を使って、各評価指標を確認する。&lt;/p&gt;
&lt;h3 id="注意"&gt;注意&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Positiveの意味はタスクによって変わる&lt;/li&gt;
&lt;li&gt;今回ではストライクをpositiveとしている&lt;/li&gt;
&lt;li&gt;ボールをpositiveとして定義すれば、TP、FP、FN、TNの意味も逆になる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="基本的な評価指標"&gt;基本的な評価指標&lt;/h2&gt;
&lt;h3 id="accuracyとerrorrate"&gt;AccuracyとErrorRate&lt;/h3&gt;
&lt;h4 id="accuracy全体として何割正しかったか"&gt;Accuracy：全体として何割正しかったか&lt;/h4&gt;
&lt;p&gt;Accuracyは、すべての判定のうち正しかった割合を表す。&lt;/p&gt;
&lt;p&gt;正しい判定は、TPとTNである。&lt;/p&gt;
$$
\mathrm{Accuracy}=
\frac{TP+TN}
{TP+FP+FN+TN}
$$&lt;p&gt;今回の例では、次のようになる。&lt;/p&gt;
$$
\mathrm{Accuracy}=
\frac{36+54}{100}
= 0.9
$$&lt;p&gt;Accuracyは90%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;アンパイアは、ストライクとボールを合わせた全100球のうち、90球を正しく判定した。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Accuracyは、アンパイアの判定全体がどの程度正しかったかを見る指標である。&lt;/p&gt;
&lt;h4 id="error-rate全体の誤審率"&gt;Error Rate：全体の誤審率&lt;/h4&gt;
&lt;p&gt;Accuracyが全体の正解率なら、その反対であるError Rate（$1 - Accuracy$）は全体の誤り率になる。&lt;/p&gt;
$$
\mathrm{Error\ Rate} = \frac{FP+FN}{TP+FP+FN+TN} = 1-\mathrm{Accuracy}
$$&lt;p&gt;今回の例では、誤判定は次の2種類である。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ボールをストライクとした誤審: 6球&lt;/li&gt;
&lt;li&gt;ストライクをボールとした誤審: 4球&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;したがって、全体の誤審率は次のようになる。&lt;/p&gt;
$$
\mathrm{Error\ Rate} = \frac{6+4}{100}=0.1
$$&lt;p&gt;全体の誤審率は10%である。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;全100球のうち、10球を誤審した。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ただし、この値だけでは、どのような誤審が多かったのかは分からない。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ボールをストライクにしたのか&lt;/li&gt;
&lt;li&gt;ストライクをボールにしたのか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この違いを見るには、Precision、Recall、FPRなどを確認する必要がある。&lt;/p&gt;
&lt;h3 id="precision"&gt;Precision&lt;/h3&gt;
&lt;h4 id="precisionストライク判定をどの程度信用できるか"&gt;Precision：ストライク判定をどの程度信用できるか&lt;/h4&gt;
&lt;p&gt;Precisionは、アンパイアがストライクと判定した投球のうち、実際にストライクだった割合を表す。&lt;/p&gt;
$$
\mathrm{Precision}=\frac{TP}{TP+FP}
$$&lt;p&gt;今回、アンパイアがストライクと判定したのは42球である。&lt;/p&gt;
&lt;p&gt;そのうち、実際にストライクだったのは36球だった。&lt;/p&gt;
$$
\mathrm{Precision}=\frac{36}{36+6}
\approx 0.857
$$&lt;p&gt;Precisionは約85.7%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;アンパイアが「ストライク」と言ったとき、その判定は約85.7%の確率で正しかった。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Precisionは、&lt;strong&gt;ストライクという判定の信頼性&lt;/strong&gt;を見る指標と考えると分かりやすい。&lt;/p&gt;
&lt;p&gt;Precisionが低いアンパイアは、ボール球に対してもストライクと言いやすい。&lt;/p&gt;
&lt;h4 id="precisionで無視されるもの"&gt;Precisionで無視されるもの&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Precisionの計算には、FNとTNは直接含まれない&lt;/li&gt;
&lt;li&gt;つまり、ボールと判定した投球については見ていない&lt;/li&gt;
&lt;li&gt;Precisionが答えるのは、あくまで次の問いである&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;ストライクと判定した投球だけを見たとき、どのくらい正しかったか。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="recall"&gt;Recall&lt;/h3&gt;
&lt;h4 id="recall本当のストライクをどの程度見逃さなかったか"&gt;Recall：本当のストライクをどの程度見逃さなかったか&lt;/h4&gt;
&lt;p&gt;Recallは、実際にストライクだった投球のうち、アンパイアがストライクと判定できた割合を表す。&lt;/p&gt;
$$
\mathrm{Recall}=\frac{TP}{TP+FN}
$$&lt;p&gt;今回、実際のストライクは40球だった。&lt;/p&gt;
&lt;p&gt;そのうち、36球をストライクと判定できた。&lt;/p&gt;
$$
\mathrm{Recall}=\frac{36}{36+4}
=0.9
$$&lt;p&gt;Recallは90%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本当のストライク40球のうち、36球を見逃さずにストライクと判定した。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Recallは、&lt;strong&gt;ストライクをどの程度取りこぼさなかったか&lt;/strong&gt;を見る指標である。&lt;/p&gt;
&lt;p&gt;Recallが低いアンパイアは、本当のストライクをボールと判定しやすい。&lt;/p&gt;
&lt;h4 id="recallで無視されるもの"&gt;Recallで無視されるもの&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Recallの計算には、FPとTNは直接含まれない&lt;/li&gt;
&lt;li&gt;そのため、ボール球をどれだけストライクと誤判定したかは、Recallだけでは分からない&lt;/li&gt;
&lt;li&gt;極端な例として、すべての投球をストライクと判定した場合を考える&lt;/li&gt;
&lt;li&gt;このアンパイアは、本当のストライクを一球も見逃さない&lt;/li&gt;
&lt;li&gt;したがって、Recallは100%になる&lt;/li&gt;
&lt;li&gt;しかし、すべてのボール球もストライクと判定しているため、良いアンパイアとはいえない&lt;/li&gt;
&lt;li&gt;Recallだけでは、ストライク判定を乱発しているかどうかを評価できない&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="recallの別名について"&gt;Recallの別名について&lt;/h4&gt;
&lt;p&gt;いくつかRecallは呼び名があるので注意。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TPR（True Positive Rate）：ROC曲線や統計・検定寄りの文脈でよく使う&lt;/li&gt;
&lt;li&gt;Recall：機械学習、情報検索、Precision/Recallの文脈でよく使う&lt;/li&gt;
&lt;li&gt;Sensitivity（感度）：医療・診断の文脈でよく使う&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fpr"&gt;FPR&lt;/h3&gt;
&lt;h4 id="fprボール球をストライクにした割合"&gt;FPR：ボール球をストライクにした割合&lt;/h4&gt;
&lt;p&gt;False Positive Rateは、実際にはボールだった投球のうち、誤ってストライクと判定した割合を表す。&lt;/p&gt;
$$
\mathrm{FPR}=\frac{FP}{FP+TN}
$$&lt;p&gt;今回、実際のボールは60球だった。&lt;/p&gt;
&lt;p&gt;そのうち、6球をストライクと誤判定した。&lt;/p&gt;
$$
\mathrm{FPR}=\frac{6}{6+54}
=0.1
$$&lt;p&gt;FPRは10%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本当はボールだった60球のうち、10%をストライクと誤審した。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;FPRは誤審率の一種だが、&lt;strong&gt;全体の誤審率ではない&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;分母は全100球ではなく、実際にボールだった60球である。&lt;/p&gt;
&lt;h4 id="fpr全体の誤審率error-rateとfprの違い"&gt;FPR：全体の誤審率（Error Rate）とFPRの違い&lt;/h4&gt;
&lt;p&gt;今回の例では、たまたま次の2つが同じ10%になっている。&lt;/p&gt;
$$
\mathrm{Error\ Rate}=10%
$$$$
\mathrm{FPR}=10%
$$&lt;p&gt;しかし、両者は異なる指標である。&lt;/p&gt;
&lt;p&gt;全体の誤審率は次のように計算する。&lt;/p&gt;
$$
\mathrm{Error\ Rate}=\frac{FP+FN}{全投球}
$$&lt;p&gt;FPRは次のように計算する。&lt;/p&gt;
$$
\mathrm{FPR}=\frac{FP}{実際のボール}
$$&lt;p&gt;全体の誤審率には、次の両方が含まれる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ボールをストライクとした誤審&lt;/li&gt;
&lt;li&gt;ストライクをボールとした誤審&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方、FPRが数えるのは、ボールをストライクにした誤審だけである。&lt;/p&gt;
&lt;h4 id="fprfprの別名について"&gt;FPR：FPRの別名について&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;FARはFalse Accept Rateの意味&lt;/li&gt;
&lt;li&gt;accept＝positive判定という対応の生体認証（顔認証など）や検定の文脈ではこう呼ばれることが多い&lt;/li&gt;
&lt;li&gt;FPRとFARは同じ指標で、呼び名が違うだけ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fnr"&gt;FNR&lt;/h3&gt;
&lt;h4 id="fnrストライクをボールとした割合"&gt;FNR：ストライクをボールとした割合&lt;/h4&gt;
&lt;p&gt;False Negative Rateは、実際のストライクのうち、誤ってボールと判定した割合を表す。&lt;/p&gt;
$$
\mathrm{FNR}=\frac{FN}{TP+FN}
$$&lt;p&gt;今回の例では、次のようになる。&lt;/p&gt;
$$
\mathrm{FNR}=\frac{4}{36+4}=0.1
$$&lt;p&gt;FNRは10%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本当はストライクだった40球のうち、10%をボールと誤審した。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="fnrfnrとrecallの関係"&gt;FNR：FNRとRecallの関係&lt;/h4&gt;
&lt;p&gt;RecallとFNRには、次の関係がある。&lt;/p&gt;
$$
\mathrm{FNR}=1-\mathrm{Recall}
$$&lt;p&gt;Recallが90%なら、見逃した割合であるFNRは10%になる。&lt;/p&gt;
&lt;h4 id="fnrfnrの別名について"&gt;FNR：FNRの別名について&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;FRRは、False Reject Rateの意味&lt;/li&gt;
&lt;li&gt;reject＝negative判定という対応の生体認証（顔認証など）や検定の文脈ではこう呼ばれることが多い&lt;/li&gt;
&lt;li&gt;FNRとFRRは同じ指標で、呼び名が違うだけ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="specificity"&gt;Specificity&lt;/h3&gt;
&lt;h4 id="specificityボールを正しくボールと判定した割合"&gt;Specificity：ボールを正しくボールと判定した割合&lt;/h4&gt;
&lt;p&gt;Specificityは、実際のボールのうち、正しくボールと判定できた割合を表す。&lt;/p&gt;
$$
\mathrm{Specificity}=\frac{TN}{FP+TN}
$$&lt;p&gt;今回の例では、次のようになる。&lt;/p&gt;
$$
\mathrm{Specificity}=\frac{54}{6+54}
=0.9
$$&lt;p&gt;Specificityは90%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本当のボール60球のうち、90%を正しくボールと判定した。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="specificityspecificityとfprの関係"&gt;Specificity：SpecificityとFPRの関係&lt;/h4&gt;
&lt;p&gt;SpecificityとFPRには、次の関係がある。&lt;/p&gt;
$$
\mathrm{FPR}=1-\mathrm{Specificity}
$$&lt;h3 id="f1"&gt;F1&lt;/h3&gt;
&lt;h4 id="f1precisionとrecallのバランス"&gt;F1：PrecisionとRecallのバランス&lt;/h4&gt;
&lt;p&gt;F1 Scoreは、PrecisionとRecallの調和平均である。&lt;/p&gt;
$$
\mathrm{F1} = 2 \frac{
\mathrm{Precision}\cdot\mathrm{Recall}
}{ \mathrm{Precision}+\mathrm{Recall} }
$$&lt;p&gt;TP、FP、FNを使うと、次のようにも表せる。&lt;/p&gt;
$$
\mathrm{F1} = \frac{2TP}{2TP+FP+FN}
$$&lt;p&gt;今回の100球の例では、次の値だった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TP: 36&lt;/li&gt;
&lt;li&gt;FP: 6&lt;/li&gt;
&lt;li&gt;FN: 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;したがって、F1は次のようになる。&lt;/p&gt;
$$
\mathrm{F1} = \frac{2\times36}{2\times36+6+4} = \frac{72}{82}
\approx
0.878
$$&lt;p&gt;F1は約87.8%である。&lt;/p&gt;
&lt;p&gt;野球の言葉で表すと、次の意味になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ストライクと宣告した判定の信頼性と、本当のストライクを見逃さない能力を、一つの値にまとめた。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Precisionだけを高くしようとすると、明らかなストライクだけを宣告し、それ以外をすべてボールにする方法が考えられる&lt;/li&gt;
&lt;li&gt;しかし、その場合は本当のストライクを見逃すため、Recallが低くなる&lt;/li&gt;
&lt;li&gt;反対に、Recallだけを高くしようとすると、ほとんどすべての投球をストライクと宣告する方法が考えられ&lt;/li&gt;
&lt;li&gt;しかし、その場合はボール球もストライクにするため、Precisionが低くなる&lt;/li&gt;
&lt;li&gt;F1は、PrecisionとRecallのどちらか一方だけが高い判定を高く評価しにくい&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="f1precisionとrecallのトレードオフ"&gt;F1：PrecisionとRecallのトレードオフ&lt;/h4&gt;
&lt;p&gt;PrecisionとRecallはトレードオフにある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recallを上げたい
&lt;ul&gt;
&lt;li&gt;なんでもストライクと言えば上がる&lt;/li&gt;
&lt;li&gt;つまり、アンパイアのストライクゾーンを広げる&lt;/li&gt;
&lt;li&gt;しかし、誤審が増えるのでPrecisionが下がる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Precisionを上げたい
&lt;ul&gt;
&lt;li&gt;完全にストライクのものをストライク判定する&lt;/li&gt;
&lt;li&gt;つまり、アンパイアのストライクゾーンを狭める&lt;/li&gt;
&lt;li&gt;しかし、本来ストライクだったものを見逃しRecallが下がる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そして、それらを加味したのがF1スコアになっている。&lt;/p&gt;
&lt;h4 id="f1f1で無視されるもの"&gt;F1：F1で無視されるもの&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;F1の計算にはTNが含まれない&lt;/li&gt;
&lt;li&gt;つまり、本当のボールを正しくボールと判定した件数は、F1へ直接反映されない&lt;/li&gt;
&lt;li&gt;そのためF1は、アンパイアとしての全判定を見るというより、&lt;strong&gt;ストライクを検出する能力に注目した指標&lt;/strong&gt;である&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="f1f1とaccuracyの違い"&gt;F1：F1とAccuracyの違い&lt;/h4&gt;
&lt;p&gt;AccuracyとF1の最も大きな違いは、TNを評価に含めるかどうかである。&lt;/p&gt;
$$
\mathrm{Accuracy} = \frac{TP+TN}{TP+FP+FN+TN}
$$$$
\mathrm{F1} = \frac{2TP}{2TP+FP+FN}
$$&lt;p&gt;AccuracyはTPとTNの両方を正解として数える。&lt;/p&gt;
&lt;p&gt;野球の例では、次の両方を評価する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライクを正しくストライクと判定した&lt;/li&gt;
&lt;li&gt;ボールを正しくボールと判定した&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方、F1はストライクをpositiveとして、次のバランスを見る。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライクと宣告した判定がどの程度正しいか&lt;/li&gt;
&lt;li&gt;本当のストライクをどの程度見逃さなかったか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今回の100球の例では、次のようになる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th style="text-align: right"&gt;値&lt;/th&gt;
&lt;th&gt;見ているもの&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td style="text-align: right"&gt;90.0%&lt;/td&gt;
&lt;td&gt;ストライクとボールを含む全判定の正しさ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F1&lt;/td&gt;
&lt;td style="text-align: right"&gt;約87.8%&lt;/td&gt;
&lt;td&gt;ストライク判定の信頼性と見逃しにくさ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="f1accuracyを使いやすい場合"&gt;F1：Accuracyを使いやすい場合&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ストライクとボールの件数が極端に偏っていない&lt;/li&gt;
&lt;li&gt;ストライクとボールの両方の正解を評価したい&lt;/li&gt;
&lt;li&gt;FPとFNをおおむね同じ重さの誤りとして扱える&lt;/li&gt;
&lt;li&gt;アンパイアの全判定の正しさを知りたい&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="f1f1を使いやすい場合"&gt;F1：F1を使いやすい場合&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ストライクがボールより非常に少ない&lt;/li&gt;
&lt;li&gt;ストライクを検出する能力を重視したい&lt;/li&gt;
&lt;li&gt;PrecisionとRecallの両方を一つの値で比較したい&lt;/li&gt;
&lt;li&gt;大量のTNによって高いAccuracyが出る問題を避けたい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし、F1はFPとFNを実質的に同じ重さで扱う。&lt;/p&gt;
&lt;p&gt;ボールをストライクにする誤審を特に避けたいなら、F1だけでなくPrecisionやFPRを確認する。&lt;/p&gt;
&lt;p&gt;ストライクの見逃しを特に避けたいなら、RecallやFNRを確認する。&lt;/p&gt;
&lt;p&gt;NOTE:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracyは、アンパイアとして全体的に正しいかを見る&lt;/li&gt;
&lt;li&gt;F1は、ストライク検出器としてPrecisionとRecallを両立できているかを見る&lt;/li&gt;
&lt;li&gt;どちらか一方を常に使うのではなく、評価したい失敗の種類に合わせて選ぶ&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="f1accuracyだけでは不十分な場合"&gt;F1：Accuracyだけでは不十分な場合&lt;/h4&gt;
&lt;p&gt;Accuracyは全体の正解率を表すため、直感的に理解しやすい。&lt;/p&gt;
&lt;p&gt;しかし、ストライクとボールの割合が大きく偏っている場合は注意が必要である。&lt;/p&gt;
&lt;p&gt;例えば、100球のうち次の割合だったとする。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライク: 10球&lt;/li&gt;
&lt;li&gt;ボール: 90球&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで、すべての投球をボールと判定するモデルを考える。&lt;/p&gt;
&lt;p&gt;このアンパイアは、90球のボールをすべて正しく判定する。&lt;/p&gt;
&lt;p&gt;そのため、Accuracyは90%になる。&lt;/p&gt;
$$
\mathrm{Accuracy}=\frac{90}{100}=0.9
$$&lt;p&gt;しかし、10球のストライクをすべてボールと判定している。&lt;/p&gt;
&lt;p&gt;Recallは次のようになる。&lt;/p&gt;
$$
\mathrm{Recall}=\frac{0}{0+10}=0
$$&lt;p&gt;Accuracyは90%だが、ストライクを一球も判定できていない。&lt;/p&gt;
&lt;p&gt;この場合、Recallは0であり、一般的な実装上の扱いではF1も0になる。&lt;/p&gt;
&lt;p&gt;つまり、二つの指標は次のように評価する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracy
&lt;ul&gt;
&lt;li&gt;ボール90球を正しく判定したため90%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;F1
&lt;ul&gt;
&lt;li&gt;ストライクを一球も検出できていないため0%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このように、クラスの割合が偏っている場合は、Accuracyだけではモデルの問題を見逃す可能性がある。&lt;/p&gt;
&lt;p&gt;一方で、F1はTNを評価しないため、ボールを正しくボールと判定する能力も含めて評価したい場合には、F1だけでは不十分である。&lt;/p&gt;
&lt;h2 id="指標同士の関係と使い分け"&gt;指標同士の関係と使い分け&lt;/h2&gt;
&lt;h3 id="指標を野球の言葉で整理する"&gt;指標を野球の言葉で整理する&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;野球での意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td&gt;全投球のうち、ストライク・ボールを正しく判定できた割合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Rate （1 - Accuracy）&lt;/td&gt;
&lt;td&gt;全投球のうち、誤審した割合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precision&lt;/td&gt;
&lt;td&gt;ストライクと判定した投球のうち、本当にストライクだった割合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall&lt;/td&gt;
&lt;td&gt;本当のストライクのうち、ストライクと判定できた割合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F1&lt;/td&gt;
&lt;td&gt;ストライク判定の信頼性と、ストライクの見逃しにくさをまとめた値&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FPR&lt;/td&gt;
&lt;td&gt;本当のボールのうち、ストライクと誤審した割合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FNR （1 - Recall）&lt;/td&gt;
&lt;td&gt;本当のストライクのうち、ボールと誤審した割合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specificity&lt;/td&gt;
&lt;td&gt;本当のボールのうち、ボールと正しく判定できた割合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;もう少し短く表すと、次のようになる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracy: アンパイアは全体としてどの程度正しいか&lt;/li&gt;
&lt;li&gt;Precision: アンパイアのストライク判定をどの程度信用できるか&lt;/li&gt;
&lt;li&gt;Recall: アンパイアはストライクをどの程度見逃さないか&lt;/li&gt;
&lt;li&gt;F1: ストライク判定の信頼性と見逃しにくさを両立できているか&lt;/li&gt;
&lt;li&gt;FPR: アンパイアはボール球をどの程度ストライクにするか&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="指標の見方の流れ"&gt;指標の見方の流れ&lt;/h3&gt;
&lt;p&gt;概ね次の順に見ると分かりやすい。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Recall: 本当のストライクをどの程度見逃していないか&lt;/li&gt;
&lt;li&gt;Precision: ストライクと宣告した判定をどの程度信用できるか&lt;/li&gt;
&lt;li&gt;FPR: 本当のボールをどの程度ストライクと誤審するか&lt;/li&gt;
&lt;li&gt;Accuracy: 全判定のうち何割が正しかったか&lt;/li&gt;
&lt;li&gt;Error Rate: 全判定のうち何割を誤審したか&lt;/li&gt;
&lt;li&gt;F1: PrecisionとRecallを一つの値で見たとき、どの程度両立できているか&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="判定しきい値と指標の変化"&gt;判定しきい値と指標の変化&lt;/h2&gt;
&lt;h3 id="アンパイアは確信度を出力する"&gt;アンパイアは確信度を出力する&lt;/h3&gt;
&lt;p&gt;実際の分類モデルは、最初からストライクまたはボールを出力するとは限らない。&lt;/p&gt;
&lt;p&gt;例えば、アンパイアが次のようなストライクらしさのスコアを出力するとする。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;投球&lt;/th&gt;
&lt;th style="text-align: right"&gt;ストライクスコア&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.95&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.72&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.51&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;このスコアに対して、どこからストライクと判定するかを決める必要がある。&lt;/p&gt;
&lt;p&gt;この境界を&lt;strong&gt;判定しきい値&lt;/strong&gt;と呼ぶ。&lt;/p&gt;
&lt;p&gt;しきい値を0.5にした場合は、次のように判定する。&lt;/p&gt;
$$
\hat{y}=\begin{cases}
\mathrm{ストライク} &amp; s(x) \geq 0.5 \\\
\mathrm{ボール} &amp; s(x) &lt; 0.5
\end{cases}
$$&lt;p&gt;この場合、A、B、Cはストライク、D、Eはボールになる。&lt;/p&gt;
&lt;h3 id="しきい値を下げるとどうなるか"&gt;しきい値を下げるとどうなるか&lt;/h3&gt;
&lt;p&gt;しきい値を0.5から0.3へ下げると、アンパイアはストライクと判定しやすくなる。&lt;/p&gt;
&lt;p&gt;野球でいえば、少しでもストライクらしい投球を、積極的にストライクと判定するアンパイアである。&lt;/p&gt;
&lt;p&gt;一般に、次のような変化が起きる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライク判定が増える&lt;/li&gt;
&lt;li&gt;本当のストライクを見逃しにくくなる&lt;/li&gt;
&lt;li&gt;Recallが上がる&lt;/li&gt;
&lt;li&gt;一方で、ボール球までストライクにしやすくなる&lt;/li&gt;
&lt;li&gt;FPが増える&lt;/li&gt;
&lt;li&gt;FPRが上がる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、しきい値を下げると、ストライクの見逃しは減りやすいが、ボール球をストライクにする誤審は増えやすい。&lt;/p&gt;
&lt;h3 id="しきい値を上げるとどうなるか"&gt;しきい値を上げるとどうなるか&lt;/h3&gt;
&lt;p&gt;しきい値を0.5から0.9へ上げると、アンパイアはストライクと判定しにくくなる。&lt;/p&gt;
&lt;p&gt;野球でいえば、明らかにストライクだと確信できる投球だけを、ストライクと判定するアンパイアである。&lt;/p&gt;
&lt;p&gt;一般に、次のような変化が起きる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライク判定が減る&lt;/li&gt;
&lt;li&gt;ボール球をストライクにしにくくなる&lt;/li&gt;
&lt;li&gt;FPが減る&lt;/li&gt;
&lt;li&gt;FPRが下がる&lt;/li&gt;
&lt;li&gt;一方で、本当のストライクもボールと判定しやすくなる&lt;/li&gt;
&lt;li&gt;FNが増える&lt;/li&gt;
&lt;li&gt;Recallが下がる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、しきい値を上げると、ボール球をストライクにする誤審は減りやすいが、本当のストライクを見逃しやすくなる。&lt;/p&gt;
&lt;h3 id="しきい値と指標の関係"&gt;しきい値と指標の関係&lt;/h3&gt;
&lt;p&gt;同じ評価データに対してしきい値だけを動かした場合、基本的には次の関係になる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;しきい値&lt;/th&gt;
&lt;th&gt;ストライク判定&lt;/th&gt;
&lt;th&gt;Recall&lt;/th&gt;
&lt;th&gt;FPR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;下げる&lt;/td&gt;
&lt;td&gt;増える&lt;/td&gt;
&lt;td&gt;上がるか変わらない&lt;/td&gt;
&lt;td&gt;上がるか変わらない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;上げる&lt;/td&gt;
&lt;td&gt;減る&lt;/td&gt;
&lt;td&gt;下がるか変わらない&lt;/td&gt;
&lt;td&gt;下がるか変わらない&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Precisionについては、次のように説明されることが多い。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;しきい値を上げるとPrecisionは上がりやすい&lt;/li&gt;
&lt;li&gt;しきい値を下げるとPrecisionは下がりやすい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは、確信度の高いストライク判定だけを残すと、誤ったストライク判定が減ると期待できるためである。&lt;/p&gt;
&lt;p&gt;ただし、有限の評価データではPrecisionが必ず単調に変化するとは限らない。&lt;/p&gt;
&lt;p&gt;しきい値を上げたとき、正しいストライク判定であるTPが多く除外され、スコアの高いFPが残ることもある。&lt;/p&gt;
&lt;p&gt;Accuracyも、しきい値に対して必ず一方向に変化するとは限らない。&lt;/p&gt;
&lt;h3 id="しきい値の違いを100球で比較する"&gt;しきい値の違いを100球で比較する&lt;/h3&gt;
&lt;p&gt;実際の投球が次のように構成されているとする。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライク: 40球&lt;/li&gt;
&lt;li&gt;ボール: 60球&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ストライクを取りやすいアンパイア"&gt;ストライクを取りやすいアンパイア&lt;/h4&gt;
&lt;p&gt;しきい値を低く設定した結果、次の判定になったとする。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th style="text-align: right"&gt;実際にストライク&lt;/th&gt;
&lt;th style="text-align: right"&gt;実際にボール&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ストライクと判定&lt;/td&gt;
&lt;td style="text-align: right"&gt;39&lt;/td&gt;
&lt;td style="text-align: right"&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボールと判定&lt;/td&gt;
&lt;td style="text-align: right"&gt;1&lt;/td&gt;
&lt;td style="text-align: right"&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;各指標は次のようになる。&lt;/p&gt;
$$
\mathrm{Recall}= \frac{39}{39+1}= 0.975
$$$$
\mathrm{FPR}=\frac{18}{18+42}=0.3
$$$$
\mathrm{Precision}=\frac{39}{39+18}
\approx 0.684
$$&lt;p&gt;ストライクの見逃しは少ないが、ボール球までストライクと判定している。&lt;/p&gt;
&lt;h4 id="ストライクを取りにくいアンパイア"&gt;ストライクを取りにくいアンパイア&lt;/h4&gt;
&lt;p&gt;しきい値を高く設定した結果、次の判定になったとする。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th style="text-align: right"&gt;実際にストライク&lt;/th&gt;
&lt;th style="text-align: right"&gt;実際にボール&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ストライクと判定&lt;/td&gt;
&lt;td style="text-align: right"&gt;24&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボールと判定&lt;/td&gt;
&lt;td style="text-align: right"&gt;16&lt;/td&gt;
&lt;td style="text-align: right"&gt;58&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;各指標は次のようになる。&lt;/p&gt;
$$
\mathrm{Recall}= \frac{24}{24+16}
= 0.6
$$$$
\mathrm{FPR}=\frac{2}{2+58}
\approx
0.033
$$$$
\mathrm{Precision}=\frac{24}{24+2}
\approx
0.923
$$&lt;p&gt;ストライクと判定したときの信頼性は高いが、本当のストライクを多く見逃している。&lt;/p&gt;
&lt;h4 id="比較"&gt;比較&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th style="text-align: right"&gt;ストライクを取りやすい&lt;/th&gt;
&lt;th style="text-align: right"&gt;ストライクを取りにくい&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Precision&lt;/td&gt;
&lt;td style="text-align: right"&gt;約68.4%&lt;/td&gt;
&lt;td style="text-align: right"&gt;約92.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall&lt;/td&gt;
&lt;td style="text-align: right"&gt;97.5%&lt;/td&gt;
&lt;td style="text-align: right"&gt;60.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FPR&lt;/td&gt;
&lt;td style="text-align: right"&gt;30.0%&lt;/td&gt;
&lt;td style="text-align: right"&gt;約3.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ストライクの見逃し&lt;/td&gt;
&lt;td style="text-align: right"&gt;少ない&lt;/td&gt;
&lt;td style="text-align: right"&gt;多い&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボールをストライクにする誤審&lt;/td&gt;
&lt;td style="text-align: right"&gt;多い&lt;/td&gt;
&lt;td style="text-align: right"&gt;少ない&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;どちらのアンパイアが良いかは、何を重視するかによって変わる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストライクの見逃しを減らしたい
&lt;ul&gt;
&lt;li&gt;=&amp;gt; Recallを重視する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ボール球をストライクにしたくない
&lt;ul&gt;
&lt;li&gt;=&amp;gt; PrecisionやFPRを重視する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;全体の正解数を増やしたい
&lt;ul&gt;
&lt;li&gt;=&amp;gt; Accuracyを重視する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="accuracyが最大ならよいのか"&gt;Accuracyが最大ならよいのか&lt;/h3&gt;
&lt;p&gt;しきい値をいくつか試せば、評価データ上でAccuracyが最大になる値を選ぶことができる。&lt;/p&gt;
&lt;p&gt;しかし、Accuracyが最大になるしきい値が、必ずしも最適とは限らない。&lt;/p&gt;
&lt;p&gt;Accuracyでは、次の誤審をどちらも1件の誤りとして扱う。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ボールをストライクにする&lt;/li&gt;
&lt;li&gt;ストライクをボールにする&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;野球では、この2種類を同じ重さの誤審として扱えるかもしれない。&lt;/p&gt;
&lt;p&gt;しかし、実際の機械学習システムでは、FPとFNのコストが大きく異なることがある。&lt;/p&gt;
&lt;p&gt;例えば、不正利用の検知では、次の2種類の誤りが存在する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正常な利用を不正と判定する&lt;/li&gt;
&lt;li&gt;本当の不正利用を正常と判定する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;どちらをより避けるべきかは、システムの目的によって異なる。&lt;/p&gt;
&lt;p&gt;そのため、Accuracyを最大化するだけでなく、許容できるFPやFNを考慮してしきい値を決める必要がある。&lt;/p&gt;
&lt;h3 id="しきい値を横断して評価する方法"&gt;しきい値を横断して評価する方法&lt;/h3&gt;
&lt;h4 id="roc曲線"&gt;ROC曲線&lt;/h4&gt;
&lt;p&gt;しきい値を少しずつ変化させると、RecallとFPRも変化する。&lt;/p&gt;
&lt;p&gt;その関係を表すものがROC曲線である。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/roc.png"
width="640"
height="686"
srcset="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/roc_hu_a4017e4394dd176d.png 480w, https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/roc_hu_9a6722ca738e668f.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="93"
data-flex-basis="223px"
&gt;&lt;/p&gt;
&lt;p&gt;ROC曲線では、次の値を使う。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;横軸
&lt;ul&gt;
&lt;li&gt;FPR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;縦軸
&lt;ul&gt;
&lt;li&gt;Recall&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;野球の例では、次の関係を見ることになる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ボール球をストライクにする割合を増やしたとき、本当のストライクをどの程度多く取れるようになるか。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;しきい値を下げれば、ストライクを多く取るようになる。&lt;/p&gt;
&lt;p&gt;そのため、一般にRecallは上がるが、FPRも上がる。&lt;/p&gt;
&lt;p&gt;ROC曲線は、このトレードオフをしきい値ごとに確認するために使われる。&lt;/p&gt;
&lt;h4 id="pr曲線precision-recall曲線"&gt;PR曲線（Precision-Recall曲線）&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/pr_curve.png"
width="567"
height="432"
srcset="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/pr_curve_hu_fad42c5aac98304f.png 480w, https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/pr_curve_hu_596633e5058282a5.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="131"
data-flex-basis="315px"
&gt;&lt;/p&gt;
&lt;p&gt;Precision-Recall曲線では、しきい値を変化させたときのPrecisionとRecallの関係を見る。&lt;/p&gt;
&lt;p&gt;野球の例では、次の関係になる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ストライクの見逃しを減らしながら、ストライク判定の信頼性をどこまで維持できるか。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ストライク判定を増やせば、Recallは高くなりやすい。&lt;/p&gt;
&lt;p&gt;一方で、ボール球もストライクに含まれるようになるため、Precisionは低下しやすい。&lt;/p&gt;
&lt;p&gt;特にpositiveが少ない分類問題では、ROC曲線だけでなくPrecision-Recall曲線も重要になる。&lt;/p&gt;
&lt;h4 id="roc-aucroc曲線を一つの値にまとめる"&gt;ROC-AUC：ROC曲線を一つの値にまとめる&lt;/h4&gt;
&lt;p&gt;ROC曲線全体の性能を一つの値にまとめたものがROC-AUCである。&lt;/p&gt;
&lt;p&gt;AUCはArea Under the Curveの略で、ROC曲線の下側の面積を表す。&lt;/p&gt;
&lt;p&gt;一般に、ROC-AUCは0から1の範囲を取り、値が大きいほどpositiveとnegativeをうまく順位付けできている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1に近い
&lt;ul&gt;
&lt;li&gt;ストライクとボールをうまく区別できている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;0.5に近い
&lt;ul&gt;
&lt;li&gt;ランダムに判定する場合と同程度&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;0.5より小さい
&lt;ul&gt;
&lt;li&gt;スコアの大小関係が逆になっている可能性がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ROC-AUCは、ランダムに選んだストライク1球とボール1球を比較したとき、ストライクの方に高いストライクスコアを与える確率としても解釈できる。&lt;/p&gt;
&lt;p&gt;ただし、ROC-AUCが高くても、実際に使用する特定のしきい値でPrecisionやRecallが要件を満たすとは限らない。&lt;/p&gt;
&lt;p&gt;そのため、ROC-AUCはモデル全体の順位付け性能を比較するために使い、実際のしきい値はFPRやRecallなどを確認して決める。&lt;/p&gt;
&lt;h4 id="pr-aucとappr曲線を一つの値にまとめる"&gt;PR-AUCとAP：PR曲線を一つの値にまとめる&lt;/h4&gt;
&lt;p&gt;PR曲線全体を一つの値にまとめる指標として、PR-AUCとAP（Average Precision）がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PR-AUC
&lt;ul&gt;
&lt;li&gt;Precision-Recall曲線の下側の面積&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AP
&lt;ul&gt;
&lt;li&gt;Recallが増加した区間ごとにPrecisionを重み付けして平均した値&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;APは、概念的には次のように表せる。&lt;/p&gt;
$$
\mathrm{AP} = \sum_n \left(R_n-R_{n-1}\right)P_n
$$&lt;p&gt;ここで、$P_n$は各点のPrecision、$R_n$はRecallである。&lt;/p&gt;
&lt;p&gt;PR-AUCとAPは、どちらもPrecisionとRecallの関係を一つの値にまとめるが、曲線の補間方法や計算方法が異なるため、同じ値になるとは限らない。&lt;/p&gt;
&lt;p&gt;ライブラリによって定義や実装が異なることがあるため、評価結果を報告するときは、単に「AUC」と書かず、次のように区別する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ROC-AUC&lt;/li&gt;
&lt;li&gt;PR-AUC&lt;/li&gt;
&lt;li&gt;AP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;positiveが少ない不均衡なデータでは、ROC-AUCが高く見える場合がある。そのため、ストライクの検出性能を重視するなら、PR曲線やAPも合わせて確認する。&lt;/p&gt;
&lt;p&gt;なお、PR曲線の基準となるPrecisionはpositiveの出現割合に依存する。&lt;/p&gt;
&lt;p&gt;今回の100球の例では、ストライクは40球なので、positiveの割合は40%である。&lt;/p&gt;
$$
\frac{40}{100}=0.4
$$&lt;p&gt;したがって、ランダムな順位付けにおけるPrecisionの基準は、おおむね0.4となる。&lt;/p&gt;
&lt;h4 id="roc-aucとpauc"&gt;ROC-AUCとpAUC&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Partial AUC（部分ROC曲線下面積：pAUC）とは、特定の部分に行うAUC&lt;/li&gt;
&lt;li&gt;具体的には、ROC曲線の全体ではなく、偽陽性率（FPR）などの特定の関心範囲に限定して計算する評価指標&lt;/li&gt;
&lt;li&gt;一般的に、FPRが低く誤検知を許容できない領域などに適用する&lt;/li&gt;
&lt;li&gt;つまり、ParitalでFPRの低い値のエリア（つまり、誤検知がすくないところ）のTPRを図る目的&lt;/li&gt;
&lt;li&gt;言い換えると、実運用上で使うことを想定した区間の評価&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/pauc.png"
width="303"
height="300"
srcset="https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/pauc_hu_a3bb32a572802afc.png 480w, https://www.m1ke.org/p/%E9%87%8E%E7%90%83%E3%81%AE%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%82%AF%E5%88%A4%E5%AE%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Baccuracyprecisionrecallfprf1/pauc_hu_5491c1b44280ca51.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="101"
data-flex-basis="242px"
&gt;
※ TPR=Recall&lt;/p&gt;
&lt;p&gt;「誤検知率を0〜1%に抑えて運用するとしたとき、その範囲でどれくらい真陽性を拾えるモデル」なのかを見る時に使う。&lt;/p&gt;
&lt;p&gt;理由:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;なぜ普通のAUCだけだとダメなことがあるかというと、次のような例があるから&lt;/li&gt;
&lt;li&gt;たとえばモデルAとBが、以下のような性能だったとする。
&lt;ul&gt;
&lt;li&gt;A：FPR 0〜1%ではかなり強い&lt;/li&gt;
&lt;li&gt;B：FPR 10〜50%ではかなり強い&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ROC-AUC全体ではBの方が高くなる可能性がある&lt;/li&gt;
&lt;li&gt;でも、実運用で「誤検知1%以上なんて絶対許容できない」というシステムなら、FPR 10〜50%で強くても何の意味もない&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="paucとtprfpr"&gt;pAUCとTPR@FPR&lt;/h3&gt;
&lt;p&gt;pAUCだと評価が大きい場合は、TRP@FPRも使ったリする。意味の違いは以下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点推定（TPR at fixed FPR）
&lt;ul&gt;
&lt;li&gt;TPR@FPR=1%&lt;/li&gt;
&lt;li&gt;実際の運用ポイントでの性能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;区間推定
&lt;ul&gt;
&lt;li&gt;pAUC (FPR 0〜1%)&lt;/li&gt;
&lt;li&gt;実運用候補となる低FPR領域全体での総合性能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="eer"&gt;EER&lt;/h3&gt;
&lt;h4 id="eerとcerとは"&gt;EERとCERとは&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;しきい値を動かすと、FPR（＝FAR、ボールをストライクと誤判定する率）とFNR（＝FRR、ストライクをボールと誤判定する率）はトレードオフの関係になる
&lt;ul&gt;
&lt;li&gt;しきい値を下げる（甘くする）と、FPRは上がりFNRは下がる&lt;/li&gt;
&lt;li&gt;しきい値を上げる（厳しくする）と、FPRは下がりFNRは上がる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;この2つの曲線がちょうど交わる点（FPR=FNR）のエラー率を、EER（Equal Error Rate、等誤り率）と呼ぶ&lt;/li&gt;
&lt;li&gt;同じ概念を、CER（Crossover Error Rate、交差誤り率）と呼ぶこともある。呼び名が違うだけで、指しているものは同じ&lt;/li&gt;
&lt;/ul&gt;
$$
EER（\text{Equal Error Rate}） = CER（\text{Crossover Error Rate}）
$$&lt;ul&gt;
&lt;li&gt;生体認証（顔認証など）のモデル比較でよく使われ、EERが低いほど良いモデルとされる&lt;/li&gt;
&lt;li&gt;野球の例で言えば、「ボールをストライクと言ってしまう割合」と「ストライクをボールと言ってしまう割合」がちょうど同じになるしきい値、というイメージ&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="eerの実務上の計算方法"&gt;EERの実務上の計算方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;しきい値は実際には離散的にしか動かせないため、FAR(t)とFRR(t)がぴったり同じ値になる$t$が存在しないことが多い&lt;/li&gt;
&lt;li&gt;そこで実務上は、FARとFRRが入れ替わる境目（FAR&amp;lt;FRRからFAR&amp;gt;FRRに切り替わる付近）の$t^*$を見つけ、その時点でのFARとFRRの平均をEERの近似値とする&lt;/li&gt;
&lt;/ul&gt;
$$
\mathrm{EER} \approx \frac{\mathrm{FAR}(t^*) + \mathrm{FRR}(t^*)}{2}
$$&lt;ul&gt;
&lt;li&gt;この式は、どのしきい値でも使えるわけではなく、あくまでFARとFRRが交差する付近の$t^*$でだけ使う近似計算である点に注意&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="eerを使う際の注意点"&gt;EERを使う際の注意点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;EERはFPRとFNRを均等に重視するしきい値なので、この後の「しきい値は目的に合わせて決める」で述べる考え方とは相性が良くない場合がある&lt;/li&gt;
&lt;li&gt;例えば、際どい判定はできるだけボール（negative）に倒したい、のような非対称な優先度がある場合、EERの交点をそのまま採用するのは適切ではない&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="確信度スコアと確率校正"&gt;確信度スコアと確率校正&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;アンパイアがストライクスコア0.9を出したとしても、それが必ず「90%の確率でストライク」という意味になるとは限らない&lt;/li&gt;
&lt;li&gt;例えば、スコアが0.9前後だった投球を100球集めたとする&lt;/li&gt;
&lt;li&gt;そのうち、実際にストライクだった投球が70球しかなければ、モデルは確信しすぎている&lt;/li&gt;
&lt;li&gt;モデルが出したスコアと、実際の正解率の対応を整えることを確率校正と呼ぶ&lt;/li&gt;
&lt;li&gt;確率が適切に校正されていない場合、しきい値を0.9にしても、期待したPrecisionが得られない可能性がある&lt;/li&gt;
&lt;li&gt;また、評価時と実際の試合で投球の分布が変わると、同じしきい値でも性能が変わる可能性がある&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば、次のような変化が考えられる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;投手が変わる&lt;/li&gt;
&lt;li&gt;球速の分布が変わる&lt;/li&gt;
&lt;li&gt;変化球の種類が変わる&lt;/li&gt;
&lt;li&gt;カメラやセンサーが変わる&lt;/li&gt;
&lt;li&gt;左打者と右打者の割合が変わる&lt;/li&gt;
&lt;li&gt;評価データに少なかった投球が増える&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;したがって、評価指標は、使用したデータと判定しきい値をセットで報告する必要がある。&lt;/p&gt;
&lt;h3 id="しきい値は目的に合わせて決める"&gt;しきい値は目的に合わせて決める&lt;/h3&gt;
&lt;p&gt;しきい値に唯一の正解はない。&lt;/p&gt;
&lt;p&gt;例えば、次のような決め方が考えられる。&lt;/p&gt;
&lt;h4 id="ボール球をストライクにしたくない"&gt;ボール球をストライクにしたくない&lt;/h4&gt;
&lt;p&gt;打者に不利な誤審であるFPを抑えたい場合は、次のような条件でしきい値を選ぶ。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;FPRが1%以下になるしきい値の中から、Recallが最も高い値を選ぶ。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="ストライクを見逃したくない"&gt;ストライクを見逃したくない&lt;/h4&gt;
&lt;p&gt;投手に不利な誤審であるFNを抑えたい場合は、次のような条件でしきい値を選ぶ。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Recallが99%以上になるしきい値の中から、FPRが最も低い値を選ぶ。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="ストライク判定を信用できるようにしたい"&gt;ストライク判定を信用できるようにしたい&lt;/h4&gt;
&lt;p&gt;ストライクと判定したときの正しさを重視する場合は、次のように決める。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Precisionが99%以上になるしきい値の中から、Recallが最も高い値を選ぶ。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;このように、単にAccuracyが最大になる値を選ぶより、システムの要件を条件として定義した方がよい場合がある。&lt;/p&gt;
&lt;h2 id="評価時の注意点"&gt;評価時の注意点&lt;/h2&gt;
&lt;h3 id="しきい値は検証データで決める"&gt;しきい値は検証データで決める&lt;/h3&gt;
&lt;p&gt;しきい値を決めるために使ったデータで、そのまま最終性能を報告すると、性能を過大評価する可能性がある。&lt;/p&gt;
&lt;p&gt;データは次のように分ける。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;学習データ
&lt;ul&gt;
&lt;li&gt;モデルを学習する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;検証データ
&lt;ul&gt;
&lt;li&gt;判定しきい値を決める&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;テストデータ
&lt;ul&gt;
&lt;li&gt;最終的な性能を確認する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;テストデータの結果を見ながら何度もしきい値を変更すると、テストデータが実質的に検証データになる。&lt;/p&gt;
&lt;h3 id="投球の割合を確認する"&gt;投球の割合を確認する&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;評価データに含まれるストライクとボールの割合も重要である&lt;/li&gt;
&lt;li&gt;Precisionは、実際のストライクがどの程度出現するかによって変化する&lt;/li&gt;
&lt;li&gt;評価データではストライクとボールが半分ずつでも、実際の運用環境では割合が異なる可能性がある&lt;/li&gt;
&lt;li&gt;その場合、同じモデルと同じしきい値を使っても、Precisionが変化することがある&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="件数も確認する"&gt;件数も確認する&lt;/h3&gt;
&lt;p&gt;FPRが低くても、ボール球の総数が非常に多ければ、FPの件数は多くなる。&lt;/p&gt;
&lt;p&gt;例えば、ボール球が100万件あり、FPRが0.1%だった場合、FPは1,000件発生する。&lt;/p&gt;
$$
1{,}000{,}000 \times 0.001= 1{,}000
$$&lt;p&gt;割合だけでなく、実際に発生する誤判定の件数も確認する必要がある。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;p&gt;AIによるストライク判定を例にすると、各評価指標は次のように理解できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracy
&lt;ul&gt;
&lt;li&gt;全投球のうち、正しく判定できた割合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Error Rate
&lt;ul&gt;
&lt;li&gt;全投球のうち、誤審した割合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Precision
&lt;ul&gt;
&lt;li&gt;ストライクと判定した投球のうち、本当にストライクだった割合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Recall
&lt;ul&gt;
&lt;li&gt;本当のストライクのうち、ストライクと判定できた割合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;F1
&lt;ul&gt;
&lt;li&gt;ストライク判定のPrecisionとRecallを一つにまとめた値&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FPR
&lt;ul&gt;
&lt;li&gt;本当のボールのうち、ストライクと誤審した割合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FNR
&lt;ul&gt;
&lt;li&gt;本当のストライクのうち、ボールと誤審した割合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特に、次の違いが重要。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Precision
&lt;ul&gt;
&lt;li&gt;ストライクという判定を基準にする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Recall
&lt;ul&gt;
&lt;li&gt;本当のストライクを基準にする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FPR
&lt;ul&gt;
&lt;li&gt;本当のボールを基準にする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Error Rate
&lt;ul&gt;
&lt;li&gt;全投球を基準にする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;F1
&lt;ul&gt;
&lt;li&gt;ストライク判定に関するPrecisionとRecallを基準にし、TNは直接使わない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AccuracyとF1の使い分けは、次のように整理できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracy
&lt;ul&gt;
&lt;li&gt;ストライクとボールを含め、アンパイアの全判定の正しさを見たい場合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;F1
&lt;ul&gt;
&lt;li&gt;ストライクの検出を重視し、PrecisionとRecallを一つの値で比較したい場合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、これらの指標はアンパイアに固有の固定値ではない。&lt;/p&gt;
&lt;p&gt;ストライクと判定する確信度のしきい値を変えると、TP、FP、FN、TNの数が変わり、Accuracy、Precision、Recall、FPR、F1も変化する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;しきい値を下げる
&lt;ul&gt;
&lt;li&gt;ストライクを取りやすくなり、RecallとFPRが上がる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;しきい値を上げる
&lt;ul&gt;
&lt;li&gt;ストライクを取りにくくなり、RecallとFPRが下がる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;どのしきい値が適切かは、どちらの誤審を避けたいかによって異なり、次を参考にする。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ROC-AUC
&lt;ul&gt;
&lt;li&gt;RecallとFPRのトレードオフを、しきい値全体にわたってまとめた値&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PR-AUC
&lt;ul&gt;
&lt;li&gt;PrecisionとRecallの関係を、曲線の面積としてまとめた値&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AP
&lt;ul&gt;
&lt;li&gt;Recallの増加量でPrecisionを重み付けして平均した値&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分類モデルを評価するときに重要なのは、Accuracyが高いかどうかだけではない。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;何をpositiveと定義し、どの誤りを避け、どのしきい値で判定したのか。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ここまで含めて、初めて評価指標の意味を正しく理解できる。&lt;/p&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Precision_and_recall" target="_blank" rel="noopener"
&gt;Precision and recall - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Receiver_operating_characteristic" target="_blank" rel="noopener"
&gt;Receiver operating characteristic - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://dl.acm.org/doi/10.1145/1143844.1143874" target="_blank" rel="noopener"
&gt;The Relationship Between Precision-Recall and ROC Curves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0118432" target="_blank" rel="noopener"
&gt;The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://proceedings.mlr.press/v70/guo17a.html" target="_blank" rel="noopener"
&gt;On Calibration of Modern Neural Networks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2202.13658" target="_blank" rel="noopener"
&gt;A Survey on Selective Classification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>機械学習でよく出るシャノンの情報量</title><link>https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%82%8B%E3%82%B7%E3%83%A3%E3%83%8E%E3%83%B3%E3%81%AE%E6%83%85%E5%A0%B1%E9%87%8F/</link><pubDate>Sun, 19 Nov 2023 13:34:35 +0900</pubDate><guid>https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%82%8B%E3%82%B7%E3%83%A3%E3%83%8E%E3%83%B3%E3%81%AE%E6%83%85%E5%A0%B1%E9%87%8F/</guid><description>&lt;img src="https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%82%8B%E3%82%B7%E3%83%A3%E3%83%8E%E3%83%B3%E3%81%AE%E6%83%85%E5%A0%B1%E9%87%8F/info.jpeg" alt="Featured image of post 機械学習でよく出るシャノンの情報量" /&gt;&lt;h2 id="情報量とエントロピー"&gt;情報量とエントロピー&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;情報理論における「情報」とは何か&lt;/li&gt;
&lt;li&gt;重要なのは、情報の中身ではなく「どれくらい意外か」ということ&lt;/li&gt;
&lt;li&gt;その意外さを数値にしたものが、情報量&lt;/li&gt;
&lt;li&gt;そして、その情報量の平均がエントロピー&lt;/li&gt;
&lt;li&gt;そこらへんは機械学習でよく出るので改めてまとめた&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="情報量"&gt;情報量&lt;/h2&gt;
&lt;h3 id="情報量の基準は珍しさ"&gt;情報量の基準は珍しさ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;たとえばコイン投げ&lt;/li&gt;
&lt;li&gt;表が出る確率50%&lt;/li&gt;
&lt;li&gt;裏が出る確率50%&lt;/li&gt;
&lt;li&gt;この場合、どちらが出てもある程度の情報&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方で、かなり偏ったコイン。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;表が出る確率 99%&lt;/li&gt;
&lt;li&gt;裏が出る確率 1%&lt;/li&gt;
&lt;li&gt;99%で出る表には、ほとんど驚きなし&lt;/li&gt;
&lt;li&gt;1%しか出ない裏には、大きな驚き&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり以下の関係。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;起こりやすい出来事 → 情報量が小さい&lt;/li&gt;
&lt;li&gt;起こりにくい出来事 → 情報量が大きい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これを数式にしたものが、自己情報量。&lt;/p&gt;
$$
I(x)=-\log p(x)
$$&lt;ul&gt;
&lt;li&gt;$p(x)$ は、出来事 $x$ が起こる確率&lt;/li&gt;
&lt;li&gt;確率が小さくなるほど、大きくなる情報量&lt;/li&gt;
&lt;li&gt;「珍しい出来事ほど情報量が大きい」という考え方&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="なぜマイナスがつくのか"&gt;なぜマイナスがつくのか&lt;/h3&gt;
&lt;p&gt;確率の範囲は以下。&lt;/p&gt;
$$
0&lt;p(x)\leq1
$$&lt;ul&gt;
&lt;li&gt;確率は0より大きく、1以下&lt;/li&gt;
&lt;li&gt;この範囲の値に対して対数を取ると、0以下の値&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば底を2にした場合。&lt;/p&gt;
$$
\log_2\frac{1}{2}=-1
$$$$
\log_2\frac{1}{4}=-2
$$$$
\log_2\frac{1}{8}=-3
$$&lt;ul&gt;
&lt;li&gt;確率が小さくなるほど、対数の値はより小さな負の値&lt;/li&gt;
&lt;li&gt;一方で、情報量は珍しい出来事ほど大きくしたいところ&lt;/li&gt;
&lt;li&gt;そこでマイナス符号の登場&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自己情報量を底2で表したもの。&lt;/p&gt;
$$
I(x)=-\log_2p(x)
$$&lt;p&gt;たとえば、確率が半分の出来事。&lt;/p&gt;
$$
p(x)=\frac{1}{2}
$$&lt;p&gt;情報量は以下。&lt;/p&gt;
$$
I(x)=-\log_2\frac{1}{2}=1
$$&lt;ul&gt;
&lt;li&gt;1bitの情報量となる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;確率が8分の1の場合。&lt;/p&gt;
$$
p(x)=\frac{1}{8}
$$&lt;p&gt;情報量は以下。&lt;/p&gt;
$$
I(x)=-\log_2\frac{1}{8}=3
$$&lt;ul&gt;
&lt;li&gt;3bitの情報量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、珍しくなるほど増えることを表現するために、負の対数になった。&lt;/p&gt;
&lt;h3 id="なぜ対数なのか"&gt;なぜ対数なのか&lt;/h3&gt;
&lt;p&gt;情報量を以下とする理由。&lt;/p&gt;
$$
I(x)=-\log p(x)
$$&lt;ul&gt;
&lt;li&gt;単なる数学上の都合ではないもの&lt;/li&gt;
&lt;li&gt;重要なのは、「情報は足し算できてほしい」という要請&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば、独立した2つの出来事$A$ と$B$。&lt;/p&gt;
&lt;p&gt;それぞれの確率。&lt;/p&gt;
$$
p(A)=\frac{1}{2}
$$$$
p(B)=\frac{1}{4}
$$&lt;p&gt;独立なので、両方が起こる確率は掛け算。&lt;/p&gt;
$$
p(A,B)=\frac{1}{2}\times\frac{1}{4}=\frac{1}{8}
$$&lt;p&gt;両方が起きたときの情報量。&lt;/p&gt;
$$
I(A,B)=-\log_2\frac{1}{8}=3
$$&lt;p&gt;一方、それぞれの情報量。&lt;/p&gt;
$$
I(A)=-\log_2\frac{1}{2}=1
$$$$
I(B)=-\log_2\frac{1}{4}=2
$$&lt;p&gt;それぞれを足した結果。&lt;/p&gt;
$$
I(A)+I(B)=3
$$&lt;p&gt;つまり以下の関係。&lt;/p&gt;
$$
I(A,B)=I(A)+I(B)
$$&lt;p&gt;確率については掛け算。&lt;/p&gt;
$$
p(A,B)=p(A)p(B)
$$&lt;p&gt;情報量については足し算。&lt;/p&gt;
$$
I(A,B)=I(A)+I(B)
$$&lt;p&gt;これを可能にしているものが、対数の性質。&lt;/p&gt;
$$
\log(ab)=\log a+\log b
$$&lt;ul&gt;
&lt;li&gt;確率の掛け算を、情報量の足し算に変換する対数&lt;/li&gt;
&lt;li&gt;情報量に対数が登場する大きな理由&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="情報量を二択の回数と考える"&gt;情報量を「二択の回数」と考える&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;底を2にすると、情報量をより直感的に理解可能&lt;/li&gt;
&lt;li&gt;たとえば8個の箱&lt;/li&gt;
&lt;li&gt;そのうち1つだけが当たり&lt;/li&gt;
&lt;li&gt;どの箱も同じ確率&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当たりの確率。&lt;/p&gt;
$$
p=\frac{1}{8}
$$&lt;p&gt;当たりの箱を知ったときの情報量。&lt;/p&gt;
$$
-\log_2\frac{1}{8}=3
$$&lt;ul&gt;
&lt;li&gt;3 bitの情報量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは、二択の質問を3回すれば8個から1個を特定できることに対応。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8個 → 4個&lt;/li&gt;
&lt;li&gt;4個 → 2個&lt;/li&gt;
&lt;li&gt;2個 → 1個&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;候補数との関係。&lt;/p&gt;
$$
2^3=8
$$&lt;ul&gt;
&lt;li&gt;3回のYes / Noで1つに特定&lt;/li&gt;
&lt;li&gt;1bitとは、ざっくり言えば「二択を1回解決するための情報量」&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="エントロピー"&gt;エントロピー&lt;/h2&gt;
&lt;h3 id="エントロピーとは"&gt;エントロピーとは&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ここまでは、実際に起きた1つの出来事についての情報量&lt;/li&gt;
&lt;li&gt;しかし結果を見る前には、どの出来事が起きるか不明&lt;/li&gt;
&lt;li&gt;そこで知りたいのが、「平均するとどれくらいの情報が得られるのか」ということ&lt;/li&gt;
&lt;li&gt;その量がエントロピー&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;確率変数 $X$ が、以下のいずれかの値を取るとする。&lt;/p&gt;
$$
x_1,x_2,\dots,x_n
$$&lt;p&gt;それぞれの確率。&lt;/p&gt;
$$
p_1,p_2,\dots,p_n
$$&lt;p&gt;出来事 &lt;/p&gt;
$$x_i$$&lt;p&gt; が起きたときの情報量。&lt;/p&gt;
$$
-\log p_i
$$&lt;p&gt;これを、それぞれの発生確率で重み付けして平均。&lt;/p&gt;
$$
H(X)=\sum_i p_i(-\log p_i)
$$&lt;p&gt;整理すると以下。&lt;/p&gt;
$$
H(X)=-\sum_i p_i\log p_i
$$&lt;ul&gt;
&lt;li&gt;これがシャノンエントロピー&lt;/li&gt;
&lt;li&gt;自己情報量の期待値&lt;/li&gt;
&lt;li&gt;結果を見る前の不確実性を表す量&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="エントロピーは平均的な驚き"&gt;エントロピーは「平均的な驚き」&lt;/h3&gt;
&lt;p&gt;エントロピーの直感。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自己情報量 → 実際に起きた出来事の驚き&lt;/li&gt;
&lt;li&gt;エントロピー → 起こりうる出来事についての平均的な驚き&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば公平なコイン。&lt;/p&gt;
&lt;p&gt;表と裏の確率。&lt;/p&gt;
$$
p(\text{表})=\frac{1}{2}
$$$$
p(\text{裏})=\frac{1}{2}
$$&lt;p&gt;エントロピー。&lt;/p&gt;
$$
H(X)=-\frac{1}{2}\log_2\frac{1}{2}-\frac{1}{2}\log_2\frac{1}{2}
$$&lt;p&gt;計算結果。&lt;/p&gt;
$$
H(X)=1
$$&lt;ul&gt;
&lt;li&gt;1bit&lt;/li&gt;
&lt;li&gt;結果を見るまで、表か裏か分からない状態&lt;/li&gt;
&lt;li&gt;二択が完全に不確実な状態&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方で、必ず表が出るコイン。&lt;/p&gt;
$$
p(\text{表})=1
$$$$
p(\text{裏})=0
$$&lt;ul&gt;
&lt;li&gt;結果を見る前から答えが分かっている状態&lt;/li&gt;
&lt;li&gt;新しく得られる情報はなし&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この場合のエントロピー。&lt;/p&gt;
$$
H(X)=0
$$&lt;ul&gt;
&lt;li&gt;情報量ゼロ&lt;/li&gt;
&lt;li&gt;完全に予測可能な状態&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="偏るほどエントロピーは小さくなる"&gt;偏るほどエントロピーは小さくなる&lt;/h3&gt;
&lt;p&gt;たとえば、かなり偏ったコイン。&lt;/p&gt;
$$
p(\text{表})=0.99
$$$$
p(\text{裏})=0.01
$$&lt;ul&gt;
&lt;li&gt;ほとんど表&lt;/li&gt;
&lt;li&gt;結果を見る前から、かなり予測可能な状態&lt;/li&gt;
&lt;li&gt;そのためエントロピーも小さめ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;逆に、公平なコイン。&lt;/p&gt;
$$
p(\text{表})=0.5
$$$$
p(\text{裏})=0.5
$$&lt;ul&gt;
&lt;li&gt;どちらが出るか最も分からない状態&lt;/li&gt;
&lt;li&gt;このときエントロピーは最大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり以下の関係。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;結果が予測しやすい → エントロピーが小さい&lt;/li&gt;
&lt;li&gt;結果が予測しにくい → エントロピーが大きい&lt;/li&gt;
&lt;li&gt;確率分布が偏っている → エントロピーが小さい&lt;/li&gt;
&lt;li&gt;確率分布が均等 → エントロピーが大きい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;別の言い方をすると、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;エントロピーを「乱雑さ」と説明することもある&lt;/li&gt;
&lt;li&gt;情報理論では「不確実性」と考える方が直感的&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4つの選択肢"&gt;4つの選択肢&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;たとえば4種類の結果&lt;/li&gt;
&lt;li&gt;すべて同じ確率の場合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれの確率。&lt;/p&gt;
$$
p_1=p_2=p_3=p_4=\frac{1}{4}
$$&lt;p&gt;エントロピーは以下。&lt;/p&gt;
$$
H(X)=-4\times\frac{1}{4}\log_2\frac{1}{4}
$$&lt;p&gt;計算結果。&lt;/p&gt;
$$
H(X)=2
$$&lt;ul&gt;
&lt;li&gt;2bit&lt;/li&gt;
&lt;li&gt;4択から1つを特定するために必要な二択質問が2回&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具体的には以下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4個 → 2個&lt;/li&gt;
&lt;li&gt;2個 → 1個&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方、以下のような偏った確率分布。&lt;/p&gt;
$$
p=(0.97,0.01,0.01,0.01)
$$&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ほぼ最初の結果&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;結果をかなり予測可能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不確実性が小さい状態&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;そのためエントロピーも小さい状態&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;同じ「4つの選択肢」でも、確率分布によって変わるエントロピー&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="エントロピーが最大になるとき"&gt;エントロピーが最大になるとき&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$n$個の結果が存在する場合&lt;/li&gt;
&lt;li&gt;エントロピーが最大になるのは、すべてが等確率のとき&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれの確率。&lt;/p&gt;
$$
p_i=\frac{1}{n}
$$&lt;p&gt;エントロピーの定義に代入。&lt;/p&gt;
$$
H(X)=-\sum_{i=1}^{n}\frac{1}{n}\log_2\frac{1}{n}
$$&lt;p&gt;同じ項が $n$個あるため、以下。&lt;/p&gt;
$$
H(X)=-\log_2\frac{1}{n}
$$&lt;p&gt;したがって以下。&lt;/p&gt;
$$
H(X)=\log_2n
$$&lt;p&gt;具体例。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2通り → 1 bit&lt;/li&gt;
&lt;li&gt;4通り → 2 bit&lt;/li&gt;
&lt;li&gt;8通り → 3 bit&lt;/li&gt;
&lt;li&gt;16通り → 4 bit&lt;/li&gt;
&lt;li&gt;256通り → 8 bit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;候補が倍になるごとに、必要な情報量が1 bit増加&lt;/li&gt;
&lt;li&gt;対数らしい増え方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bitとnat"&gt;BitとNat&lt;/h2&gt;
&lt;h3 id="bitとnatとは"&gt;BitとNatとは&lt;/h3&gt;
&lt;p&gt;情報量の基本形。&lt;/p&gt;
$$
I(x)=-\log p(x)
$$&lt;ul&gt;
&lt;li&gt;ここで重要なのが「対数の底」&lt;/li&gt;
&lt;li&gt;どの底を使うかによって変わる情報量の単位&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="bit"&gt;Bit&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;底を2にした場合&lt;/li&gt;
&lt;li&gt;単位はbit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;定義。&lt;/p&gt;
$$
I(x)=-\log_2p(x)
$$&lt;p&gt;たとえば確率が半分。&lt;/p&gt;
$$
p=\frac{1}{2}
$$&lt;p&gt;情報量は以下。&lt;/p&gt;
$$
I=1\ \mathrm{bit}
$$&lt;p&gt;確率が4分の1の場合。&lt;/p&gt;
$$
p=\frac{1}{4}
$$&lt;p&gt;情報量は次になる。&lt;/p&gt;
$$
I=2\ \mathrm{bit}
$$&lt;p&gt;確率が8分の1の場合。&lt;/p&gt;
$$
p=\frac{1}{8}
$$&lt;p&gt;情報量は以下。&lt;/p&gt;
$$
I=3\ \mathrm{bit}
$$&lt;ul&gt;
&lt;li&gt;二進数との相性がいい単位&lt;/li&gt;
&lt;li&gt;コンピュータや通信でよく登場するbit&lt;/li&gt;
&lt;li&gt;二択を何回繰り返せば特定できるか、という直感との相性の良さ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nat"&gt;Nat&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;自然対数を使った場合&lt;/li&gt;
&lt;li&gt;単位は nat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;定義。&lt;/p&gt;
$$
I(x)=-\ln p(x)
$$&lt;ul&gt;
&lt;li&gt;natは natural unit of information に由来する単位&lt;/li&gt;
&lt;li&gt;対数の底は自然対数の$e$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば、確率が以下の出来事。&lt;/p&gt;
$$
p=\frac{1}{e}
$$&lt;p&gt;その情報量。&lt;/p&gt;
$$
I(x)=-\ln\frac{1}{e}=1
$$&lt;ul&gt;
&lt;li&gt;1nat&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="bitとnatは別の情報なのか"&gt;BitとNatは別の情報なのか&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;違いは単位だけ&lt;/li&gt;
&lt;li&gt;情報量そのものが変わるわけではない&lt;/li&gt;
&lt;li&gt;同じ距離をメートルとフィートで表すようなもの&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;bitとnatの変換関係。&lt;/p&gt;
$$
1\ \mathrm{nat}=\log_2e\ \mathrm{bit}
$$&lt;p&gt;近似値。&lt;/p&gt;
$$
1\ \mathrm{nat}\approx1.443\ \mathrm{bit}
$$&lt;p&gt;逆方向の変換。&lt;/p&gt;
$$
1\ \mathrm{bit}=\ln2\ \mathrm{nat}
$$&lt;p&gt;近似値。&lt;/p&gt;
$$
1\ \mathrm{bit}\approx0.693\ \mathrm{nat}
$$&lt;p&gt;たとえば公平なコイン。&lt;/p&gt;
&lt;p&gt;bitで測った場合。&lt;/p&gt;
$$
-\log_2\frac{1}{2}=1\ \mathrm{bit}
$$&lt;p&gt;natで測った場合。&lt;/p&gt;
$$
-\ln\frac{1}{2}=\ln2\approx0.693\ \mathrm{nat}
$$&lt;ul&gt;
&lt;li&gt;数字は違う&lt;/li&gt;
&lt;li&gt;表している情報量は同じ&lt;/li&gt;
&lt;li&gt;違うのは単位だけ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="なぜ機械学習ではnatをよく見るのか"&gt;なぜ機械学習ではNatをよく見るのか&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;情報理論ではbitが直感的&lt;/li&gt;
&lt;li&gt;一方で、機械学習や統計では自然対数も頻繁に登場&lt;/li&gt;
&lt;li&gt;その場合、情報量の単位はnat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえばクロスエントロピー。&lt;/p&gt;
$$
H(p,q)=-\sum_xp(x)\ln q(x)
$$&lt;ul&gt;
&lt;li&gt;自然対数を使えば単位はnat&lt;/li&gt;
&lt;li&gt;自然対数を使う理由のひとつが、数学的な扱いやすさ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自然対数の微分。&lt;/p&gt;
$$
\frac{d}{dx}\ln x=\frac{1}{x}
$$&lt;ul&gt;
&lt;li&gt;非常にシンプルな形&lt;/li&gt;
&lt;li&gt;微分や最適化との相性の良さ&lt;/li&gt;
&lt;li&gt;最適化を大量に行う機械学習で自然対数がよく使われる理由のひとつ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ざっくりとした傾向。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通信・情報理論 → bit&lt;/li&gt;
&lt;li&gt;数学・統計・機械学習 → natも頻繁に利用&lt;/li&gt;
&lt;li&gt;ただし、本質的な違いではなく単位の選択&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="情報量とエントロピーの違い"&gt;情報量とエントロピーの違い&lt;/h2&gt;
&lt;p&gt;自己情報量の定義。&lt;/p&gt;
$$
I(x)=-\log p(x)
$$&lt;ul&gt;
&lt;li&gt;ある出来事$x$が実際に起きたときの情報量&lt;/li&gt;
&lt;li&gt;その出来事がどれくらい珍しいかを表す量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;エントロピーの定義。&lt;/p&gt;
$$
H(X)=-\sum_xp(x)\log p(x)
$$&lt;ul&gt;
&lt;li&gt;起こりうるすべての出来事について、自己情報量を平均したもの&lt;/li&gt;
&lt;li&gt;結果を見る前の不確実性を表す量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ざっくり言えば以下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;情報量 → 1回の驚き&lt;/li&gt;
&lt;li&gt;エントロピー → 驚きの平均&lt;/li&gt;
&lt;li&gt;確率が低い → 情報量が大きい&lt;/li&gt;
&lt;li&gt;確率が高い → 情報量が小さい&lt;/li&gt;
&lt;li&gt;予測しにくい → エントロピーが大きい&lt;/li&gt;
&lt;li&gt;予測しやすい → エントロピーが小さい&lt;/li&gt;
&lt;li&gt;底が2 → bit&lt;/li&gt;
&lt;li&gt;底が$e$ → nat&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;情報理論における情報とは、単なるデータの量ではないもの&lt;/li&gt;
&lt;li&gt;「どれだけ予想外だったか」を定量化したもの&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;その基本となる自己情報量。&lt;/p&gt;
$$
I(x)=-\log p(x)
$$&lt;ul&gt;
&lt;li&gt;珍しい出来事ほど大きな情報量&lt;/li&gt;
&lt;li&gt;起こりやすい出来事ほど小さな情報量&lt;/li&gt;
&lt;li&gt;確率の掛け算を、情報量の足し算に変える対数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そして、その平均としてのエントロピー。&lt;/p&gt;
$$
H(X)=-\sum_xp(x)\log p(x)
$$&lt;ul&gt;
&lt;li&gt;これがシャノンエントロピー&lt;/li&gt;
&lt;li&gt;結果が読める世界では、小さなエントロピー&lt;/li&gt;
&lt;li&gt;結果が読めない世界では、大きなエントロピー&lt;/li&gt;
&lt;li&gt;エントロピーとは、不確実性の大きさ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;対数の底によって変わる単位。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\log_2$ → bit&lt;/li&gt;
&lt;li&gt;$\ln$ → nat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後に一言でまとめるなら以下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;情報量 → 「その結果はどれくらい意外だったか」&lt;/li&gt;
&lt;li&gt;エントロピー → 「結果を見る前にどれくらい分からないか」&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>機械学習でよく出る関数</title><link>https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%82%8B%E9%96%A2%E6%95%B0/</link><pubDate>Sun, 19 Nov 2023 13:34:35 +0900</pubDate><guid>https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%82%8B%E9%96%A2%E6%95%B0/</guid><description>&lt;img src="https://www.m1ke.org/p/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%82%8B%E9%96%A2%E6%95%B0/graph.jpeg" alt="Featured image of post 機械学習でよく出る関数" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;最近機械学習をまたよく仕事でやり始めたが、やっぱり関数を忘れがち&lt;/li&gt;
&lt;li&gt;特に数年前に学んだことはちょっとは覚えていてもindexレベルしか覚えていない&lt;/li&gt;
&lt;li&gt;そこで、備忘録としてAIに一覧化してもらった&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="関数損失関数まとめ"&gt;関数・損失関数まとめ&lt;/h2&gt;
&lt;p&gt;機械学習で頻繁に登場する関数の整理。&lt;/p&gt;
&lt;p&gt;大きく分けると、以下のカテゴリ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;確率への変換：Sigmoid、Softmax&lt;/li&gt;
&lt;li&gt;確率から実数への変換：Logit&lt;/li&gt;
&lt;li&gt;活性化関数：ReLU、GELU、SiLU、tanh&lt;/li&gt;
&lt;li&gt;分類の損失関数：BCE、Cross Entropy、NLL&lt;/li&gt;
&lt;li&gt;回帰の損失関数：MSE、MAE、Huber Loss&lt;/li&gt;
&lt;li&gt;確率分布の指標：Entropy、KL Divergence&lt;/li&gt;
&lt;li&gt;数値安定化：LogSumExp、LogSoftmax&lt;/li&gt;
&lt;li&gt;正規化：LayerNorm、BatchNorm、RMSNorm&lt;/li&gt;
&lt;li&gt;ベクトルの類似度・距離：Dot Product、Cosine Similarity、L1、L2&lt;/li&gt;
&lt;li&gt;Transformer系：Scaled Dot-Product Attention&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sigmoid"&gt;Sigmoid&lt;/h3&gt;
&lt;p&gt;実数を $0$ から $1$ の範囲へ変換する関数。&lt;/p&gt;
$$
\sigma(x)=\frac{1}{1+e^{-x}}
$$&lt;p&gt;主な特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$x\to-\infty$ で $0$&lt;/li&gt;
&lt;li&gt;$x=0$ で $0.5$&lt;/li&gt;
&lt;li&gt;$x\to+\infty$ で $1$&lt;/li&gt;
&lt;li&gt;二値分類で頻出&lt;/li&gt;
&lt;li&gt;logitから確率への変換&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;関係としては以下。&lt;/p&gt;
$$
\text{logit}
\rightarrow
\text{sigmoid}
\rightarrow
\text{probability}
$$&lt;h3 id="logit"&gt;Logit&lt;/h3&gt;
&lt;p&gt;Sigmoidの逆関数。&lt;/p&gt;
$$
\operatorname{logit}(p) = \log\frac{p}{1-p}
$$&lt;p&gt;確率 $p$ を $-\infty$ から $+\infty$ の実数へ変換する関数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$p=0.5$ なら logit は $0$&lt;/li&gt;
&lt;li&gt;$p\to0$ なら logit は $-\infty$&lt;/li&gt;
&lt;li&gt;$p\to1$ なら logit は $+\infty$&lt;/li&gt;
&lt;li&gt;ニューラルネットの最終層が出力する「生のスコア」として頻出する logits&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sigmoidとの関係。&lt;/p&gt;
$$
p \xrightarrow{\operatorname{logit}} z \xrightarrow{\sigma} p
$$&lt;h3 id="softmax"&gt;Softmax&lt;/h3&gt;
&lt;p&gt;複数のlogitを、合計が $1$ になる確率分布へ変換する関数。&lt;/p&gt;
$$
p_i=\frac{e^{z_i}}{\sum_j e^{z_j}}
$$&lt;p&gt;主な用途。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多クラス分類&lt;/li&gt;
&lt;li&gt;Attention weight&lt;/li&gt;
&lt;li&gt;次トークン予測&lt;/li&gt;
&lt;li&gt;logitsからcategorical probabilityへの変換&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sigmoidが二値分類寄りなのに対して、Softmaxは多クラス分類寄りの関数。&lt;/p&gt;
&lt;h3 id="logsoftmax"&gt;LogSoftmax&lt;/h3&gt;
&lt;p&gt;Softmaxの出力にlogを取ったもの。&lt;/p&gt;
$$
\log\operatorname{softmax}(z_i) = z_i-\log\sum_j e^{z_j}
$$&lt;p&gt;主な特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Softmaxとlogを別々に計算するより数値的に安定&lt;/li&gt;
&lt;li&gt;Negative Log Likelihoodとの組み合わせ&lt;/li&gt;
&lt;li&gt;Cross Entropy内部で頻出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="logsumexp"&gt;LogSumExp&lt;/h3&gt;
&lt;p&gt;機械学習の数値計算で非常によく登場する関数。&lt;/p&gt;
$$
\operatorname{LSE}(x) = \log\sum_i e^{x_i}
$$&lt;p&gt;そのまま計算すると $e^x$ が非常に大きくなり、overflowする可能性。&lt;/p&gt;
&lt;p&gt;そこで最大値 $m$ を使った変形。&lt;/p&gt;
$$
m=\max_i x_i
$$$$
\operatorname{LSE}(x) = m+ \log\sum_i e^{x_i-m}
$$&lt;p&gt;主な用途。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Softmax&lt;/li&gt;
&lt;li&gt;LogSoftmax&lt;/li&gt;
&lt;li&gt;Cross Entropy&lt;/li&gt;
&lt;li&gt;BCE&lt;/li&gt;
&lt;li&gt;確率モデル&lt;/li&gt;
&lt;li&gt;数値安定化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;機械学習における重要な「計算テクニック」の一つ。&lt;/p&gt;
&lt;h3 id="binary-cross-entropybce"&gt;Binary Cross Entropy（BCE）&lt;/h3&gt;
&lt;p&gt;二値分類で使われる代表的な損失関数。&lt;/p&gt;
$$
L = -\left[
y\log p+
(1-y)\log(1-p)
\right]
$$&lt;p&gt;正解が $y=1$ の場合。&lt;/p&gt;
$$
L=-\log p
$$&lt;p&gt;正解が $y=0$ の場合。&lt;/p&gt;
$$
L=-\log(1-p)
$$&lt;p&gt;つまり、以前出てきた $-\log p$ そのもの。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正解に高い確率を付けるほどLossが小さい&lt;/li&gt;
&lt;li&gt;正解に低い確率を付けるほどLossが大きい&lt;/li&gt;
&lt;li&gt;二値分類の基本Loss&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="bcewithlogitsloss"&gt;BCEWithLogitsLoss&lt;/h3&gt;
&lt;p&gt;SigmoidとBCEをまとめて計算するもの。&lt;/p&gt;
&lt;p&gt;概念的には以下。&lt;/p&gt;
$$
\text{logit}
\rightarrow
\text{sigmoid}
\rightarrow
\text{BCE}
$$&lt;p&gt;実際の実装では、Sigmoidを明示的に計算せず、数値的に安定した式による計算。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;二値分類で非常に頻出&lt;/li&gt;
&lt;li&gt;PyTorchなどで定番&lt;/li&gt;
&lt;li&gt;logitsを直接入力&lt;/li&gt;
&lt;li&gt;LogSumExp系のテクニックによる数値安定化&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cross-entropy"&gt;Cross Entropy&lt;/h3&gt;
&lt;p&gt;多クラス分類で代表的な損失関数。&lt;/p&gt;
$$
H(p,q) = -\sum_i p_i\log q_i
$$&lt;p&gt;教師ラベルがone-hotの場合、正解クラスだけが残る形。&lt;/p&gt;
$$
L = -\log p_{\mathrm{correct}}
$$&lt;p&gt;つまり本質的には、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正解クラスの確率が高い → Loss小&lt;/li&gt;
&lt;li&gt;正解クラスの確率が低い → Loss大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という仕組み。&lt;/p&gt;
&lt;p&gt;典型的な流れ。&lt;/p&gt;
$$
\text{logits}
\rightarrow
\text{softmax}
\rightarrow
\text{probabilities}
\rightarrow
\text{cross entropy}
$$&lt;h3 id="negative-log-likelihoodnll"&gt;Negative Log Likelihood（NLL）&lt;/h3&gt;
&lt;p&gt;正解データの尤度にマイナスlogを取ったもの。&lt;/p&gt;
$$
L=-\log p(y\mid x)
$$&lt;p&gt;モデル学習では尤度最大化が基本。&lt;/p&gt;
$$
\max p(y\mid x)
$$&lt;p&gt;logを取っても最大値の位置は同じ。&lt;/p&gt;
$$
\max \log p(y\mid x)
$$&lt;p&gt;最小化問題として書けば、&lt;/p&gt;
$$
\min -\log p(y\mid x)
$$&lt;p&gt;Cross Entropyとの強い関連。&lt;/p&gt;
&lt;h3 id="entropy"&gt;Entropy&lt;/h3&gt;
&lt;p&gt;確率分布の「不確実性」を表す量。&lt;/p&gt;
$$
H(p)=-\sum_i p_i\log p_i
$$&lt;p&gt;例えば、&lt;/p&gt;
$$
p=[0.99,0.005,0.005]
$$&lt;p&gt;なら低いEntropy。&lt;/p&gt;
&lt;p&gt;一方、&lt;/p&gt;
$$
p=[0.33,0.33,0.34]
$$&lt;p&gt;なら高いEntropy。&lt;/p&gt;
&lt;p&gt;直感的には、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一つの選択肢に集中 → Entropy小&lt;/li&gt;
&lt;li&gt;どれもどれも同じくらいありそう → Entropy大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という関係。&lt;/p&gt;
&lt;h3 id="kl-divergence"&gt;KL Divergence&lt;/h3&gt;
&lt;p&gt;2つの確率分布の違いを測る量。&lt;/p&gt;
$$
D_{\mathrm{KL}}(p|q) = \sum_i
p_i
\log\frac{p_i}{q_i}
$$&lt;p&gt;重要な関係式。&lt;/p&gt;
$$
H(p,q) = H(p) + D_{\mathrm{KL}}(p|q)
$$&lt;p&gt;教師分布 $p$ が固定なら、&lt;/p&gt;
$$
\text{Cross Entropyの最小化}
\Longleftrightarrow
\text{KL Divergenceの最小化}
$$&lt;p&gt;主な用途。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VAE&lt;/li&gt;
&lt;li&gt;Knowledge Distillation&lt;/li&gt;
&lt;li&gt;Reinforcement Learning&lt;/li&gt;
&lt;li&gt;LLM&lt;/li&gt;
&lt;li&gt;確率分布同士の比較&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="活性化関数"&gt;活性化関数&lt;/h2&gt;
&lt;h3 id="relu"&gt;ReLU&lt;/h3&gt;
&lt;p&gt;ニューラルネットで最も基本的な活性化関数の一つ。&lt;/p&gt;
$$
\operatorname{ReLU}(x) = \max(0,x)
$$&lt;p&gt;特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$x&lt;0$ なら $0$&lt;/li&gt;
&lt;li&gt;$x&gt;0$ ならそのまま $x$&lt;/li&gt;
&lt;li&gt;計算が単純&lt;/li&gt;
&lt;li&gt;ニューラルネットへの非線形性の導入&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="leaky-relu"&gt;Leaky ReLU&lt;/h3&gt;
&lt;p&gt;ReLUの負の領域にも小さな傾きを持たせたもの。&lt;/p&gt;
$$
f(x) = \begin{cases}
x &amp; x&gt;0 \
\alpha x &amp; x\le0
\end{cases}
$$&lt;p&gt;ReLUで起こるDead Neuron問題への対策の一つ。&lt;/p&gt;
&lt;h3 id="tanh"&gt;tanh&lt;/h3&gt;
&lt;p&gt;出力を $-1$ から $1$ に収めるS字型の関数。&lt;/p&gt;
$$
\tanh(x) = \frac{e^x-e^{-x}}
{e^x+e^{-x}}
$$&lt;p&gt;特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;出力範囲 $[-1,1]$&lt;/li&gt;
&lt;li&gt;$\tanh(0)=0$&lt;/li&gt;
&lt;li&gt;Sigmoidと似た形&lt;/li&gt;
&lt;li&gt;RNNなどで頻出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="gelu"&gt;GELU&lt;/h3&gt;
&lt;p&gt;Transformer系モデルで頻出する活性化関数。&lt;/p&gt;
$$
\operatorname{GELU}(x) = x\Phi(x)
$$&lt;p&gt;$\Phi(x)$ は標準正規分布の累積分布関数。&lt;/p&gt;
&lt;p&gt;直感的には「滑らかなReLU」。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transformer&lt;/li&gt;
&lt;li&gt;BERT系&lt;/li&gt;
&lt;li&gt;GPT系などで頻出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="silu--swish"&gt;SiLU / Swish&lt;/h3&gt;
&lt;p&gt;Sigmoidを利用した滑らかな活性化関数。&lt;/p&gt;
$$
\operatorname{SiLU}(x) = x\sigma(x)
$$&lt;p&gt;特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;滑らかなReLU系&lt;/li&gt;
&lt;li&gt;Swishとも呼ばれる関数&lt;/li&gt;
&lt;li&gt;現代的なニューラルネットで頻出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="softplus"&gt;Softplus&lt;/h3&gt;
&lt;p&gt;ReLUを滑らかにしたような関数。&lt;/p&gt;
$$
\operatorname{Softplus}(x) = \log(1+e^x)
$$&lt;p&gt;導関数がSigmoid。&lt;/p&gt;
$$
\frac{d}{dx}\operatorname{Softplus}(x) = \sigma(x)
$$&lt;p&gt;興味深い関係。&lt;/p&gt;
$$
\operatorname{Softplus}(x)
\approx
\operatorname{ReLU}(x)
$$&lt;h2 id="回帰でよく使う損失関数"&gt;回帰でよく使う損失関数&lt;/h2&gt;
&lt;h3 id="mse"&gt;MSE&lt;/h3&gt;
&lt;p&gt;Mean Squared Error。&lt;/p&gt;
$$
L =(y-\hat y)^2
$$&lt;p&gt;特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;誤差を二乗&lt;/li&gt;
&lt;li&gt;大きな誤差への強いペナルティ&lt;/li&gt;
&lt;li&gt;回帰問題の代表的Loss&lt;/li&gt;
&lt;li&gt;L2 Lossとも関連&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mae"&gt;MAE&lt;/h3&gt;
&lt;p&gt;Mean Absolute Error。&lt;/p&gt;
$$
L = |y-\hat y|
$$&lt;p&gt;特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;誤差の絶対値&lt;/li&gt;
&lt;li&gt;MSEより外れ値の影響を受けにくい性質&lt;/li&gt;
&lt;li&gt;L1 Lossとも関連&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="huber-loss"&gt;Huber Loss&lt;/h3&gt;
&lt;p&gt;MSEとMAEの中間的なLoss。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;小さい誤差 → 二乗誤差&lt;/li&gt;
&lt;li&gt;大きい誤差 → 絶対誤差&lt;/li&gt;
&lt;li&gt;MSEの滑らかさとMAEの外れ値耐性の折衷&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ベクトル計算でよく出るもの"&gt;ベクトル計算でよく出るもの&lt;/h2&gt;
&lt;h3 id="dot-product"&gt;Dot Product&lt;/h3&gt;
&lt;p&gt;ベクトルの内積。&lt;/p&gt;
$$
x^\top y = \sum_i x_i y_i
$$&lt;p&gt;主な用途。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Attention&lt;/li&gt;
&lt;li&gt;類似度&lt;/li&gt;
&lt;li&gt;線形層&lt;/li&gt;
&lt;li&gt;Embedding&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cosine-similarity"&gt;Cosine Similarity&lt;/h3&gt;
&lt;p&gt;ベクトル同士の向きの近さ。&lt;/p&gt;
$$
\operatorname{cos_sim}(x,y) = \frac{x^\top y}
{|x|_2|y|_2}
$$&lt;p&gt;主な用途。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Embedding検索&lt;/li&gt;
&lt;li&gt;Semantic Search&lt;/li&gt;
&lt;li&gt;文書類似度&lt;/li&gt;
&lt;li&gt;Recommendation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="l2-distance"&gt;L2 Distance&lt;/h3&gt;
&lt;p&gt;ユークリッド距離。&lt;/p&gt;
$$
d(x,y) = |x-y|_2
$$&lt;p&gt;つまり、&lt;/p&gt;
$$
d(x,y) = \sqrt{
\sum_i(x_i-y_i)^2
}
$$&lt;h3 id="l1-distance"&gt;L1 Distance&lt;/h3&gt;
&lt;p&gt;マンハッタン距離。&lt;/p&gt;
$$
d(x,y) = |x-y|_1
$$&lt;p&gt;つまり、&lt;/p&gt;
$$
d(x,y) = \sum_i|x_i-y_i|
$$&lt;h2 id="transformerで特に重要な式"&gt;Transformerで特に重要な式&lt;/h2&gt;
&lt;h3 id="scaled-dot-product-attention"&gt;Scaled Dot-Product Attention&lt;/h3&gt;
&lt;p&gt;Transformerの中心となるAttention。&lt;/p&gt;
$$
\operatorname{Attention}(Q,K,V) = \operatorname{softmax}
\left(
\frac{QK^\top}{\sqrt{d_k}}
\right)V
$$&lt;p&gt;内部の流れ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QueryとKeyのDot Product&lt;/li&gt;
&lt;li&gt;$\sqrt{d_k}$ によるスケーリング&lt;/li&gt;
&lt;li&gt;Softmaxによる重みへの変換&lt;/li&gt;
&lt;li&gt;Valueの加重平均&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これまで出てきた関数が一つの式に集約された構造。&lt;/p&gt;
&lt;h3 id="layernorm"&gt;LayerNorm&lt;/h3&gt;
&lt;p&gt;ニューラルネット内部の値を正規化する処理。&lt;/p&gt;
$$
\hat{x} = \frac{x-\mu}
{\sqrt{\sigma^2+\epsilon}}
$$&lt;p&gt;その後のAffine変換。&lt;/p&gt;
$$
y = \gamma\hat{x}+\beta
$$&lt;p&gt;Transformerを構成する基本要素の一つ。&lt;/p&gt;
&lt;h3 id="rmsnorm"&gt;RMSNorm&lt;/h3&gt;
&lt;p&gt;LayerNormに近い正規化手法。&lt;/p&gt;
&lt;p&gt;RMSは、&lt;/p&gt;
$$
\operatorname{RMS}(x) = \sqrt{
\frac{1}{n}
\sum_i x_i^2
}
$$&lt;p&gt;RMSNormの基本形。&lt;/p&gt;
$$
\hat{x} = \frac{x}
{\operatorname{RMS}(x)+\epsilon}
$$&lt;p&gt;特徴。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LayerNormのような平均の減算なし&lt;/li&gt;
&lt;li&gt;現代的なLLMで頻出&lt;/li&gt;
&lt;li&gt;比較的シンプルな計算&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="特に覚えたい重要関数"&gt;特に覚えたい重要関数&lt;/h2&gt;
&lt;p&gt;まず優先して押さえたいもの。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\exp(x)$&lt;/li&gt;
&lt;li&gt;$\log(x)$&lt;/li&gt;
&lt;li&gt;$-\log(p)$&lt;/li&gt;
&lt;li&gt;Sigmoid&lt;/li&gt;
&lt;li&gt;Logit&lt;/li&gt;
&lt;li&gt;Softmax&lt;/li&gt;
&lt;li&gt;LogSoftmax&lt;/li&gt;
&lt;li&gt;LogSumExp&lt;/li&gt;
&lt;li&gt;BCE / BCEWithLogitsLoss&lt;/li&gt;
&lt;li&gt;Cross Entropy&lt;/li&gt;
&lt;li&gt;Entropy&lt;/li&gt;
&lt;li&gt;KL Divergence&lt;/li&gt;
&lt;li&gt;ReLU&lt;/li&gt;
&lt;li&gt;GELU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特に重要な一本の流れ。&lt;/p&gt;
$$
\text{logit}
\rightarrow
\text{sigmoid / softmax}
\rightarrow
\text{probability}
\rightarrow
-\log
\rightarrow
\text{cross entropy}
$$&lt;p&gt;機械学習でバラバラに登場する用語をつなげて理解するための中心線。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DNNやNLPの概念は繋がっている&lt;/li&gt;
&lt;li&gt;シャノンの情報理論、エントロピーからトランスフォーマーまで&lt;/li&gt;
&lt;li&gt;ココらへんはよく出るので、一度定義を書く下しておいてして、必要な時に再度参照するのが良い&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.geeksforgeeks.org/maths/implicit-function/" target="_blank" rel="noopener"
&gt;Implicit Function - GeeksforGeeks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>混同行列について</title><link>https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</link><pubDate>Sun, 19 Nov 2023 13:34:35 +0900</pubDate><guid>https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</guid><description>&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/confusion-matrix.png" alt="Featured image of post 混同行列について" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;機械学習でも頻出する話題である混同行列について改めてまとめる。&lt;/p&gt;
&lt;h2 id="前提"&gt;前提&lt;/h2&gt;
&lt;h3 id="分類の全体像"&gt;分類の全体像&lt;/h3&gt;
&lt;p&gt;まず、分類には付けるlabelが単数か複数（単数もしくは複数）かによって、大きく2つの型がある。
その上で、今回は単数のSingle-label classificationを扱う。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Single-label classification&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;二値分類（Binary Classification）
&lt;ul&gt;
&lt;li&gt;0か1などのように2つに分類するパターン&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;多クラス分類（Multi Class Classification=MCC）
&lt;ul&gt;
&lt;li&gt;1つのインスタンスに複数のクラスから1つのクラスが付くパターン&lt;/li&gt;
&lt;li&gt;物体検知などで利用される&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;multi-label classification&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;1つのオブジェクトに複数のラベルが付くパターン&lt;/li&gt;
&lt;li&gt;LLMなどでトークンのNER（Named Entity Recognition）分類などに使われる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-2.png"
width="720"
height="428"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-2_hu_f2454d04caa4c92b.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-2_hu_fe4e02f022b3e0a6.png 1024w"
loading="lazy"
alt="Types of classification algorithms in Machine Learning"
class="gallery-image"
data-flex-grow="168"
data-flex-basis="403px"
&gt;&lt;/p&gt;
&lt;h3 id="マルチラベルとマルチクラスの違い"&gt;マルチラベルとマルチクラスの違い&lt;/h3&gt;
&lt;p&gt;ややこしい為まとめると、次のように、マルチラベルとマルチクラスの違いがある。
一般的に、Single-labelのみ混合行列が適用可能になる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特徴&lt;/th&gt;
&lt;th&gt;マルチラベル分類&lt;/th&gt;
&lt;th&gt;マルチクラス分類&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;クラス割り当て&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;各インスタンスに複数のラベルを割り当てる&lt;/td&gt;
&lt;td&gt;各インスタンスを一つのクラスに割り当てる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ラベルの数&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;インスタンスごとに異なる数のラベル&lt;/td&gt;
&lt;td&gt;各インスタンスは一つのラベルのみを持つ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;典型的な使用例&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;映画のジャンル分類（例：アクション、ロマンス）&lt;/td&gt;
&lt;td&gt;動物の種類分類（例：犬、猫、鳥）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;混同行列の使用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;伝統的な混同行列は適用しにくいが、適応された方法が使用される&lt;/td&gt;
&lt;td&gt;直接使用可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;評価指標&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ハミング損失、ラベルごとの精度・再現率・F1スコア&lt;/td&gt;
&lt;td&gt;全体の精度、クラスごとの精度・再現率・F1スコア&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ラベルとクラスの違い"&gt;ラベルとクラスの違い&lt;/h3&gt;
&lt;p&gt;微妙なニュアンスの違いがある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ラベル（Label）：
&lt;ul&gt;
&lt;li&gt;個々のデータポイントに割り当てられる具体的なカテゴリ&lt;/li&gt;
&lt;li&gt;例: メールが「スパム」や「非スパム」とラベル付けされる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;クラス（Class）：
&lt;ul&gt;
&lt;li&gt;分類タスクにおける全ての可能なカテゴリのセットを指す&lt;/li&gt;
&lt;li&gt;例: スパムメール分類タスクにおいて、可能なクラスは「スパム」と「非スパム」の2つ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、ラベルはラベリングというように、個々の事例に焦点を当てており、
クラスはが識別することができる全てのカテゴリの集合を意味する。&lt;/p&gt;
&lt;p&gt;ちなみに、オブジェクトとインスタンスも混合しがちだが、分類の文脈ではインスタンスが適切である。&lt;/p&gt;
&lt;h3 id="混同行列とは"&gt;混同行列とは&lt;/h3&gt;
&lt;p&gt;混同行列（Confusion Matrix）とは、機械学習の2値分類問題の分類結果をまとめた行列。
予測とその予想の正解かどうかの組み分けを表にまとめたもの。&lt;/p&gt;
&lt;h2 id="二値分類"&gt;二値分類&lt;/h2&gt;
&lt;h3 id="犬と猫の例"&gt;犬と猫の例&lt;/h3&gt;
&lt;p&gt;一目で分かりやすいのが次の画像。
次のマトリックスになっている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;行を正解ラベル&lt;/li&gt;
&lt;li&gt;列を予測結果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image.png"
width="590"
height="391"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image_hu_c8394ead06e26cf5.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image_hu_a5978ab686b79a57.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="362px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-24.png"
width="590"
height="307"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-24_hu_7caaaa11a78fc093.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-24_hu_bfec2feb2e6254c1.png 1024w"
loading="lazy"
alt="正解率のイメージ"
class="gallery-image"
data-flex-grow="192"
data-flex-basis="461px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-19.png"
width="590"
height="390"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-19_hu_1579d5266bcf09f7.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-19_hu_c47305e1a1c853a3.png 1024w"
loading="lazy"
alt="再現度のイメージ"
class="gallery-image"
data-flex-grow="151"
data-flex-basis="363px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-20.png"
width="590"
height="390"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-20_hu_acf394c06b5c34d5.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-20_hu_96a3f93745ee25b8.png 1024w"
loading="lazy"
alt="適合率のイメージ"
class="gallery-image"
data-flex-grow="151"
data-flex-basis="363px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-21.png"
width="590"
height="393"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-21_hu_97f7b9f81a50e14a.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-21_hu_dec815c237291c.png 1024w"
loading="lazy"
alt="特異度のイメージ"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="360px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-22.png"
width="590"
height="679"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-22_hu_86f5e12aafa06cbf.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-22_hu_5983d6aca0b0456a.png 1024w"
loading="lazy"
alt="F値のイメージ"
class="gallery-image"
data-flex-grow="86"
data-flex-basis="208px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-23.png"
width="590"
height="500"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-23_hu_47a9893d65492f7d.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-23_hu_60f2978478a47f21.png 1024w"
loading="lazy"
alt="重み付きF値"
class="gallery-image"
data-flex-grow="118"
data-flex-basis="283px"
&gt;&lt;/p&gt;
&lt;h3 id="評価指標"&gt;評価指標&lt;/h3&gt;
&lt;h4 id="陽性--正例-positive-陰性--負例negative"&gt;陽性 / 正例 （Positive）、 陰性 / 負例（Negative）&lt;/h4&gt;
&lt;p&gt;機械学習では正例 / 負例の翻訳をよく使う。
これは予測とGrand-Truthの予測ラベルにおけるPositive / Negativeの事を意味する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;陽性 / 正例（Positive）: 予測対象の特定の状態または属性（例えば病気である、スパムであるなど）が存在する場合&lt;/li&gt;
&lt;li&gt;陰性 / 負例（Negative）: 予測対象の特定の状態または属性が存在しない場合&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="真陽性tp--偽陽性fp--偽陰性fn--真陰性tn"&gt;真陽性（TP） / 偽陽性（FP） / 偽陰性（FN） / 真陰性（TN）&lt;/h4&gt;
&lt;p&gt;予測結果と実際の正解ラベルを基にマトリックスを作ったのが、TP / FP / FN / TNである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;真陽性（TP, True Positive）: モデルが陽性と予測し、実際に陽性であるケース&lt;/li&gt;
&lt;li&gt;偽陽性（FP, False Positive）: モデルが陽性と予測したが、実際には陰性であるケース&lt;/li&gt;
&lt;li&gt;偽陰性（FN, False Negative）: モデルが陰性と予測したが、実際には陽性であるケース&lt;/li&gt;
&lt;li&gt;真陰性（TN, True Negative）: モデルが陰性と予測し、実際に陰性であるケース&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-3.png"
width="590"
height="122"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-3_hu_ec9df75945fdbc7.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-3_hu_f8785b3a4fcf3050.png 1024w"
loading="lazy"
alt="混同行列の定義"
class="gallery-image"
data-flex-grow="483"
data-flex-basis="1160px"
&gt;&lt;/p&gt;
&lt;p&gt;また、その割合はRateを付けて、TPR（陽性率）などと表現する。&lt;/p&gt;
&lt;h4 id="正解率accuracy"&gt;正解率（Accuracy）&lt;/h4&gt;
&lt;p&gt;正解率は、全てのケースの中で正しく予測されたケース（TPとTN）の割合。&lt;/p&gt;
$$
Accuracy = \frac{(TP+TN)}{(TP+FP+FN+TN)}
$$&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-4.png"
width="590"
height="179"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-4_hu_314b9d23c092471c.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-4_hu_799042fd9e0d5d13.png 1024w"
loading="lazy"
alt="混同行列による正解率の説明"
class="gallery-image"
data-flex-grow="329"
data-flex-basis="791px"
&gt;&lt;/p&gt;
&lt;h4 id="誤答率error-rate"&gt;誤答率（Error rate）&lt;/h4&gt;
&lt;p&gt;誤答率は、全てのケースの中で誤って予測されたケース（FPとFN）の割合。&lt;/p&gt;
$$
\text{Error Rate} = 1 - Accuracy
$$&lt;h4 id="適合率--精度precision"&gt;適合率 / 精度（Precision）&lt;/h4&gt;
&lt;p&gt;適合率は、陽性と予測されたケースの中で、実際に陽性である割合。&lt;/p&gt;
$$
Precision = \frac{TP}{(TP+FP)}
$$&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-5.png"
width="590"
height="164"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-5_hu_2a1f0aa29e1a7f5c.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-5_hu_e2c5186738f2215b.png 1024w"
loading="lazy"
alt="混同行列による適合率の説明"
class="gallery-image"
data-flex-grow="359"
data-flex-basis="863px"
&gt;&lt;/p&gt;
&lt;h4 id="再現率recall-感度sensitivity"&gt;再現率（Recall）/ 感度（Sensitivity）&lt;/h4&gt;
&lt;p&gt;再現率は、実際に陽性であるケースの中で、正しく陽性と予測された割合。&lt;/p&gt;
$$
Recall = \frac{TP}{(TP+FN)}
$$&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-6.png"
width="590"
height="119"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-6_hu_23cad5a6f477abec.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-6_hu_5bef8c119b085488.png 1024w"
loading="lazy"
alt="混同行列による再現率の説明"
class="gallery-image"
data-flex-grow="495"
data-flex-basis="1189px"
&gt;&lt;/p&gt;
&lt;h4 id="適合率と再現率のトレードオフ"&gt;適合率と再現率のトレードオフ&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;適合率（Precision）と再現率（Recall）にはトレードオフの関係がある&lt;/li&gt;
&lt;li&gt;簡単に言えば、スナイパーライフルとマシンガンの戦略の違いのようなもの&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-7.png"
width="590"
height="226"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-7_hu_5d1d870ac07295ed.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-7_hu_2751a39e102c769f.png 1024w"
loading="lazy"
alt="適合率と再現率のトレードオフ"
class="gallery-image"
data-flex-grow="261"
data-flex-basis="626px"
&gt;&lt;/p&gt;
&lt;h4 id="特異度specificity"&gt;特異度（Specificity）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;特異度は、実際に陰性であるケースの中で、正しく陰性と予測された割合。&lt;/li&gt;
&lt;li&gt;つまり、適合度のNegative版ということ&lt;/li&gt;
&lt;/ul&gt;
$$
Specificity = \frac{TN}{(TN+FP)}
$$&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-10.png"
width="590"
height="170"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-10_hu_a9decdcc01f4aca9.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-10_hu_98433f9149afa869.png 1024w"
loading="lazy"
alt="混同行列による特異度の説明"
class="gallery-image"
data-flex-grow="347"
data-flex-basis="832px"
&gt;&lt;/p&gt;
&lt;h4 id="特異度と感度のトレードオフ"&gt;特異度と感度のトレードオフ&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;特異度と感度（適合率）もまたトレードオフである&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-9.png"
width="590"
height="245"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-9_hu_4e792d0dc9a84c3a.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-9_hu_35a34f01069d529c.png 1024w"
loading="lazy"
alt="感度と特異度のトレードオフ"
class="gallery-image"
data-flex-grow="240"
data-flex-basis="577px"
&gt;&lt;/p&gt;
&lt;h4 id="f値"&gt;F値&lt;/h4&gt;
&lt;h5 id="f値-f-measure-f1スコアf1-score"&gt;F値 （F-measure）/ F1スコア（F1-score）&lt;/h5&gt;
&lt;p&gt;適合率と再現率のトレードオフ関係に着目し、調和平均を算出した値がF値（F-measure）。&lt;/p&gt;
$$
F_{1} = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
$$&lt;h5 id="重み付きf値weighted-f-measure-fβスコアfβ-score"&gt;重み付きF値（Weighted F-measure）/ Fβスコア（Fβ-score）&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;F値 / F1スコアは調和平均で、適合率と再現率をどちらも同じように扱った&lt;/li&gt;
&lt;li&gt;それのバランス調整をするのが、重み付きF値&lt;/li&gt;
&lt;li&gt;β&amp;gt;1なら再現率を重視し、β&amp;lt;1なら適合率を重視する&lt;/li&gt;
&lt;/ul&gt;
$$
F_{\beta} = \frac{\text{Precision} \times \text{Recall} \times (\beta + 1)}{\text{Precision} + \text{Recall} \times \beta^{2}}
$$&lt;h5 id="マイクロf1とマクロf1"&gt;マイクロF1とマクロF1&lt;/h5&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;計算方法&lt;/th&gt;
&lt;th&gt;重視するもの&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Macro-F1&lt;/td&gt;
&lt;td&gt;各クラスのF1を単純平均&lt;/td&gt;
&lt;td&gt;各クラスを平等に評価&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Micro-F1&lt;/td&gt;
&lt;td&gt;TP・FP・FNを全部合計&lt;/td&gt;
&lt;td&gt;全サンプルの正解性能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weighted-F1&lt;/td&gt;
&lt;td&gt;データ数でF1を加重平均&lt;/td&gt;
&lt;td&gt;多数クラスの性能&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="loglossbinary-logarithmic-loss"&gt;LogLoss（Binary Logarithmic Loss）&lt;/h4&gt;
&lt;p&gt;分類の正確さ（Accuracy）よりも、確率の高さ（Probability）を評価スコアとして取得したい場合に利用する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;つまり、0, 1のカテゴリカル変数ではなく、[0, 1]の範囲と閾値を基にした確率的な評価スコアと言う事&lt;/li&gt;
&lt;li&gt;LogLossは[0, -∞]までの値域&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-8.png"
width="590"
height="440"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-8_hu_549677b01a2b805e.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-8_hu_6c22ddbabb44c059.png 1024w"
loading="lazy"
alt="LogLossと正解率の違い"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="321px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;また、交差エントロピー誤差（Cross entropy error）と考え方は一緒&lt;/li&gt;
&lt;li&gt;平均二乗誤差（MSE：Mean Squared Error）との比較が次の画像&lt;/li&gt;
&lt;li&gt;図の通り、両端の扱いが違う&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-11.png"
width="590"
height="427"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-11_hu_c2ba9ef9af1d36e0.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-11_hu_4abf4eb92226f1ef.png 1024w"
loading="lazy"
alt="交差エントロピー誤差（LogLoss）と平均二乗誤差の違い"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上記図の指数関数的な変化を&lt;code&gt;-log(p)&lt;/code&gt;としてマイナス自然対数を使う&lt;/li&gt;
&lt;li&gt;すると、pを確率、-log(p)を正解との誤差に利用している&lt;/li&gt;
&lt;li&gt;0は不正解で、1は正解である&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-12.png"
width="590"
height="229"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-12_hu_eff8b13aaf1d276c.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-12_hu_b2dd2c62685b8702.png 1024w"
loading="lazy"
alt="自然対数にマイナスを掛けてプラスのグラフに"
class="gallery-image"
data-flex-grow="257"
data-flex-basis="618px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下のloglossはクロスエントロピー誤差である&lt;/li&gt;
&lt;li&gt;nはクラス数、y_iは正解ラベル、p_iは予測結果を示している&lt;/li&gt;
&lt;/ul&gt;
$$
LogLoss = - \frac{1}{n} \sum_{i=1}^n (y_i log p_i + (1- y_i) log(1-p_i)))
$$&lt;h3 id="ポイント系"&gt;ポイント系&lt;/h3&gt;
&lt;h4 id="カットオフポイントcutoff-point"&gt;カットオフポイント（cutoff point）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;PR曲線やROC曲線を出すのに閾値を複数用いて評価スコアを算出し、総合的にモデルの性能の評価をする必要がある&lt;/li&gt;
&lt;li&gt;その閾値の事をカットオフポイントと言う&lt;/li&gt;
&lt;li&gt;例えば、閾値の数が200個なら、ある閾値のレンジを200分割し、それぞれを閾値（カットオフポイント）として利用する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-17.png"
width="898"
height="605"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-17_hu_93b599eb2e6c315d.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-17_hu_decf4a7f6edf3daa.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="148"
data-flex-basis="356px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データの分布とカットオフ値の関係を上に示す&lt;/li&gt;
&lt;li&gt;モデルが完全にPositiveとNegativeを予測できない限り、Grand-truthのPositiveとNegativeの分布は重なる&lt;/li&gt;
&lt;li&gt;カットオフより+はPositiveと予測し、カットオフより－はNegativeと予測している事を意味する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-25.png"
width="293"
height="233"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-25_hu_afa3ad47c1a9f9a6.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-25_hu_c17aee202d90dd7d.png 1024w"
loading="lazy"
alt="ベン図"
class="gallery-image"
data-flex-grow="125"
data-flex-basis="301px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分布をベン図で示すと上になる&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ブレイクイブンポイント"&gt;ブレイクイブンポイント&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ブレイクイブンポイント（BEP）は、適合率と再現率が等しくなる点を指す&lt;/li&gt;
&lt;li&gt;この点は、モデルが偽陽性と偽陰性を同じ程度に重視している状態を示し、PR曲線上で見つけることができる&lt;/li&gt;
&lt;li&gt;BEPはモデルの全体的なバランスを理解するのに役立つ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="auc系"&gt;AUC系&lt;/h3&gt;
&lt;h4 id="aucの目的"&gt;AUCの目的&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;機械学習モデルの性能を比較するためなど、モデルの精度（＝性能）をより汎用的に計測したい場合&lt;/strong&gt;に利用する&lt;/li&gt;
&lt;li&gt;正解率よりも優れている利点としては、AUCはしきい値の影響を受けないことが挙げられる&lt;/li&gt;
&lt;li&gt;正解率は、デフォルトで0.5をしきい値として、予測値は0.5以上なら1、0.5未満なら0という形で評価値が決まる&lt;/li&gt;
&lt;li&gt;つまり、このしきい値は変えることもできるが、その場合、評価値も変わってしまうという問題があると言う事&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="aucは二種類ある"&gt;AUCは二種類ある&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;通常の、ROC曲線を使ったAUC&lt;/li&gt;
&lt;li&gt;PR曲線を使ったPR-AUC（Area Under the Precision-Recall Curve、AUC-PR）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通常はROC曲線を使ったAUCをAUCと表記する。&lt;/p&gt;
&lt;h4 id="aucarea-under-the-roc-curve"&gt;AUC（Area Under the ROC Curve）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;AUC（Area Under the Curve）はROC曲線（Receiver Operating Characteristic curve）の下の面積&lt;/li&gt;
&lt;li&gt;値域は[0, 1]で、高いほどいい精度を示す&lt;/li&gt;
&lt;li&gt;AUCは特に不均衡なデータセットでのモデルの性能を評価するのに有効&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="roc曲線receiver-operating-characteristic-curve受信者操作特性曲線とauc"&gt;ROC曲線（Receiver Operating Characteristic curve：受信者操作特性曲線）とAUC&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ROC曲線は、異なるしきい値における真陽性率（TPR）と偽陽性率（FPR）の関係をプロットしたグラフ&lt;/li&gt;
&lt;li&gt;曲線が左上に近づくほどモデルの性能が高いと評価される&lt;/li&gt;
&lt;li&gt;ROC曲線は、特にバイナリ分類問題においてモデルの診断能力を評価するのに役立つ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-13.png"
width="590"
height="392"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-13_hu_8e2bfae316da16e4.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-13_hu_d8ffa4213fc4922d.png 1024w"
loading="lazy"
alt="AUCのグラフ例"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="361px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AUCグラフは、X軸はFPR、Y軸はTPRで成り立つ&lt;/li&gt;
&lt;li&gt;上図の水色の領域の面積がAUCの値&lt;/li&gt;
&lt;li&gt;ランダムに推測（random guess）するモデルだと、基本的にAUCは0.5となる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;意味は次になる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0.9～1.0： 非常によい（excellent）&lt;/li&gt;
&lt;li&gt;0.8～0.9： よい（good）&lt;/li&gt;
&lt;li&gt;0.7～0.8： まあまあ（fair）&lt;/li&gt;
&lt;li&gt;0.6～0.7： よくない（poor）&lt;/li&gt;
&lt;li&gt;0.5～0.6： 失敗（fail）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ROC曲線の描き方。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;閾値を変えてTPRとFPRを計測する&lt;/li&gt;
&lt;li&gt;元々、感度や特異度では分類判定のしきい値を指定していた&lt;/li&gt;
&lt;li&gt;しかし、AUCの真陽性率＆偽陽性率では0.0～1.0の範囲でしきい値を細かく指定していく&lt;/li&gt;
&lt;li&gt;この閾値を（threshold value＝カットオフポイント：&lt;code&gt;cutoff points（分割点）&lt;/code&gt;）と言う&lt;/li&gt;
&lt;li&gt;例えば、cutoff pointsを200とすると、[0, 1]を200分割して計測してグラフを描写することになる&lt;/li&gt;
&lt;li&gt;下の画像はその一例となる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-14.png"
width="590"
height="392"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-14_hu_c07ef2b299de2c55.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-14_hu_2ab78081248c0566.png 1024w"
loading="lazy"
alt="ROC曲線のグラフ例（実例）"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="361px"
&gt;&lt;/p&gt;
&lt;h4 id="pr曲線とpr-aucarea-under-the-precision-recall-curveauc-pr"&gt;PR曲線とPR-AUC（Area Under the Precision-Recall Curve、AUC-PR）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;PR曲線（Precision-Recall curve）は、適合率（Precision）と再現率（Recall）の関係をプロットしたグラフ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特に陽性クラスのサンプルが少ない不均衡なデータセットにおいて、モデルの性能を評価するのにPR-AUCは有効&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;PR曲線では、曲線が右上に近づくほどモデルの性能が良いとされる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-15.png"
width="588"
height="392"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-15_hu_51a0abd943b61f7.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-15_hu_c6999fee0769d588.png 1024w"
loading="lazy"
alt="PR-AUCのグラフ例"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="360px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PR-AUCグラフは、X軸は適合率（Precision）、Y軸は再現率（Recall）で成り立つ&lt;/li&gt;
&lt;li&gt;PR曲線はROC曲線と同じように閾値を変更してプロットする形になる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-16.png"
width="588"
height="392"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-16_hu_387973ddca546480.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-16_hu_c1f2fdade452de2e.png 1024w"
loading="lazy"
alt="PR曲線のグラフ例（実例）"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="360px"
&gt;&lt;/p&gt;
&lt;p&gt;そもそも適合率と再現率はトレードオフ関係にあり、再現率（x軸）の数値が大きくなるにつれて、適合率（y軸）は小さくなる。&lt;/p&gt;
&lt;h4 id="roc曲線とpr-roc曲線の違い"&gt;ROC曲線とPR-ROC曲線の違い&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ROC曲線では、ランダムに推測（random guess）すると、基本的にAUCは0.5&lt;/li&gt;
&lt;li&gt;他方、PR-ROC曲線はランダムに予測しても、陽性と陰性のデータ数の割合によって数値が変わる&lt;/li&gt;
&lt;li&gt;よってPR-AUCは、ROC曲線のAUCと比べて「&lt;strong&gt;モデルの汎用的な精度の測定や比較という用途にはあまり向いていない&lt;/strong&gt;」ともいえる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="値系"&gt;値系&lt;/h3&gt;
&lt;h4 id="閾値"&gt;閾値&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;モデルの分類スコアをベースに属するか属さないかを決める為のスコア&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="評価スコア"&gt;評価スコア&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;これはTPRやAUCなど、性能の評価として取った代表値の総称の事&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="分類スコア"&gt;分類スコア&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;分類スコアは、分類モデルが特定のクラスに属する確率を示す数値&lt;/li&gt;
&lt;li&gt;このスコアは、モデルがどの程度自信を持って、予測を行っているかを示している&lt;/li&gt;
&lt;li&gt;しきい値を調整することで分類の精度を変えることができる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="average-precision系"&gt;Average Precision系&lt;/h3&gt;
&lt;h4 id="適合率--apaverage-precision"&gt;適合率 / AP（Average Precision）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;平均適合率（AP）は、&lt;strong&gt;異なるしきい値で計算された適合率の平均&lt;/strong&gt;を意味する&lt;/li&gt;
&lt;li&gt;APはPR曲線の下の面積としても解釈され、モデルの平均的な適合率の性能を示す&lt;/li&gt;
&lt;li&gt;不均衡データで有効&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="平均適合率--mapmean-average-precision"&gt;平均適合率 / mAP（mean Average Precision）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;mAP（mean Average Precision）は、&lt;strong&gt;複数のクラスまたは複数の検出タスクに対するモデルの平均適合率の平均&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;これは、特にオブジェクト検出やマルチクラス分類問題でよく使用される指標で、モデルが全体的にどれだけうまく機能しているのかを判断する指標&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="多クラスの混同行列"&gt;多クラスの混同行列&lt;/h2&gt;
&lt;h3 id="分かりやすい例"&gt;分かりやすい例&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;下の画像が一番わかりやすい&lt;/li&gt;
&lt;li&gt;多クラス分類の場合でも、二値分類の場合と同様にTP / FP / FN / TNを計算できる&lt;/li&gt;
&lt;li&gt;ただし、クラス毎に計算する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-1.png"
width="1231"
height="672"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-1_hu_75f5ca49d649b07f.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-1_hu_471578871d245859.png 1024w"
loading="lazy"
alt="「多クラス分類の混同行列」（犬を陽性とするバージョン）のイメージ"
class="gallery-image"
data-flex-grow="183"
data-flex-basis="439px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上の例では、犬を陽性とするバージョンと同様に、猫を陽性とするバージョンと、熊を陽性とするバージョンの計3パターンを考える必要がある&lt;/li&gt;
&lt;li&gt;つまり、クラスの数だけ「二値分類の混同行列」を作るという事&lt;/li&gt;
&lt;li&gt;また、全体的な評価方法として、マクロ平均とマイクロ平均がある&lt;/li&gt;
&lt;li&gt;例えば、F1スコアもMicro-F1スコアやMacro F1スコアなどのように分かれる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="マクロ平均macro-average"&gt;マクロ平均（Macro Average）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;各クラスごとに指標を計算し、その後でこれらの平均を取る&lt;/li&gt;
&lt;li&gt;つまり、これは各クラスを同等に扱うことを意味する&lt;/li&gt;
&lt;li&gt;故に、不均衡データにおいては、マクロ平均を使った方が良い&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="マイクロ平均micro-average"&gt;マイクロ平均（Micro Average）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;全クラスにわたって集計された真陽性（TP）、偽陽性（FP）、偽陰性（FN）の値を使用して指標を計算する&lt;/li&gt;
&lt;li&gt;つまり、個々のクラスよりも全体のパフォーマンスに焦点を当てるアプローチ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="マクロ平均とマイクロ平均の使い分け"&gt;マクロ平均とマイクロ平均の使い分け&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;マイクロはクラス毎のTF / FP / FN / TPなどを計算し合算して評価スコアを出す&lt;/li&gt;
&lt;li&gt;故に、少数のデータしかないクラスのでーたががあったとしてもそれは反映されにくい&lt;/li&gt;
&lt;li&gt;逆に、マクロ平均はTP / TN / FP / FNなどをクラスごとに計算して代表値を出しその平均を取る&lt;/li&gt;
&lt;li&gt;故に、マクロ平均は少数のデータでも代表値を出し別のクラスと同様に扱うため、不均衡データに適する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="バイアス"&gt;バイアス&lt;/h2&gt;
&lt;h3 id="特徴選択のバイアス"&gt;特徴選択のバイアス&lt;/h3&gt;
&lt;h4 id="みにくいアヒルの子の定理ugly-duckling-theorem"&gt;みにくいアヒルの子の定理（Ugly Duckling theorem）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;事前の知識や仮定がなければ、あらゆる物事は同程度に似ている（または異なっている）というもの&lt;/li&gt;
&lt;li&gt;つまり、特定の特徴や属性を重視するかどうかは、その特徴がどのように重要視されるか（または無視されるか）によって決まる&lt;/li&gt;
&lt;li&gt;つまり、特徴選択（Feature Selection）というバイアス（人間の主観性）によって、前提が決まると言う事を示している&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="学習のバイアス"&gt;学習のバイアス&lt;/h3&gt;
&lt;h4 id="inductive-bias"&gt;Inductive Bias&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;機械学習における学習アルゴリズムが、学習データから一般化する際に持つ、事前の仮定や傾向を指す&lt;/li&gt;
&lt;li&gt;別言い方だと、アルゴリズムが未知のデータに適用された際にどのような予測を行うかに影響を与える、アルゴリズム固有のバイアス&lt;/li&gt;
&lt;li&gt;inductive biasは過度な単純化や過学習（Overfitting）を起こす&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="データのバイアス"&gt;データのバイアス&lt;/h3&gt;
&lt;h4 id="不均衡データの問題"&gt;不均衡データの問題&lt;/h4&gt;
&lt;p&gt;データセット内の異なるクラス（カテゴリー）が非常に不均等な割合で存在する状態の事。&lt;/p&gt;
&lt;p&gt;例&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クレジットカードの不正使用検出のようなケースでは、&lt;/li&gt;
&lt;li&gt;不正なトランザクション（異常）は正常なトランザクションに比べて非常に少なく、データセットは不均衡になる&lt;/li&gt;
&lt;li&gt;この場合、単純な精度（Accuracy）だけでモデルを評価すると誤解を招く可能性がある&lt;/li&gt;
&lt;li&gt;なぜなら、モデルがすべてのトランザクションを「正常」と予測しても高い精度を示すから&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="オーバーサンプリングアンダーサンプリング"&gt;オーバーサンプリング、アンダーサンプリング&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;オーバーサンプリングは、少数派クラスのデータポイントを増やすことでクラス間の不均衡を解消する&lt;/li&gt;
&lt;li&gt;アンダーサンプリングは、多数派クラスのデータポイントを減らすことでバランスを取る&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="合成データ生成synthetic-data-generation"&gt;合成データ生成（Synthetic Data Generation）&lt;/h4&gt;
&lt;p&gt;主に次の3つの手法を利用する。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;データ拡張（Data Augmentation）&lt;/li&gt;
&lt;li&gt;GANsで生成&lt;/li&gt;
&lt;li&gt;統計的シミュレーション&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="試験者によるバイアス"&gt;試験者によるバイアス&lt;/h3&gt;
&lt;h4 id="ブラインド検査blind-testing"&gt;ブラインド検査（Blind Testing）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;主観的なバイアスを排除するための検査方法&lt;/li&gt;
&lt;li&gt;実験の被験者や評価者がどのサンプルや治療を受けているかを知らない状態で行う検査&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ランダム比較試験rct-randomized-controlled-trial"&gt;ランダム比較試験（RCT： Randomized Controlled Trial）&lt;/h4&gt;
&lt;p&gt;RCTは医学や心理学、教育学など多くの分野で用いられる、科学的な研究の手法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コアは被験者をランダムに対照群（コントロールグループ）と実験群（治療群または介入群）に割り当てること&lt;/li&gt;
&lt;li&gt;これにより、他の変数が結果に与える影響を最小限に抑え、介入の効果をより正確に評価することができる&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ランダムサンプリング"&gt;ランダムサンプリング&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;母集団からランダムサンプリングしないデータはbiasedなデータになる&lt;/li&gt;
&lt;li&gt;恣意的にデータを選択しないようにするため、分割や抽出はランダムに行う&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="その他"&gt;その他&lt;/h2&gt;
&lt;h3 id="野球と混合行列"&gt;野球と混合行列&lt;/h3&gt;
&lt;p&gt;野球と混合行列を考えるとわかりやすい。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;実際 \ 判定&lt;/th&gt;
&lt;th style="text-align: right"&gt;ストライク&lt;/th&gt;
&lt;th style="text-align: right"&gt;ボール&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ストライクゾーン&lt;/td&gt;
&lt;td style="text-align: right"&gt;True Positive (TP)&lt;/td&gt;
&lt;td style="text-align: right"&gt;False Negative (FN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボールゾーン&lt;/td&gt;
&lt;td style="text-align: right"&gt;False Positive (FP)&lt;/td&gt;
&lt;td style="text-align: right"&gt;True Negative (TN)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Recallを上げる
&lt;ul&gt;
&lt;li&gt;本当はストライクの球を見逃さない&lt;/li&gt;
&lt;li&gt;多少ボール球をストライクと言ってしまっても、ストライクを多く拾う方向&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Precisionを上げる
&lt;ul&gt;
&lt;li&gt;ストライクと言った球の正確さを上げる&lt;/li&gt;
&lt;li&gt;怪しい球はボールにして、本当にストライクの球だけをストライクと言う方向&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tp-fpなどの覚え方"&gt;TP FPなどの覚え方&lt;/h3&gt;
&lt;p&gt;TP/FPなどは、次のように考えると分かりやすい。&lt;/p&gt;
&lt;p&gt;予測が正しいかどうかで次の2つ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;True&lt;/li&gt;
&lt;li&gt;False&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;予測結果は次の2つ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Positive&lt;/li&gt;
&lt;li&gt;Negative&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それを組み合わせると次になる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TP // 正しくPositiveと予測（正解はPositive）&lt;/li&gt;
&lt;li&gt;FP // 間違ってPositiveと予測（正解はNegative）&lt;/li&gt;
&lt;li&gt;FN // 間違ってNegativeと予測（正解はPositive）&lt;/li&gt;
&lt;li&gt;TN // 正しくNegativeと予測（正解はNegative）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="accuracyとprevisionのトレードオフ"&gt;AccuracyとPrevisionのトレードオフ&lt;/h3&gt;
&lt;p&gt;下の図が一番わかりやすい。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accuracyは真値からの分布全体のズレ&lt;/li&gt;
&lt;li&gt;Precisionは分布のばらつき度合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-18.png"
width="720"
height="460"
srcset="https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-18_hu_c9df85a737b6bf51.png 480w, https://www.m1ke.org/p/%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/image-18_hu_bd1806d8ff4a60b5.png 1024w"
loading="lazy"
alt="精度と正確度"
class="gallery-image"
data-flex-grow="156"
data-flex-basis="375px"
&gt;&lt;/p&gt;
&lt;h3 id="算術平均と調和平均"&gt;算術平均と調和平均&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;調和平均（Harmonic Mean）
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;率&lt;/code&gt;の平均を算出するのに適している。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;算術平均（Arithmetic mean）
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;量&lt;/code&gt;の平均を算出するのに適している&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例：&lt;/p&gt;
&lt;p&gt;ある車が100キロメートルの距離を行く際には時速50キロメートル、
帰る際には時速100キロメートルで移動した時、往復の平均速度は何キロメートル/hか？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;算術平均 = $\frac{(50 + 100)}{2} = 75$&lt;/li&gt;
&lt;li&gt;調和平均 = $\frac{2}{\frac{1}{50}+\frac{1}{100}}=66.67$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="scikit-learn"&gt;Scikit-learn&lt;/h3&gt;
&lt;h4 id="利用するmatrixの関数"&gt;利用するMatrixの関数&lt;/h4&gt;
&lt;p&gt;混合行列を作る時に、scikit-learnではそれぞれ次の関数を使う。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;二値分類の場合：
&lt;ul&gt;
&lt;li&gt;sklearn.metrics.confusion_matrix()&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;多クラス分類の混同行列の場合：
&lt;ul&gt;
&lt;li&gt;sklearn.metrics.multilabel_confusion_matrix()関数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="scikit-learnでの例"&gt;Scikit-learnでの例&lt;/h4&gt;
&lt;p&gt;二値分類の場合のScikit-learnでの例。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.metrics&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;precision_score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recall_score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confusion_matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accuracy_score&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 関数定義&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;f_measure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;precision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;precision&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;precision&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サンプルデータの作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;y_true&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;y_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 適合率と再現率の計算&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;precision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;precision_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_pred&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;recall&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;recall_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_pred&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 混同行列の計算&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;confusion_matrix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_pred&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ravel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 特異値（Specificity）と誤答率（False Positive Rate, FPR）の計算&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;specificity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tn&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tn&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fpr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tn&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 正確度（Accuracy）の計算&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;accuracy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;accuracy_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_pred&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 重み（Fβスコアの場合）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;beta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# F値（Fβスコア）の計算結果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f_measure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;precision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;precision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;specificity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fpr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accuracy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2010/27/news020.html" target="_blank" rel="noopener"
&gt;第10回　機械学習の評価関数（二値分類用）の基礎を押さえよう：TensorFlow 2＋Keras（tf.keras）入門 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2103/04/news023.html#binarylogloss" target="_blank" rel="noopener"
&gt;第11回　機械学習の評価関数（二値分類／多クラス分類用）を理解しよう：TensorFlow 2＋Keras（tf.keras）入門 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=xw9BJ4M3GHA&amp;amp;ab_channel=NewsPicks%2F%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%BA%E3%83%94%E3%83%83%E3%82%AF%E3%82%B9" target="_blank" rel="noopener"
&gt;(12) 【続報】線虫がん検査は有効か。全国規模の調査開始。【HIROTSU社、反論文を公開】線虫くん／広津社長／がん検診／N-NOSE（解説：須田桃子） - YouTube&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2208/08/news034.html" target="_blank" rel="noopener"
&gt;［評価指標］混同行列（Confusion Matrix）とは？：AI・機械学習の用語辞典 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2208/17/news039.html" target="_blank" rel="noopener"
&gt;多クラス分類の混同行列（Confusion matrix for multi-class classification）とは？：AI・機械学習の用語辞典 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://wimukthimadhusanka85.medium.com/multi-label-classification-e259896182da" target="_blank" rel="noopener"
&gt;Multi-label Classification. For most of the classification… | by Wimukthi Madhusanka | Medium&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2007/30/news024.html" target="_blank" rel="noopener"
&gt;みにくいアヒルの子の定理（Ugly Duckling theorem）とは？：AI・機械学習の用語辞典 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2211/24/news019.html" target="_blank" rel="noopener"
&gt;［評価指標］AUC（Area Under the ROC Curve：ROC曲線の下の面積）とは？：AI・機械学習の用語辞典 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://scikit-learn.org/stable/modules/generated/sklearn.metrics.multilabel_confusion_matrix.html" target="_blank" rel="noopener"
&gt;sklearn.metrics.multilabel_confusion_matrix — scikit-learn 1.3.2 documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2010/27/news020.html" target="_blank" rel="noopener"
&gt;第10回　機械学習の評価関数（二値分類用）の基礎を押さえよう：TensorFlow 2＋Keras（tf.keras）入門 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2010/27/news020.html" target="_blank" rel="noopener"
&gt;第10回　機械学習の評価関数（二値分類用）の基礎を押さえよう：TensorFlow 2＋Keras（tf.keras）入門 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://glassboxmedicine.com/2019/02/17/measuring-performance-the-confusion-matrix/" target="_blank" rel="noopener"
&gt;Measuring Performance: The Confusion Matrix – Glass Box&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/2010/27/news020.html" target="_blank" rel="noopener"
&gt;第10回　機械学習の評価関数（二値分類用）の基礎を押さえよう：TensorFlow 2＋Keras（tf.keras）入門 - ＠IT&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://co-medical.mynavi.jp/contents/therapistplus/kokushi/drill/2155/" target="_blank" rel="noopener"
&gt;医療・介護・リハビリでの検査・測定データの読み方～尤度比とは | セラピストプラス | 医療介護・リハビリ・療法士のお役立ち情報&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://www.hitachi-hightech.com/jp/ja/knowledge/semiconductor/room/manufacturing/accuracy-precision.html" target="_blank" rel="noopener"
&gt;3. 正確度と精度 : 日立ハイテク&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>