私はこの本(NLTK)を読んでいて、混乱しています。 エントロピーは次のように定義されます。
エントロピーは、各ラベルの確率とその同じラベルの対数確率の合計です
テキストマイニングに関してエントロピーと最大エントロピーをどのように適用できますか?誰かが私に簡単でシンプルな例(ビジュアル)を教えてくれますか?
私はこの本(NLTK)を読んでいて、混乱しています。 エントロピーは次のように定義されます。
エントロピーは、各ラベルの確率とその同じラベルの対数確率の合計です
テキストマイニングに関してエントロピーと最大エントロピーをどのように適用できますか?誰かが私に簡単でシンプルな例(ビジュアル)を教えてくれますか?
回答:
エントロピーは意思決定ツリーの構築のコンテキストで言及されたと思います。
例として、名を男性/女性のグループに分類する学習のタスクを想像してください。これには、またはのいずれかでラベルが付けられた名前のリストが与えられ、データに適合するモデルを学習して、目に見えない新しい名の性別を予測するために使用できます。m
f
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
目標は、決定木を構築することです。ツリーの例は次のとおりです。
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という名前を実行する場合、「is the length <7?」というテストを開始し、答えはyesなので、そのブランチに進みます。分岐に続いて、次のテスト「is the number of vowels <3?」は再びtrueと評価されます。これはとラベル付けされた葉ノードにつながりm
、したがって予測は男性です(たまたまそうなので、ツリーは結果を正しく予測しました)。
ディシジョンツリーはトップダウン方式で作成されますが、問題は、各ノードで分割する属性をどのように選択するかです。その答えは、ターゲットクラスを可能な限り純粋な子ノードに最適に分割する機能を見つけることです(つまり、クラスが1つだけの純粋なノードではなく、男性と女性の両方の混合を含まないノード)。
この純度の尺度は、情報と呼ばれます。これは、ノードに到達した例を考えると、新しいインスタンス(名)を男性または女性に分類する必要があるかどうかを指定するために必要となると予想される情報量を表します。ノードでの男性クラスと女性クラスの数に基づいて計算します。
一方、エントロピーは不純物の測定値です(反対)。それはのために定義されたバイナリクラスの値を持つa
/b
のように:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
このバイナリエントロピー関数を下の図に示します(ランダム変数は2つの値のいずれかをとることができます)。確率がのときに最大に達します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
)の最小ゼロになります。
もちろん、エントロピーの定義は、N個の結果(2つだけではない)を持つ離散確率変数Xに対して一般化できます。
名前分類のタスクに戻り、例を見てみましょう。ツリーを構築するプロセスのある時点で、次の分割を検討していたとします。
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
各ブランチのインスタンス数を重み係数として使用して左/右のエントロピーを組み合わせ(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(情報の単位としてビットで測定)だけ小さくすることができました。
ツリーの各ノードで、この計算はすべてのフィーチャに対して実行され、最大の情報ゲインを持つフィーチャが貪欲な方法で分割に選択されます(したがって、不確実性/エントロピーが低い純粋な分割を生成するフィーチャが優先されます)。このプロセスはルートノードから再帰的に適用され、リーフノードにすべて同じクラスのインスタンスが含まれる場合に停止します(さらに分割する必要はありません)。
数値機能の処理方法、欠損値、ツリーの過剰適合と枝刈りなど、この投稿の範囲を超える詳細をスキップしたことに注意してください。
まず、理解するのが一番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ビットの情報です。
つまりinteresting-ness
、イベントの期待に応えればY
、それはエントロピーです。つまり、エントロピーは、イベントの面白さの期待値です。
H(Y) = E[ I(Y)]
より正式には、エントロピーはイベントの予想されるビット数です。
Y = 1:確率pでイベントXが発生
Y = 0:イベントXは確率1-pで発生しません
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ビットかもしれません。しかし、青を追加して、送信者に3つのオプションがある場合はどうでしょうか。2の累乗以外のものを処理できるが、それでも加法的(可能なメッセージの数に2を掛ける方法は 1ビットを追加する方法)である情報の測定値が欲しいです。ログ2(可能なメッセージの数)を取ることでこれを行うことができますが、より一般的な方法があることがわかります。
赤/緑に戻ったが、ランプが常に緑色に点滅する必要があるように、赤い電球が切れた(これは一般的な知識です)とします。これでチャンネルは役に立たなくなりました。次のフラッシュがどうなるかはわかっています。フラッシュは情報もニュースも伝えません。ここで電球を修理しますが、赤い電球が2回続けて点滅しないようにするという規則を課します。ランプが赤く点滅すると、次のフラッシュが何になるかがわかります。このチャネルでビットストリームを送信しようとすると、ビット数よりも多くのフラッシュ(実際には50%多い)でエンコードする必要があることがわかります。また、フラッシュのシーケンスを記述したい場合は、少ないビット数で記述できます。同じことが各フラッシュが独立している(コンテキストフリー)場合にも当てはまりますが、緑のフラッシュは赤よりも一般的です。確率を歪めると、シーケンスを記述するために必要なビットが少なくなり、含まれる情報が少なくなります。全緑、電球切れの制限。
さまざまなシンボルの確率に基づいて、信号内の情報量を測定する方法があることがわかります。シンボルx iを受信する確率がp iの場合、数量を考慮
-log p i
p iが小さいほど、この値は大きくなります。x iが2倍になる可能性が低い場合、この値は一定量増加します(log(2))。これは、メッセージに1ビットを追加することを思い出させるはずです。
シンボルがわからない(確率はわかっている)場合は、さまざまな可能性を合計して、この値の平均を計算できます。
I =-Σp i log(p i)
ワンフラッシュ内の情報内容です。
赤色の電球が切れた場合:p 赤 = 0、p 緑 = 1、I =-(0 + 0)= 0 赤と緑の確率:p 赤 = 1/2、p 緑= 1/2、I =-(2 * 1/2 * log(1/2))= log(2) 3色、等確率:p i = 1/3、I =-(3 * 1/3 * log(1/3))= log(3) 緑と赤、緑は2倍の可能性:p 赤 = 1/3、p 緑 = 2/3、I =-(1/3 log(1/3)+ 2/3 log(2/3))= log( 3)-2/3ログ(2)
これは、メッセージの情報コンテンツ、つまりエントロピーです。異なるシンボルが等確率であるときに最大になります。物理学者であれば自然対数を使用し、コンピュータ科学者であれば対数2を使用してビットを取得します。
情報理論、ベイズ法、MaxEntについて読むことをお勧めします。開始する場所は、David Mackayによるこの(オンラインで無料で入手できる)本です。
http://www.inference.phy.cam.ac.uk/mackay/itila/
これらの推論方法はテキストマイニングよりもはるかに一般的であり、この本または機械学習とMaxEntベイジアンに関する他の入門書に含まれている一般的な基本のいくつかを学習せずに、これをNLPに適用する方法を学ぶ方法を実際に考案することはできませんメソッド。
エントロピーと確率理論の情報処理と保存への関係は、非常に深いものです。それを味わうために、ノイズのある通信チャネルを介してエラーなしに渡すことができる情報の最大量はノイズプロセスのエントロピーに等しいとシャノンによる定理があります。また、データを圧縮してコンピューターの最小メモリを占有できる量を、データを生成したプロセスのエントロピーに結び付ける定理もあります。
コミュニケーション理論の定理をすべて学ぶ必要はないと思いますが、エントロピーとは何か、計算方法、情報と推論との関係などについての基礎を学ばなければ、これを学ぶことはできません。 ...
画像のエントロピーを計算するアルゴリズムを実装していたときに、これらのリンクが見つかりました。こことここを参照してください。
これは私が使用した疑似コードであり、画像ではなくテキストで機能するように適応させる必要がありますが、原則は同じです。
//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)
どこかからこのコードを入手しましたが、リンクを掘り出すことができません。
エントロピーは情報または知識の可用性であり、情報の欠如は高エントロピーである未来の予測を困難にし(テキストマイニングにおける次の単語の予測)、情報/知識の可用性は未来のより現実的な予測(低エントロピー)に役立ちます。
あらゆる種類の関連情報はエントロピーを減らし、より現実的な未来を予測するのに役立ちます。その情報は、「肉」という単語が文に存在するか、「肉」という単語が存在しない可能性があります。これは情報獲得と呼ばれます
エントロピーは予測可能性の順序の欠如です
NLTKについての本を読んでいるときに、MaxEnt Classifier Moduleについて読んでみると興味深いでしょう。http: //www.nltk.org/api/nltk.classify.html#module-nltk.classify.maxent
テキストマイニングの分類の手順は次のとおりです。前処理(トークン化、スチーミング、情報ゲインによる機能選択...)、数値への変換(頻度またはTF-IDF)(これは、使用するときに理解する重要な手順だと思います)数値のみを受け入れるアルゴリズムへの入力としてのテキスト)、次にMaxEntで分類します。これは単なる例です。