陜西省建設(shè)網(wǎng)官方網(wǎng)站seo搜索引擎優(yōu)化總結(jié)報(bào)告
系列文章目錄
提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 系列文章目錄
- 前奏
- 例子
- 硬幣
- 垃圾郵件
- 代碼
前奏
【機(jī)器學(xué)習(xí)】6 ——最大熵模型
例子
硬幣
假設(shè)我們有一枚硬幣,可能是公平的,也可能是不公平的。我們的任務(wù)是估計(jì)硬幣的正反面出現(xiàn)的概率。我們已知硬幣有兩個(gè)面:正面(H)和反面(T),除此之外沒有其他信息。因此,我們希望在不引入不必要假設(shè)的情況下,找到最合理的概率分布。
當(dāng)我們沒有任何關(guān)于硬幣的額外信息時(shí),我們唯一知道的是硬幣只有兩個(gè)面(H 和 T)?;谧畲箪卦瓌t,我們希望選擇最“隨機(jī)”或最“均勻”的概率分布。在這種情況下,最合理的分布是:
P(H) = 0.5
P(T) = 0.5
這是因?yàn)殪氐淖畲蠡馕吨覀冞x擇的是最不確定的分布,即每種可能性是等概率的。
對于兩個(gè)事件 H 和 T:
H( p)=?[p(H)logp(H) + p(T)logp(T)]
代入 P(H) = 0.5 和 P(T) = 0.5:
H( p)=?[0.5log0.5+0.5log0.5] =?[0.5×(?1)+0.5×(?1)]=1
這是在沒有任何其他信息時(shí),熵最大的分布,表示正反面各有 50% 的概率。
假設(shè)我們現(xiàn)在有額外的信息,例如在 10 次投擲中正面出現(xiàn)了 7 次,反面出現(xiàn)了 3 次。我們不再假設(shè)正反面等概率。
我們需要在這個(gè)額外信息(正面出現(xiàn)更多次)和熵最大化之間找到平衡。最大熵模型會根據(jù)這個(gè)信息調(diào)整概率分布,但仍然保持最大的熵。
約束條件:正面出現(xiàn)的頻率為 7/10,即我們期望: E(H)=0.7
拉格朗日乘數(shù)法:我們引入拉格朗日乘數(shù)來最大化熵,同時(shí)滿足上述的約束條件。我們最大化以下目標(biāo)函數(shù):L ( p)=?[p(H)logp(H)+p(T)logp(T)]+λ(p(H)?0.7)
通過求導(dǎo)并解方程,可以得到新的概率分布 P(H)=0.7 和 P(T)=0.3,這符合已知數(shù)據(jù)的約束條件,同時(shí)盡量保持熵的最大化。
垃圾郵件
- 訓(xùn)練數(shù)據(jù):
假設(shè)我們有以下幾封郵件,并且每封郵件已經(jīng)標(biāo)注為垃圾郵件(Spam)或非垃圾郵件(Not Spam):
郵件1 (Spam): “Win a million dollars now”
郵件2 (Not Spam): “Meeting at 3 PM today”
郵件3 (Spam): “Congratulations! You have won a free gift”
郵件4 (Not Spam): “Project update attached”
- 特征提取:
首先,從每封郵件中提取特征(即單詞)。在這個(gè)例子中,我們的特征是郵件中的單詞。例如:
“Win”, “million”, “dollars”, “now”, “Meeting”, “project” 等等。
我們可以將每封郵件轉(zhuǎn)化為一個(gè)包含特征的向量:
- 郵件1:[“Win”, “million”, “dollars”, “now”]
- 郵件2:[“Meeting”, “3”, “PM”, “today”]
- 郵件3:[“Congratulations”, “You”, “won”, “free”, “gift”]
- 郵件4:[“Project”, “update”, “attached”]
標(biāo)簽:
郵件1 -> Spam (1)
郵件2 -> Not Spam (0)
郵件3 -> Spam (1)
郵件4 -> Not Spam (0)
-
最大熵模型的目標(biāo):
模型的目標(biāo)是根據(jù)訓(xùn)練數(shù)據(jù)估計(jì)每封郵件屬于垃圾郵件(Spam)或非垃圾郵件(Not Spam)的概率。為了最大化模型的熵,我們引入約束條件,比如已知郵件中出現(xiàn)某些單詞時(shí)其分類的概率。 -
訓(xùn)練過程:
我們用最大熵模型來訓(xùn)練這些數(shù)據(jù)。模型根據(jù)郵件中的單詞(特征)以及歷史郵件的分類信息,計(jì)算每個(gè)單詞在垃圾郵件和非垃圾郵件中的條件概率。
如果"win"這個(gè)單詞在訓(xùn)練集中大多數(shù)時(shí)候出現(xiàn)在垃圾郵件中,模型會為"win"分配一個(gè)較高的垃圾郵件概率。
如果"meeting"這個(gè)單詞大多數(shù)時(shí)候出現(xiàn)在非垃圾郵件中,模型會為它分配一個(gè)較高的非垃圾郵件概率。
- 特征是獨(dú)立的,通常通過詞袋模型(Bag of Words)或 TF-IDF(詞頻-逆文檔頻率)方法將文本轉(zhuǎn)換為數(shù)值表示。
- 在這個(gè)例子中,特征提取可以使用詞袋模型。對于每封郵件,提取其中的單詞并將其表示為一個(gè)向量。例如:
郵件1(“Win a million dollars now”)轉(zhuǎn)換為 [1, 0, 0, 1, 0…],其中每個(gè)位置代表一個(gè)單詞的出現(xiàn)次數(shù)。
郵件2(“Meeting at 3 PM today”)轉(zhuǎn)換為 [0, 1, 0, 0, 1…],同樣代表單詞出現(xiàn)的頻率。
- 分類預(yù)測:
當(dāng)有一封新郵件出現(xiàn)時(shí),例如 “Free gift awaiting you”, 最大熵模型會計(jì)算它屬于垃圾郵件和非垃圾郵件的概率:
P(Spam | “Free gift awaiting you”) = ?
P(Not Spam | “Free gift awaiting you”) = ?
代碼
這個(gè)很簡單,復(fù)雜問題可能要考慮更多
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression# 訓(xùn)練樣本數(shù)據(jù)
emails = ["Win a million dollars now", "Meeting at 3 PM today","Congratulations! You have won a free gift", "Project update attached"]# 標(biāo)簽:1表示垃圾郵件,0表示非垃圾郵件
labels = [1, 0, 1, 0]# 特征提取:使用詞袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)# 最大熵模型近似:使用邏輯回歸實(shí)現(xiàn)
model = LogisticRegression()
model.fit(X, labels)# 測試新郵件
new_emails = ["Free gift awaiting you", "Meeting tomorrow"]
X_new = vectorizer.transform(new_emails)# 預(yù)測
predictions = model.predict(X_new)
print("預(yù)測結(jié)果:", predictions) # 輸出預(yù)測類別:1 表示垃圾郵件,0 表示非垃圾郵件# 計(jì)算每類概率
probs = model.predict_proba(X_new)
print("分類概率:", probs) # 輸出每封郵件屬于垃圾郵件和非垃圾郵件的概率