赞
踩
贝叶斯定理可以解释为:在已知事件 ( B ) 发生的情况下,通过事件 ( A ) 和 ( B ) 之间的关系来计算事件 ( A ) 发生的概率。即
[ P(A|B)=\frac{P(B|A) \cdot P(A)}{P(B)} ]
其中:
这个公式对于分类问题中的特征与类别之间的关系推断非常有用,例如在朴素贝叶斯分类器中用于计算给定特征情况下某一类别出现的概率。要使用 Python 实现一个简单的朴素贝叶斯分类器,主要思路为:
示例代码如下:
import re from collections import defaultdict class NaiveBayesClassifier: def __init__(self): self.class_probabilities = defaultdict(float) self.feature_probabilities = defaultdict(lambda: defaultdict(float)) def tokenize_text(self, text): # 分词函数 words = re.findall(r'\b\w+\b', text.lower()) return set(words) def train(self, documents, labels): # 训练朴素贝叶斯分类器 total_documents = len(documents) unique_labels = set(labels) # 计算类别的先验概率 for label in unique_labels: label_count = labels.count(label) self.class_probabilities[label] = label_count / total_documents # 计算特征的条件概率 for i in range(total_documents): document = documents[i] label = labels[i] tokens = self.tokenize_text(document) for token in tokens: self.feature_probabilities[label][token] += 1 # 归一化特征概率 for label in unique_labels: total_tokens = sum(self.feature_probabilities[label].values()) for token in self.feature_probabilities[label]: self.feature_probabilities[label][token] /= total_tokens def predict(self, document): tokens = self.tokenize_text(document) # 计算类别的似然概率 scores = defaultdict(float) for label in self.class_probabilities: scores[label] = sum([self.feature_probabilities[label].get(token, 0) for token in tokens]) scores[label] += self.class_probabilities[label] # 返回概率最大的类别 return max(scores, key=scores.get) # 示例用法 documents = [ "这是一个正面的例子", "这是一个负面的例子", "这是另一个正面的例子", "这是另一个负面的例子", ] labels = ["正面", "负面", "正面", "负面"] classifier = NaiveBayesClassifier() classifier.train(documents, labels) new_document = "这是一个测试文档,希望分类器能够正确预测" predicted_label = classifier.predict(new_document) print(f"预测的类别为:{predicted_label}")
上述代码实现了一个简单的朴素贝叶斯文本分类器,其中tokenize_text
函数用于分词,train
方法训练模型并计算类别和特征概率,而predict
方法利用训练好的模型对新文档进行分类预测。
请注意:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。