一、樸素貝葉斯基礎
樸素貝葉斯是一種基於貝葉斯定理的算法,用於分類和預測。貝葉斯定理是一種計算條件概率的方法,即已知某些條件下,某事件發生的概率,求某條件下另一事件發生的概率。樸素貝葉斯假設條件之間相互獨立,從而簡化了計算。在分類問題中,樸素貝葉斯計算一個樣本屬於某個類別的概率,選擇概率最大的類別作為該樣本所屬的類別。
二、樸素貝葉斯算法流程
樸素貝葉斯算法分為訓練和預測兩個階段。
訓練階段:
def train(train_data):
"""
訓練函數
:param train_data: 訓練集
"""
class_list = [i[-1] for i in train_data] # 類別列表
class_count = Counter(class_list) # 統計每個類別的數量
prior_prob_dict = {} # 存儲每個類別的先驗概率
for key in class_count:
# 計算每個類別的先驗概率
prior_prob_dict[key] = class_count[key] / len(class_list)
word_dict_list = [] # 存儲每個類別中每個單詞出現的次數
for key in class_count:
temp_data = [i for i in train_data if i[-1] == key] # 提取當前類別的數據
word_dict = Counter([j for i in temp_data for j in i[:-1]]) # 統計當前類別中每個單詞的數量
word_dict_list.append({key: word_dict})
return prior_prob_dict, word_dict_list
預測階段:
def classify(test_data, prior_prob_dict, word_dict_list):
"""
分類函數
:param test_data: 測試數據
:param prior_prob_dict: 每個類別的先驗概率
:param word_dict_list: 每個類別中每個單詞出現的次數
"""
score_dict = {} # 存儲每個類別的得分
for key in prior_prob_dict:
# 計算當前類別的條件概率
word_dict = word_dict_list[key][key]
score = prior_prob_dict[key]
for word, count in test_data.items():
score *= (word_dict[word] + 1) / (sum(word_dict.values()) + len(test_data))
score_dict[key] = score
return max(score_dict, key=score_dict.get)
三、樸素貝葉斯的優缺點
優點:
1、樸素貝葉斯模型簡單,算法快速。
2、樸素貝葉斯分類器對處理高維、數據量大的數據具有較好的效果。
3、對於缺失數據的情況,樸素貝葉斯算法可以有效處理。
缺點:
1、樸素貝葉斯算法假設特徵之間相互獨立,但實際應用中不一定成立。
2、如果某個特徵在訓練集中沒有出現過,會導致條件概率為0的情況,需要進行平滑處理。
3、樸素貝葉斯算法適用於多分類問題,但對於二分類問題,其表現可能不如其他更為複雜的算法。
四、樸素貝葉斯的應用
樸素貝葉斯算法在文本分類、垃圾郵件過濾、情感分析等領域得到廣泛應用。下面以文本分類為例,介紹樸素貝葉斯算法應用。
代碼示例:
# 加載數據
data = []
with open('content.txt', 'r', encoding='utf-8') as f:
for line in f:
content, label = line.strip().split('\t')
data.append((content, label))
# 劃分訓練集和測試集
train_data = data[:8000]
test_data = data[8000:]
# 訓練模型
prior_prob_dict, word_dict_list = train(train_data)
# 測試模型
correct_num = 0
for content, label in test_data:
test_dict = Counter(content.split())
predict_label = classify(test_dict, prior_prob_dict, word_dict_list)
if predict_label == label:
correct_num += 1
print('Accuracy:', correct_num / len(test_data))
五、小結
本文從樸素貝葉斯基礎入手,對其算法流程、優缺點進行了詳細闡述,並以文本分類為例進行了代碼實現。樸素貝葉斯算法簡單、快速,適用於多分類、高維數據的問題。但其假設特徵相互獨立的前提不一定成立,需要具體問題具體分析。樸素貝葉斯算法在文本分類、垃圾郵件過濾、情感分析等領域應用廣泛。
原創文章,作者:GMEZR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372737.html
微信掃一掃
支付寶掃一掃