私はこの本を読んでいます( NLTK )そして混乱しています。 エントロピーは として定義 :
エントロピーは、各ラベルの確率とその同じラベルの対数確率の合計です。
テキストマイニングに関して、エントロピーおよび最大エントロピーをどのように適用できますか?誰かが私に簡単で簡単な例(視覚的)を与えることができますか?
私はエントロピーが 決定木 の構築という文脈で言及されたと思います。
説明するために、 学習 から 分類 名への課題を男性/女性グループに想像してください。それはそれぞれm
かf
でラベル付けされた名前のリストを与えられて、私達はデータに適合しそして新しい目に見えないファーストネームの性別を予測するのに使用できる model を学びたいです。
name gender
----------------- Now we want to predict
Ashley f the gender of "Amro" (my name)
Brian m
Caroline f
David m
最初のステップは、データの 決定 何 特徴 _が予測したいターゲットクラスに関連していることです。いくつかの特徴の例が含まれます:最初/最後の文字、長さ、母音の数、それは母音で終わるのかなど。だから特徴抽出の後、私たちのデータは以下のようになります:
# name ends-vowel num-vowels length gender
# ------------------------------------------------
Ashley 1 3 6 f
Brian 0 2 5 m
Caroline 1 4 8 f
David 0 2 5 m
目標は 決定木 を構築することです。 tree の例は次のようになります。
length<7
| num-vowels<3: male
| num-vowels>=3
| | ends-vowel=1: female
| | ends-vowel=0: male
length>=7
| length=5: male
基本的に各ノードは単一の属性に対して実行されたテストを表し、テストの結果に応じて左右に移動します。クラス予測(m
またはf
)を含むリーフノードに到達するまで、ツリーをたどり続けます。
したがって、このツリーの下にAmroという名前を付けると、 "は長さ<7?"でテストされ、答えはyesになります。だから、私たちはその枝を下る。分岐に続いて、次のテスト「は母音の数<3?」は再びtrueと評価されます。これはm
というラベルの付いたリーフノードにつながります。したがって、予測はmaleです(これは偶然です。したがってツリーは結果 正しく )を予測しました。
デシジョンツリーは トップダウン方式で構築 ですが、問題は各ノードでどの属性をどのように分割するかを選択することです。その答えは、ターゲットクラスを可能な限り純粋な子ノード(つまり、男性と女性の両方が混在していないノード、クラスが1つだけの純粋ノード)に最適に分割する機能を見つけることです。
純度のこの尺度は 情報 と呼ばれます。これは、ノードに到達した例を考えると、新しいインスタンス(名)を男性に分類するか女性に分類するかを指定するのに必要な 予想 量の{ 情報 を表します。ノードの男性と女性のクラスの数に基づいて計算します。
一方、 エントロピー は、不純物の尺度です(反対)。これは、値a
/b
を持つ バイナリクラス に対して次のように定義されます。
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
この バイナリエントロピー関数 は下図に示されています(確率変数は2つの値のうちの1つを取ります)。確率がp=1/2
のときに最大になります。これは、p(X=a)=0.5
または同様のp(X=b)=0.5
が50%/ 50%の確率でa
またはb
であることを意味します(不確実性は最大です)。確率が完全な確実性を伴ってp=1
またはp=0
である場合、エントロピー関数は最小値がゼロです(それぞれp(X=a)=1
またはp(X=a)=0
、後者はp(X=b)=1
を意味します)。
もちろん、エントロピーの定義は、(2つだけではなく)N個の結果をもつ離散確率変数Xに対して一般化することができます。
(式の中のlog
は通常 2を底とする対数 )とみなされます)
名前分類のタスクに戻り、例を見てみましょう。ツリーを構築する過程のある時点で、次の分割を検討していたと想像してください。
ends-vowel
[9m,5f] <--- the [..,..] notation represents the class
/ \ distribution of instances that reached a node
=1 =0
------- -------
[3m,4f] [6m,1f]
ご覧のとおり、分割前に男性は9人、女性は5人、つまりP(m)=9/14
とP(f)=5/14
でした。エントロピーの定義によれば、
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403
次に、2つの子ブランチを見て、分割を考慮した後に計算されたエントロピーと比較します。 ends-vowel=1
の左の枝には、
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
そしてends-vowel=0
の右の枝には、
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
各ブランチのインスタンス数を weight factor (7つのインスタンスが左に、7つのインスタンスが右に移動)として左右のエントロピーを組み合わせ、分割後の最終エントロピーを取得します。
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885
分割前後のエントロピーを比較することで、 情報の増加 、または取得した情報量を測定します。その特定の機能を使用して分割を行う:
Information_Gain = Entropy_before - Entropy_after = 0.1518
上記の計算は次のように解釈できます。end-vowels
機能を使用して分割することで、サブツリー予測結果の不確実性をわずか0.1518( bits で測定)減らすことができました_ as 情報の単位 ).
ツリーの各ノードで、この計算はすべての特徴に対して実行され、最大の情報利得を持つ特徴が分割のために greedy のように選択されます(したがって、優先されます)。pureを生成する特徴は低い不確実性/エントロピーで分割されます)。このプロセスは、ルートノードから再帰的に適用され、リーフノードにすべて同じクラスを持つインスタンスが含まれると停止します(さらに分割する必要はありません)。
数値の機能 、 欠損値 、 過剰適合 の取り扱い方法も含め、この記事の範囲を超えているいくつかの 詳細 を飛ばしたことに注意してください。 _と 枝刈り 木など.
まず最初に、the measure of information
を理解することが最善です。
measure
しますか?ありそうもないことが起きたとき、それは大きなニュースだと私たちは言います。また、予測可能なことを言っても、それほど興味深いことではありません。そのため、このinteresting-ness
を定量化するために、関数は以下を満たす必要があります。
one bit
の情報が得られます。制約を満たす1つの自然な尺度は
I(X) = -log_2(p)
ここで、pはイベントX
の発生確率です。そして単位はbit
にあり、これはコンピュータが使用するのと同じビットです。 0または1.
フェアコインフリップ:
1コインフリップからどれだけの情報を得ることができますか?
答え:-log(p) = -log(1/2) = 1 (bit)
もし隕石が明日地球に衝突したらp=2^{-22}
そして私達は22ビットの情報を得ることができます。
もし太陽が明日になったら、p ~ 1
そしてそれは0ビットの情報です。
そのため、イベントY
のinteresting-ness
に期待するなら、それはエントロピーです。すなわち、エントロピーはイベントの興味のあることの期待値である。
H(Y) = E[ I(Y)]
より正式には、エントロピーはイベントの予想されるビット数です。
Y = 1:確率XでイベントXが発生
Y = 0:確率1-pでイベントXは発生しません
H(Y) = E[I(Y)] = p I(Y==1) + (1-p) I(Y==0)
= - p log p - (1-p) log (1-p)
すべてのログについて2を底とします。
私はあなたにグラフィックを与えることはできませんが、多分私は明確な説明を与えることができます。
たとえば、赤または緑のいずれかで毎日1回点滅するライトなどの情報チャネルがあるとします。それはどのくらいの情報を伝えますか?最初の推測は1日1ビットかもしれません。しかし、送信者に3つの選択肢があるように青を追加するとどうなりますか? 2のべき乗以外のものを扱うことができるが、それでも追加可能な情報の尺度が欲しいのですが(それでも可能なメッセージの数を2倍にする追加 1ビット)。私達は丸太を取ることによってこれをすることができる2(可能なメッセージの数)しかし、それはもっと一般的な方法があることがわかりました。
赤/緑に戻りましたが、赤の電球が切れたため(これは一般的な知識です)、ランプは常に緑に点滅する必要があります。そのチャンネルは今は役に立たない、(次のフラッシュがどうなるかはわかっている)==だからフラッシュは情報もニュースも伝えない。今私達は電球を修理しますが、赤い電球が連続して二度点滅しないかもしれないという規則を課します。ランプが赤く点滅したら、次のフラッシュがどうなるかわかります。このチャンネルでビットストリームを送信しようとすると、ビットよりも多くのフラッシュでエンコードする必要があることがわかります(実際には50%多くなります)。フラッシュのシーケンスを記述したい場合は、少ないビット数で記述できます。各フラッシュが独立している(コンテキストフリー)場合も同様ですが、緑のフラッシュは赤よりも一般的です。確率が高いほど、シーケンスを記述するのに必要なビットが少なくなり、含まれる情報が少なくなります。全緑色、電球焼損限度。
さまざまなシンボルの確率に基づいて、信号内の情報量を測定する方法があります。シンボルxを受け取る確率私 pです私その後、数量を検討してください
- log p私
小さいp私、この値が大きいほど。 xなら私 2倍の可能性が低くなると、この値は一定量増加します(log(2))。これはメッセージに1ビットを追加することをあなたに思い出させるはずです。
シンボルの意味がわからない場合(ただし、確率はわかっています)、さまざまな可能性を合計することで、この値の平均値、つまりいくらになるかを計算できます。
I = - &#931 p私 log(p私)
これが1回のフラッシュの情報内容です。
赤い電球が全焼しました:p赤 = 0、p緑= 1、I = 0 + 0)= 0 [...]赤と緑の等確率:p赤 = 1/2、pグリーン= 1/2、I = - (2×1 / 2×log(1/2))= log(2)[...]三色、等確率:p私= 1/3、I = - (3 * 1/3 * log(1/3) log(3) 緑と赤、2倍の確率で緑:p赤= 1/3、p緑= 2 / 3、I = - (1 / 3log(1/3)+ 2 / 3log(2/3))= log(3)−2 / 3log(2)[...
これは、メッセージの情報内容、つまりエントロピーです。異なるシンボルが等確率であるとき、それは最大です。あなたが物理学者ならあなたは自然のログを使います、あなたがコンピュータ科学者ならあなたはあなたのログを使います2 そしてビットを取得します。
私はあなたが情報理論、ベイジアン法とMaxEntについて読むことを本当にお勧めします。始める場所は、David Mackayによる、この(無料でオンラインで入手可能な)本です。
http://www.inference.phy.cam.ac.uk/mackay/itila/
これらの推論方法は単なるテキストマイニングよりもはるかに一般的であり、この本や他のMachine LearningやMaxEntベイズの入門書に含まれている一般的な基本を学ぶことなしにこれをNLPに適用する方法を学ぶことはできませんメソッド.
エントロピーと確率論の情報処理と保存との関連は、本当に、本当に深いです。それを味わうために、ノイズの多い通信チャネルを介してエラーなしで渡すことができる情報の最大量はノイズプロセスのエントロピーに等しいと述べるShannonによる定理があります。コンピュータのメモリを最小にするためにデータをどれだけ圧縮できるかを、データを生成したプロセスのエントロピーに結び付けるという定理もあります。
通信理論に関するこれらすべての定理について学び続ける必要はないと思いますが、エントロピーとは何か、計算方法、情報や推論との関係などについての基本を学ぶことなしにこれを学ぶことは不可能です。 ...
画像のエントロピーを計算するアルゴリズムを実装していたときに、これらのリンクを見つけました。 here および here を参照してください。
これは私が使用した疑似コードです。画像ではなくテキストで機能するように調整する必要がありますが、原則は同じでなければなりません。
//Loop over image array elements and count occurrences of each possible
//pixel to pixel difference value. Store these values in prob_array
for j = 0, ysize-1 do $
for i = 0, xsize-2 do begin
diff = array(i+1,j) - array(i,j)
if diff lt (array_size+1)/2 and diff gt -(array_size+1)/2 then begin
prob_array(diff+(array_size-1)/2) = prob_array(diff+(array_size-1)/2) + 1
endif
endfor
//Convert values in prob_array to probabilities and compute entropy
n = total(prob_array)
entrop = 0
for i = 0, array_size-1 do begin
prob_array(i) = prob_array(i)/n
//Base 2 log of x is Ln(x)/Ln(2). Take Ln of array element
//here and divide final sum by Ln(2)
if prob_array(i) ne 0 then begin
entrop = entrop - prob_array(i)*alog(prob_array(i))
endif
endfor
entrop = entrop/alog(2)
私はどこかからこのコードを入手しました、しかし私はリンクを掘ることができません。
エントロピーは情報または知識の利用可能性であり、情報の欠如は高いエントロピー(テキストマイニングにおける次の単語予測)である将来の予測を困難にし、情報/知識の利用可能性は私たちにもっと現実的な予測に役立つ未来の低エントロピー.
どのような種類の関連情報でもエントロピーが減少し、より現実的な未来を予測するのに役立ちます。つまり、 "meat"という単語が文中に存在するか、または "meat"という単語が存在しない可能性があります。これはと呼ばれますInformation Gain
エントロピーは予測可能性の順序の欠如です
NLTKについての本を読んでいると、MaxEnt Classifier Moduleについて読んでいるのがおもしろいでしょう http://www.nltk.org/api/nltk.classify.html#module-nltk.classify.maxent
テキストマイニング分類の場合、ステップは次のようになります。前処理(トークン化、スチーム処理、情報取得による機能選択...)、数値への変換(頻度またはTF-IDF)(これは使用時に理解する重要な手順だと思います)数値のみを受け入れるアルゴリズムへの入力としてテキストを入力してからMaxEntで分類します。これは単なる例です。