恭喜你能坚持看到这一小节的内容!!
按照惯例,在开始基础知识之前,把这些知识点串起来,如果希望先学习一下基础知识,建议先到后面去看看~
小帅:最近在帮他的女神“参谋”一个男生。他跑来问我:“听说那男生是个程序员,体型有点超重,还爱穿格子衬衫——你根据这些信息快速判断一下,我女神会喜欢他这类型吗?”
这不就是典型的概率判断问题,而解决这类问题的利器,就叫“朴素贝叶斯”。咱们来一步步拆解你这个“顾问”工作。
首先,你得有历史数据,对吧?比如,咱们知道女神过去接触过77个男生,其中44个是她明确表示过好感的,33个是无感或反感的。
第一步,先理解“条件概率”。 你想知道的是,在“女神喜欢”的这个圈子里,程序员的比例有多高?咱们一数,44个她喜欢的人里,有22个是程序员。所以,单看“职业”这一条,P(程序员 | 喜欢) = 22/44 = 0.5。这个“|”竖线就读作“在…条件下”,条件概率就是先把范围缩小到某个特定情况里再算比例。
但你的问题更复杂,是多个条件组合在一起。 你想知道的是“在他是程序员‘且’超重‘且’爱穿格子衫的条件下,女神喜欢他的概率”。这就要用到“联合概率”了,就是把几个条件同时发生的概率凑在一起。
直接算这种组合概率很麻烦,数据少的时候根本算不出来。这时候,“朴素贝叶斯”的“朴素”二字就闪亮登场了。它做了一个非常大胆、甚至有点“天真”的假设:它认为“是不是程序员”、“体型超不超重”、“爱不爱穿格子衫”这几件事之间是完全没有关系的,是相互独立的。
这个假设在现实中当然不完全正确(比如大家可能会觉得程序员和爱穿格子衫有点关联),但正是这个“朴素”的假设,让计算变得无比简单。既然它们独立,那么联合概率就可以拆开成一个个单独概率的乘积。这就好办多了,我们不用去找“既是程序员又超重又爱穿格子衫”的稀有物种,只需要分别统计“程序员在喜欢中的比例”、“超重在喜欢中的比例”、“格子衫在喜欢中的比例”,然后把它们乘起来就行。
接下来是核心的“贝叶斯公式”。 咱们之前的思路是“因为女神喜欢,所以可能是程序员”(由因推果)。但你现在需要的是逆向思维——“因为他具备程序员、超重、格子衫这些特征,所以推测女神可能喜欢他”(由果推因)。贝叶斯公式就是干这个的,它能把我们习惯的思维方向给倒过来。公式会综合考虑:
1)如果女神喜欢,这个人具备这些特征的可能性有多大?
2)女神喜欢任何一个人的基础概率是多少?
3)普通人里具备这些特征的比例又是多少?最后得出一个综合的后验概率。
这里还有个细节问题。 假如我们发现,历史数据里女神喜欢的人中,没有一个养蜥蜴的。那么按照普通算法,P(养蜥蜴 | 喜欢) = 0,一旦新来的这个男生恰好养蜥蜴,整个公式乘下来结果就是0,直接判“死刑”了。这显然不合理,万一女神只是还没遇到养蜥蜴的真爱呢?为了解决这种“零概率”问题,我们引入了“拉普拉斯平滑”,相当于给每个计数都加上一个很小的保护值,确保即使某个特征没出现过,概率也不会是零,给未知情况留点余地。
最后,这个方法的实际应用比你当恋爱顾问可广多了。比如网上那些能自动判断一条商品评论是“好评”还是“差评”的系统,底层逻辑就是这个“朴素贝叶斯”。计算机会把评论拆成一个个词,然后看这些词在已知的好评里出现得多,还是在差评里出现得多。比如“烂透了”这个词在差评里肯定更常见,如果一条新评论里包含它,系统就会更倾向于判断这是差评。它就像一个经验老道的客服,虽然不懂深奥的语法,但凭关键词的“出镜率”就能猜个八九不离十。
所以你看,从帮你分析女神喜好,到判断网上的一条评论,背后的核心思想都是一样的,就是利用已知的概率去巧妙地推算未知的情况。
代码要自己写喔,知识点串起来就行啦~
一、朴素贝叶斯介绍
学习目标
-
复习常见概率的计算方法
-
掌握贝叶斯公式的原理和应用
-
理解朴素贝叶斯的基本概念
-
了解拉普拉斯平滑系数的作用
二、概率基础
条件概率
定义: 表示事件A在另外一个事件B已经发生条件下的发生概率,记作P(A|B)
示例: 在女神喜欢的条件下,职业是程序员的概率?
-
女神喜欢条件下,有2、3、4、7共4个样本
-
4个样本中,有程序员3、4共2个样本
-
则P(程序员|喜欢) = 2/4 = 0.5
联合概率
定义: 表示多个条件同时成立的概率,P(AB) = P(A) × P(B|A)
特征条件独立性假设: P(AB) = P(A) × P(B)
示例: 职业是程序员并且体型匀称的概率?
-
数据集中共有7个样本
-
职业是程序员有1、3、4共3个样本,概率为:3/7
-
职业是程序员且体型匀称有3共1个样本,概率为:1/3
-
则联合概率为:3/7 × 1/3 = 1/7
联合概率 + 条件概率
示例: 在女神喜欢的条件下,职业是程序员、体重超重的概率?P(AB|C) = P(A|C) × P(B|AC)
-
女神喜欢条件下,有2、3、4、7共4个样本
-
其中职业是程序员有3、4共2个样本,概率为:2/4=0.5
-
程序员样本中体型超重的有4共1个样本,概率为:1/2=0.5
-
则P(程序员,超重|喜欢) = 0.5 × 0.5 = 0.25
三、贝叶斯公式
公式理解
-
P( C ):C出现的概率(先验概率)
-
P(W|C):C条件下W出现的概率(条件概率)
-
P(W):W出现的概率(证据)
-
P(C|W):W条件下C出现的概率(后验概率)
计算示例
已知:
-
P(C|W) = P(喜欢|程序员,超重)
-
P(W|C) = P(程序员,超重|喜欢)
-
P( C ) = P(喜欢) = 4/7
-
P(W) = P(程序员,超重)
计算步骤:
-
估计先验概率P©:P(喜欢) = 4/7
-
计算条件概率P(W|C):P(程序员,超重|喜欢) = 1/4
-
计算后验概率分子:P(程序员,超重|喜欢) × P(喜欢) = 4/7 × 1/4 = 1/7
-
计算证据P(W):P(程序员,超重) = P(程序员) × P(超重|程序员) = 3/7 × 2/3 = 2/7
-
最终后验概率:P(喜欢|程序员,超重) = (1/7) ÷ (2/7) = 0.5
四、朴素贝叶斯
核心思想
在贝叶斯基础上增加特征条件独立假设,即特征之间互为独立,从而简化联合概率计算。
简化计算
-
P(程序员,超重|喜欢) = P(程序员|喜欢) × P(超重|喜欢)
-
P(程序员,超重) = P(程序员) × P(超重)
五、拉普拉斯平滑系数
作用
解决因训练样本不足导致的概率计算为0的问题。
公式
在概率计算中,分子加上α,分母加上α×m,其中:
-
α:拉普拉斯平滑系数,通常设为1
-
Nᵢ:F1中符合条件C的样本数量
-
N:条件C下所有样本的总数
-
m:所有独立样本的总数
六、情感分析案例
学习目标
-
掌握朴素贝叶斯的API使用
-
能够应用朴素贝叶斯实现商品评论情感分析
API介绍
sklearn.naive_bayes.MultinomialNB(alpha=1.0)
-
功能:朴素贝叶斯分类
-
参数:alpha - 拉普拉斯平滑系数
实践:商品评论情感分析
步骤分析
-
数据获取
-
数据预处理
-
提取内容列
-
设定评判标准(好评/差评)
-
选择停用词
-
文本分词处理
-
词频统计
-
划分训练集和测试集
-
-
模型训练
-
模型评估
代码实现
如果需要数据源,留言获取哈~
sklearn.naive_bayes.MultinomialNB(alpha=1.0)
# 1. 数据获取
data = pd.read_csv("./data/书籍评价.csv", encoding="gbk")
# 2. 数据预处理
# 2.1 提取内容列
content = data["内容"]
# 2.2 设定评判标准(1好评;0差评)
data.loc[data['评价'] == "好评", "评论标号"] = 1
data.loc[data['评价'] == '差评', '评论标号'] = 0
good_or_bad = data['评价'].values
# 2.3 加载停用词
stopwords = []
with open('./data/stopwords.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
stopwords.append(line.strip())
stopwords = list(set(stopwords)) # 去重
# 2.4 文本分词处理
comment_list = []
for text in content:
seg_list = jieba.cut(text, cut_all=False)
seg_str = ','.join(seg_list)
comment_list.append(seg_str)
# 2.5 词频统计
con = CountVectorizer(stop_words=stopwords)
X = con.fit_transform(comment_list)
feature_names = con.get_feature_names()
# 2.6 划分训练集和测试集
x_train = X.toarray()[:10, :]
y_train = good_or_bad[:10]
x_test = X.toarray()[10:, :]
y_test = good_or_bad[10:]
# 3. 模型训练
model = MultinomialNB(alpha=1)
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
# 4. 模型评估
accuracy = model.score(x_test, y_test)
print(f"预测值:{y_pred}")
print(f"真实值:{y_test}")
print(f"准确率:{accuracy}")
七、总结
朴素贝叶斯是一种基于贝叶斯定理和特征条件独立假设的分类算法,具有以下特点:
-
实现简单,学习效率高
-
对小规模数据表现良好,适合多分类任务
-
对缺失数据不敏感
-
广泛应用于文本分类、情感分析等领域
374

被折叠的 条评论
为什么被折叠?



