一、樸素貝葉斯基礎
樸素貝葉斯是一種基於貝葉斯定理的算法,用於分類和預測。貝葉斯定理是一種計算條件概率的方法,即已知某些條件下,某事件發生的概率,求某條件下另一事件發生的概率。樸素貝葉斯假設條件之間相互獨立,從而簡化了計算。在分類問題中,樸素貝葉斯計算一個樣本屬於某個類別的概率,選擇概率最大的類別作為該樣本所屬的類別。
二、樸素貝葉斯算法流程
樸素貝葉斯算法分為訓練和預測兩個階段。
訓練階段:
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