目录

贝叶斯算法概述

贝叶斯要解决的"逆概"问题

正向概率:

逆向概率:(也就是贝叶斯解决的问题)

为什么使用贝叶斯?

贝叶斯推导实例

贝叶斯公式

贝叶斯--"拼写纠正"实例

先验概率

"垃圾邮件过滤"实例

模型比较理论

最大似然估计

奥卡姆剃刀

垃圾邮件过滤实例

贝叶斯实现拼写检查器

文本分析与关键词提取

文本数据(字符串组成)

停用词

Tf(词频)-idf(逆文档频率):关键词提取

相似度计算

余弦相似度(即两个向量夹角余弦值)

案例:新闻数据分类


贝叶斯算法概述

贝叶斯要解决的"逆概"问题

正向概率:

设袋子里有M个白球N个黑球,求摸出黑球的概率之类的概率叫正向概率。

逆向概率:(也就是贝叶斯解决的问题)

如果我们事先不知道袋子里黑球和白球的比例,然后闭着眼摸球出来,根据摸出的球的颜色,就此对袋子里黑白球的比例做出一定的推测。

为什么使用贝叶斯?

现实世界本身就是不确定的,并且人的观察能力是有局限性的。

我们日常生活中观察到的只是事物的表面,因此需要提供一些猜测。

贝叶斯推导实例

化简

贝叶斯公式

贝叶斯--"拼写纠正"实例

先验概率

是指根据以往经验和分析得到的概率。与实际情况相挂钩。

对上面的例子来说,p(h)为先验概率(即每个词在字典中出现的概率<即词频>)

∝表示正比于

可能性大小由编辑距离:即两个单词不同的字母的数量等或者其他指标

"垃圾邮件过滤"实例

模型比较理论

最大似然估计

最符合观测数据的(差一个的比差两个的更优)(即P(D|h)最大的)最有优势

奥卡姆剃刀

P(h)较大的模型有较大的优势

 奥卡姆剃刀:越高阶的多项式越不常见。(高阶容易有过拟合现象)

垃圾邮件过滤实例

贝叶斯实现拼写检查器

# 把语料中的单词抽取出来,转成小写,并且去除单词中间的特殊符号
import re,collectionsdef words(text):return re.findall('[a-z]+',text.lower())
def train(features):model = collections.defaultdict(lambda: 1)# 所有词统计过后最少出现1次for f in features:model[f] += 1return modelNWORDS=train(words(open('E:/data/my_data/spelling_correct.txt').read()))
# print(NWORDS)
alphabet='abcdefghijklmnopqrstuvwxyz'
#  编辑距离
# 返回所有与word编辑距离为 1 的集合
def edits1(word): n=len(word)return set([word[0:i]+word[i+1:] for i in range(n)]+  #delete(删除次数)[word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)]+ #transposition(交换次数)[word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet]+ # alteration(替换次数)[word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet]) #insertion(插入次数)# 返回编辑距离为2 的单词
def edists2(word): return set(e2 for e1 in edits1(word) for e2 in edits1(e1))# 返回那些正确的词作为候选词
def known(words):return set(w for w in words if w in NWORDS) # 检查器:先判断是不是正确的拼写形式,如果不是则选出编辑距离为1的单词……
def correct(word):# 如果known(set)非空,candidate就会选取这个集合,而不继续计算后面的candidates=known([word])or known(edits1(word)) or known(edists2(word)) or [word]# 返回概率最大的内个词return max(candidates,key=lambda w:NWORDS[w])# 效果展示
# mach-->much
print(correct('mach'))
# appl-->apply
print(correct('appl'))
# appla-->apply
print(correct('appla'))
# learw-->learn
print(correct('learw'))
# tess-->test(输出less:有点不准确,可能是因为语料中less出现的频率高一些)
print(correct('tess'))
# morw-->more
print(correct('morw'))
much
apply
apply
learn
less
more

文本分析与关键词提取

文本数据(字符串组成)

停用词

语料中大量出现但没啥大用(对文本的内容主题没什么影响)的词(截取一部分如下图)

Tf(词频)-idf(逆文档频率):关键词提取

相似度计算

语料清洗(去停用词、筛选重复句子等)-->分词(jieba库)-->构造语料库-->词频向量(机器认识)

余弦相似度(即两个向量夹角余弦值)

案例:新闻数据分类

过程:

#数据源:搜狗实验室-->新闻数据
import pandas as pd
import jiebadf_news = pd.read_table('',names=['category','theme','URL','content'],encoding='utf-8')
df_news = df_news.dropna() #去掉缺失值
df_news.head()# notebook分段运行df_news.shape# notebook分段运行#分词:使用jieba分词器
content = df_news.content.values.tolist()# 将内容转化为列表(jieba分词器要求)
print(content[1000])content_s = []
for line in content:current_segment = jieba.lcut(line)if len(current_segment)>1 and current_segment != '\r\n': #换行符content_s.append(current_segment)
content_s[1000]# notebook分段运行
df_content=pd.DataFrame({'conten_s':content_s})
df_content.head()
# notebook分段运行
# stopwords.txt:停用词表
stopwords=pd.read_csv("stopwords.txt",index_col=False,sep="\t",quoting=3,names=['stopword'],encoding='utf-8')
stopwords.head(20)
# notebook分段运行
# 去除停用词
def drop_stopwords(contents,stopwords):contents_clean=[]all_words=[]for line in contents:line_clean=[]for word in line:if word in stopwords:continueline_clean.append(word)all_words.append(str(word))#为做词云准备contents_clean.append(line_clean)return contents_clean.all_words
# print(contents_clean)content = df_content.content_s.value.tolist()
stopwords = stopwords.stopword.values.tolist()
contents_clean.all_words=drop_stopwords(contents,stopwords)
# notebook分段运行
df_content=pd.DataFrame({'contents_clean':contents_clean})
df_content.head()
# notebook分段运行
df_all_words=pd.DataFrame({'all_words':all_words})
df_all_words.head()
# notebook分段运行
words_count=df_all_words.groupby(by=['all_words'])['all_words'].agg({'count':numpy.size})
words_count=words_count.reaet_index().sort_values(by=["count"],ascending=False)
words_count.head()
# notebook分段运行
from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
matplotlib.rcParams['figure.figsize']=(10.0,5.0)wordcloud=WordCloud(font_path="",background_color="white",max_font_size=80)
word_frequence={x[0]:x[1] for x in words_count.head(100).values}
woldcloud=wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
# notebook分段运行
#TF-IDF关键词提取
import jieba.analyse
index=1000
print(df_news['content'][index])
content_s_str="".join(content_s[index])
print(" ".join(jieba.analyse.extract_tags(contents_s_str,topK=5,withWeight=False)))
# notebook分段运行
#LDA:主题模型
#格式要求:list of list 形式,分词好的整个语料
from gensim import corpora, models, similarities
import gensim
#做映射,相当于词袋
dictionary=corpora.Dictionary(contents_clean)
corpus=[dictionary.doc2bow(sentence) for sentence in contents_clean]
#类似Kmeans自己指定K值  num_topics=20:想得到20个主题,可自己指定
lda=gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20)
# notebook分段运行
#1号分类结果
print(lda.print_topic(1,topn=5))
# notebook分段运行
for topic in lda.print_topics(num_topics=20,num_words=5):print(topic[1])
# notebook分段运行
# 贝叶斯分类器分类
df_train=pd.DataFrame({'contents_clean':contents_clean,'label':df_news['category']})
df_train.head()df_train.label..unique()# label不重复的值
# notebook分段运行
label_mapping={"汽车":1,"":2,"":3,"":4,"":5,"":6,"":7,"":8,"":9,"":10}
df_train['label']=df_train['label'].map(label_mapping)
df_train.head()
# notebook分段运行
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(df_train['contents_clean'].values,df_train['label'].value,random_state=1)x_train[0][1]
# notebook分段运行
words=[]
for line_index in range(len(x_train)):try:words.append(' '.join(x_train[line_index]))except:print(line_index,word_index)
print(words[0])
print(len(words))
# notebook分段运行
from sklearn.feature_extraction.text import CountVectorizer
texts=['dog cat fish','dog cat cat','fish bird','bird']
cv=CountVectorizer()  #向量构造器
cv_fit=cv.fit_transform(texts)print(cv.get_features_names())
print(cv_fit.toarray())print(cv_fit.toarray().sum(axis=0))
# notebook分段运行
from sklearn.feature_extraction.text import CountVectorizer
texts=['dog cat fish','dog cat cat','fish bird','bird']
cv=CountVectorizer(ngram_range=(1,4))  #向量构造器(加上参数)
cv_fit=cv.fit_transform(texts)print(cv.get_features_names())
print(cv_fit.toarray())print(cv_fit.toarray().sum(axis=0))
# notebook分段运行
from sklearn.feature_extraction.text import CountVectorizervec=CountVectorizer(analyze='word',max_features=4000, lowercase=False)
vec.fit(words)
# notebook分段运行
from sklearn.naive_bayes import MultinomialNB
classifier=MultinomalNB() #贝叶斯分类器
classifier.fit(vec.transform(words),y_train)
# notebook分段运行
test_words=[]
for line_index in range(len(x_test)):try:test_words.append(' '.join(x_test[line_index]))except:print(line_index,word_index)
print(test_words[0])
# notebook分段运行
classifier.score(vec.transform(test_words),y_test) #基本贝叶斯精度
# notebook分段运行
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(analyzer='word',max_features=4000,lowercase=False)
vectorizer.fit(words)from sklearn.naive_bayes import MultinomialNB
classifier=MultinomalNB() #贝叶斯分类器
classifier.fit(vec.transform(words),y_train)
# notebook分段运行
classifier.score(vec.transform(test_words),y_test) #构造向量方式不同,结果不同

Python数据分析与机器学习实战<十>贝叶斯算法相关推荐

  1. 机器学习实战---朴素贝叶斯算法实现+使用K折交叉验证(代码详解+创新)

    <机器学习实战朴素贝叶斯算法实现+使用K折交叉验证> 未经允许,不得擅自转载! 提供数据集如下(永久有效,需要的自行下载): 链接:https://pan.baidu.com/s/1Sv0 ...

  2. matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)

    原理知道一百遍不如自己动手写一遍,当然,现在基本上不需要自己来写算法的底层code了,各路大神们已经为我等凡夫俗子写好了,直接调用就行. 这里介绍在MATLAB中和Python中应用贝叶斯算法的小例子 ...

  3. 23神经网络 :唐宇迪《python数据分析与机器学习实战》学习笔记

    唐宇迪<python数据分析与机器学习实战>学习笔记 23神经网络 1.初识神经网络 百度深度学习研究院的图,当数据规模较小时差异较小,但当数据规模较大时深度学习算法的效率明显增加,目前大 ...

  4. 机器学习实战 朴素贝叶斯分类器

    基于概率论的分类方法: 朴素贝叶斯 我的微信公众号: s406205391; 欢迎大家一起学习,一起进步!!! k-近邻算法和决策树会给出"该数据属于哪一类"的明确回答.不过,分类 ...

  5. 16Python文本数据分析:新闻分类任务 (贝叶斯算法应用实例)

    唐宇迪<python数据分析与机器学习实战>学习笔记 16Python文本数据分析:新闻分类任务 (贝叶斯算法应用实例) ** 一.流程分析 ** 数据如下图:content为主体内容, ...

  6. 朴素贝叶斯 php,PHP实现机器学习之朴素贝叶斯算法详解.pdf

    PHP实实现现机机器器学学习习之之朴朴素素贝贝叶叶斯斯算算法法详详解解 本文实例讲述了PHP实现机器学习之朴素贝叶斯算法.分享给大家供大家参考 具体如下: 机器学习已经在我们的生活中变得随处可见了.比 ...

  7. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战

    本书结合了机器学习.数据分析和Python语言,通过案例以通俗易懂的方式讲解了如何将算法应用到实际任务. 全书共20章,大致分为4个部分.第一部分介绍了Python的工具包,包括科学计算库Numpy. ...

  8. 机器学习之朴素贝叶斯算法原理+Python实现

    朴素贝叶斯 1.简介 ​ 贝叶斯分类算法是统计学中的一种概率分类方法,朴素贝叶斯分类是贝叶斯分类中最简单的一种.其分类原理就是利用贝叶斯公式根据某特征的先验概率计算出其后验概率,然后选择具有最大后验概 ...

  9. 机器学习之朴素贝叶斯算法

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 贝叶斯公式与朴素贝叶斯算法 贝叶斯公式推导 用机器学习的视角理解贝叶斯公式 NB ...

最新文章

  1. python中非怎么表示_Python中非英语文本的标记化
  2. mujava 软件测试实验报告
  3. c语言字符串初值问题!
  4. Cisco 2960 交换机密码设置
  5. map容器的使用 逆序遍历map容器当中的数据
  6. 进程间通信之2----共享内存
  7. 【华为云技术分享】华为云MySQL新增MDL锁视图特性,快速定位元数据锁问题
  8. 将一副完整的位图均分成n块位图显示
  9. 【BERT】BERT的嵌入层是如何实现的?看完你就明白了
  10. html视频播放快进按钮,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
  11. 小程序学习笔记(6)-菜谱小程序的制作
  12. 破解硬盘还原卡与还原精灵
  13. vm14安装mac10教程(亲测;转载)
  14. 钩子(hook)编程
  15. 修改环境变量删除了path
  16. 微信公众号迁移时同一个公司两个微信号公证问题
  17. QT图形显示和处理6
  18. docker网络问题
  19. ▼ 系列 | 漫谈数仓第四篇NO.4 『BI选型』
  20. 傅连仲主编的《计算机应用基础》,学生教学论文,关于计算机应用基础课程标准研读的必要性相关参考文献资料-免费论文范文...

热门文章

  1. 网络直播中延迟产生的原因及解决方案
  2. 西姆松定理与斯坦纳定理
  3. 假设检验之双样本Z检验公式在转化率指标和数值型指标上的应用
  4. 关于yyyy-mm-dd与yyyy-MM-dd
  5. Android优秀软件推荐
  6. win10在Anaconda3下面安装caffe框架(CPU)Python2.7从入门到放弃
  7. IKAnalyzer解读
  8. Pitstop 教程 去水印
  9. Android APK 签名、打包笔记
  10. golang使用grom连接Mysql数据库