本のプログラミングコレクティブインテリジェンスの決定ツリーに関する質問
-
16-10-2019 - |
質問
私は現在、本「プログラミングコレクティブインテリジェンス」の第7章(「意思決定ツリーを使用したモデリング」)を勉強しています。
関数の出力を見つけます mdclassify()
p.157混乱。この関数は、欠落データを扱います。提供されている説明は次のとおりです。
私が理解していることから、インスタンスはブランチ間で分割されます。
したがって、私は単に私たちがどのように取得できるか理解していません:
{'None': 0.125, 'Premium': 2.25, 'Basic': 0.125}
なので 0.125+0.125+2.25
1も整数も合計しません。新しい観測はどのように分割されましたか?
コードはこちらです:
https://github.com/arthur-e/programming-collective-intelligence/blob/master/chapter7/treepredict.py
元のデータセットを使用して、ここに示すツリーを取得します。
誰かが私に正確に何を意味するのか、そしてそれらが正確にどのように得られたのかを正確に説明してもらえますか?
PS:本の最初の例は、彼らのerrataページで説明されているように間違っていますが、2番目の例(上記)を説明するだけでいいでしょう。
解決
4つの機能があります。
- 参照者、
- 位置、
- よくある質問、
- ページ。
あなたの場合、あなたはどこでインスタンスを分類しようとしています FAQ
と pages
不明: mdclassify(['google','France',None,None], tree)
.
最初の既知の属性はあるので google
, 、あなたの決定ツリーでは、あなたは出てくるエッジにのみ興味があります google
右側のノード。
5つのインスタンスがあります。3つのラベルが付けられています Premium
, 、ラベルが付けられています Basic
そして1つはラベル付けされています None
.
ラベル付きのインスタンス Basic
と None
に分割します FAQ
属性。それらの2つがあるので、それらの両方の重量は 0.5
.
今、私たちはそれに分割します pages
属性。 3つのインスタンスがあります pages
値が20を超え、2つが大きくなります pages
値は20以下です。
ここにトリックがあります:これらの2つの重みがから変更されたことはすでに知っています 1
に 0.5
各。そのため、3つのインスタンスが重み付けされています 1
それぞれ、2つのインスタンスが重み付けされています 0.5
各。したがって、合計値はです 4
.
これで、重みを数えることができます pages
属性:
- pages_larger_than_20 = 3/4
- pages_not_larger_than_20 = 1/4#1 is:0.5 + 0.5
すべての重みが帰属します。これで、重みにインスタンスの「周波数」を掛けることができます(それを思い出してください Basic
と None
「頻度」は今です 0.5
):
Premium
:3 * 3/4 = 2.25
#3つあるからですPremium
インスタンス、各重み付け0.75
;Basic
:0.5 * 1/4 = 0.125
# なぜならBasic
今です0.5
, 、そして分割pages_not_larger_than_20
は1/4
None
:0.5 * 1/4 = 0.125
#同様に
それは少なくとも数字がどこから来たのかです。このメトリックの最大値と、それが1に合計すべきかどうかについてのあなたの疑問を共有しますが、これらの数字がどこから来るのかがわかったので、それらを正常化する方法を考えることができます。