はじめに
[第2版]Python機械学習プログラミングの89ページで間違いと思われる箇所を見つけましたが,認められなかったのでここに書きます.
技術に関する内容ではなく,どちらかといえば日本語に関する内容です.
(追記)間違いではありませんでした.
本文
間違いだと思われる箇所を引用します.(間違いだと思われる箇所は太字にしてあります)
決定木学習の情報利得の文脈でエントロピーに関する話です.
$p(i \mid t)$ は,特定のノード $t$ においてクラス $i$ に属するサンプルの割合を表す.したがって,ノードのサンプルがすべて同じクラスに属している場合,エントロピーは0である.たとえば二値分類においてエントロピーが0になるのは,$p(i=1 \mid t)=1$ または $\mathbf{p(i=0 \mid t)=0}$ の場合である.エントロピーが最大になるのは,各クラスが一様に分布している場合である.二値分類でエントロピーが1になるのは,クラスが$p(i=1 \mid t)=0.5$ および $p(i=0 \mid t)=0.5$で一様に分布している場合である.
間違っていると思った理由を説明します.
二値分類において,エントロピーが0になる場合は2通りあります.
- $p(i=1 \mid t)=1$ および $p(i=0 \mid t)=0$
- $p(i=1 \mid t)=0$ および $p(i=0 \mid t)=1$
二値分類において,エントロピーが1になる場合は1通りあります.
- $p(i=1 \mid t)=0.5$ および $p(i=0 \mid t)=0.5$
以上のことを踏まえると,著者は「 $p(i=1 \mid t)=1$ および $p(i=0 \mid t)=0$ または $p(i=1 \mid t)=0$ および $p(i=0 \mid t)=1$ 」を省略して,「 $p(i=1 \mid t)=1$ または $p(i=1\mid t)=0$ 」と書きたかったのではないかと思いました.
ですので,この文章の,$p(i=0 \mid t)=0$ は $p(i=1 \mid t)=0$ の間違いだとサポートにメールを送ったのですが,認められませんでした.
返信メールの回答部分を抜粋します.
p.89におきまして、式3.6.3下の本文に下記の記述があります。
------------------
したがって、ノードのサンプルがすべて同じクラスに属している場合、エントロピーは 0 である。たとえば二値分類においてエントロピーが 0になるのは、p( i = 1 | t ) = 1 または p( i = 0 | t ) = 0 の場合である。
------------------
「たとえば」からはじまる上の2文目では、「エントロピーが 0 になる」ケースを取り上げたものかと思います。監注35でも「p( i =1 | t)=1 のときは p( i =0 | t)=0 となり」と記載しており、これは上の2文目と同じケースであると考えられます。
また、監注35では、別のケースとして「p( i =1 | t)=0 のときは p( i =0 | t)=1となり」も取り上げています。
最初に引用した部分にあるように,回答の引用文の前文でエントロピーが0になるという話をしているのだから,この「たとえば」は明らかに「二値分類」にかかっています.ですのでこの回答に納得がいかず,再度問い合わせをしたのですが,返信はありませんでした.
最後に
私の理解が間違ってるなどありましたらコメント欄におねがいします.精進いたします.
追記
コメント欄で第1版の原著をのせていただいて,怪しいですが納得がいったので追記します.
$p(i=1 \mid t)=1$ または $p(i=0 \mid t)=0$ と$p(i=1 \mid t)=0.5$ および $p(i=0 \mid t)=0.5$ どちらも同じ式を言い換えただけなのになぜ「または」,「および」と別の接続詞を使用しているのか.
原著だとそれぞれ「or」と「and」を使用しているので,論理で考えた時に,A or B とA and B はAとBが等しい時にどちらも同じ値を出力します.(ベン図でイメージしたほうがわかりやすいかもしれません)
A | B | A or B | A and B |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
つまりAとBが同値関係にあるなら,「AまたはB」でも「AおよびB」でもどちらでも良い.
しかし論理と言葉は違うものだから,納得のいっていない部分もあります.
追記2
回答メールが1ヶ月後に返ってきたので追記
回答部分を抜粋して引用
該当箇所の原文は、次のように記載されており、
原文どおりに翻訳しています。
(原著 p.91)
For example, in a binary class setting, the entropy is 0 if p(i=1|t)
=1 or p(i=0|t) =0. If the classes are distributed uniformly with
p(i=1|t) =0.5 and p(i=0|t) =0.5, the entropy is 1.
原文の意図を読み取るとすると、p(i=1|t)=1またはp(i=0|t)=0では、1と0が異なる値なのでor、
p(t=1|t)=0.5およびp(i=0|t)=0.5では、0.5と0.5が同じ値なのでandを使ったように見えます。
それ以上の意図は読み取れませんでした。
英語の成績は良くないので自信を持って言えないのですが,andとorは形式的な使い分けをする単語ではないと思います.
そんな意図を込めたとは思えません.
ですのでこれにも納得がいきません.