朴素贝叶斯朴素贝叶斯介绍复习常见概率的计算知道贝叶斯公式了解朴素贝叶斯是什么了解拉普拉斯平滑系数的作用【知道】常见的概率公式条件概率表示事件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 个样本在这 4 个样本中职业是程序员有 3、4 共 2 个样本则其概率为2/40.5在在 2 个样本中体型超重的有 4 共 1 个样本则其概率为1/2 0.5则 P(程序员, 超重|喜欢) 0.5 * 0.5 0.25简言之 条件概率在去掉部分样本的情况下计算某些样本的出现的概率表示为P(B|A) 联合概率多个事件同时发生的概率是多少表示为P(AB) P(B)*P(A|B)【理解】贝叶斯公式1.P(C )表示 C 出现的概率2.P(W|C) 表示在C 条件下W 出现的概率3.P(W) 表示 W 出现的概率1.P(C|W) P(喜欢|程序员超重)2.P(W|C) P(程序员超重|喜欢)3.P(C ) P(喜欢)4.P(W) P(程序员超重)1.根据训练样本估计先验概率P(C )P(喜欢) 4/72.根据条件概率P(W|C)调整先验概率P(程序员,超重|喜欢) 1/43.此时我们的后验概率P(C|W)为P(程序员,超重|喜欢) * P(喜欢) 4/7 * 1/4 1/74.那么该部分数据占所有既为程序员又超重的人中的比例是多少呢(1).P(程序员,超重) P(程序员) * P(超重|程序员) 3/7 * 2/3 2/7(2).P(喜欢|程序员, 超重) 1/7 ➗ 2/7 0.5【理解】朴素贝叶斯我们发现在前面的贝叶斯概率计算过程中需要计算 P(程序员,超重|喜欢) 和 P(程序员, 超重) 等联合概率为了简化联合概率的计算朴素贝叶斯在贝叶斯基础上增加特征条件独立假设即特征之间是互为独立的。此时联合概率的计算即可简化为P(程序员,超重|喜欢) P(程序员|喜欢) * P(超重|喜欢)P(程序员,超重) P(程序员) * P(超重)【知道】拉普拉斯平滑系数由于训练样本的不足导致概率计算时出现 0 的情况。为了解决这个问题我们引入了拉普拉斯平滑系数。α 是拉普拉斯平滑系数一般指定为 1Ni是 F1 中符合条件 C 的样本数量N 是在条件 C 下所有样本的总数m 表示所有独立样本的总数我们只需要知道为了避免概率值为 0我们在分子和分母分别加上一个数值这就是拉普拉斯平滑系数的作用。【案例】情感分析学习目标1.知道朴素贝叶斯的API2.能够应用朴素贝叶斯实现商品评论情感分析【知道】api介绍sklearn.naive_bayes.MultinomialNB(alpha 1.0)朴素贝叶斯分类alpha拉普拉斯平滑系数【实践】商品评论情感分析已知商品评论数据根据数据进行情感分类好评、差评步骤分析1获取数据2数据基本处理2.1 取出内容列对数据进行分析2.2 判定评判标准2.3 选择停用词2.4 把内容处理转化成标准格式2.5 统计词的个数2.6准备训练集和测试集3模型训练4模型评估代码实现importpandasaspdimportnumpyasnpimportjiebaimportmatplotlib.pyplotaspltfromsklearn.feature_extraction.textimportCountVectorizerfromsklearn.naive_bayesimportMultinomialNB1获取数据# 加载数据datapd.read_csv(./data/书籍评价.csv,encodinggbk)data2数据基本处理# 2.1 取出内容列对数据进行分析contentdata[内容]content.head()# 2.2 判定评判标准 -- 1好评;0差评data.loc[data.loc[:,评价]好评,评论标号]1# 把好评修改为1data.loc[data.loc[:,评价]差评,评论标号]0# data.head()good_or_baddata[评价].values# 获取数据print(good_or_bad)# [好评 好评 好评 好评 差评 差评 差评 差评 差评 好评 差评 差评 差评]# 2.3 选择停用词# 加载停用词stopwords[]withopen(./data/stopwords.txt,r,encodingutf-8)asf:linesf.readlines()print(lines)fortmpinlines:linetmp.strip()print(line)stopwords.append(line)# stopwords # 查看新产生列表#对停用词表进行去重stopwordslist(set(stopwords))#去重 列表形式print(stopwords)# 2.4 把“内容”处理转化成标准格式comment_list[]fortmpincontent:print(tmp)# 对文本数据进行切割# cut_all 参数默认为 False,所有使用 cut 方法时默认为精确模式seg_listjieba.cut(tmp,cut_allFalse)print(seg_list)# generator object Tokenizer.cut at 0x0000000007CF7DB0seg_str,.join(seg_list)# 拼接字符串print(seg_str)comment_list.append(seg_str)# 目的是转化成列表形式# print(comment_list) # 查看comment_list列表。# 2.5 统计词的个数# 进行统计词个数# 实例化对象# CountVectorizer 类会将文本中的词语转换为词频矩阵conCountVectorizer(stop_wordsstopwords)# 进行词数统计Xcon.fit_transform(comment_list)# 它通过 fit_transform 函数计算各个词语出现的次数namecon.get_feature_names()# 通过 get_feature_names()可获取词袋中所有文本的关键字print(X.toarray())# 通过 toarray()可看到词频矩阵的结果print(name)# 2.6准备训练集和测试集# 准备训练集 这里将文本前10行当做训练集 后3行当做测试集x_trainX.toarray()[:10,:]y_traingood_or_bad[:10]# 准备测试集x_textX.toarray()[10:,:]y_textgood_or_bad[10:]3模型训练# 构建贝叶斯算法分类器mbMultinomialNB(alpha1)# alpha 为可选项默认 1.0添加拉普拉修/Lidstone 平滑参数# 训练数据mb.fit(x_train,y_train)# 预测数据y_predictmb.predict(x_text)#预测值与真实值展示print(预测值,y_predict)print(真实值,y_text)4模型评估mb.score(x_text,y_text)