贝叶斯统计学
基于(总体信息+样本信息+先验信息)进行统计推断的方法和理论
先验信息:抽样之前,有关推断问题中未知参数的一些信息,通常来自于经验或历史资料
贝叶斯定理:
给定观测数据样本,假设是成立的概率,是后验概率,比如一份特定邮件中,是垃圾邮件的概率
是的先验概率,比如总体邮件中垃圾邮件的概率,是的先验概率,比如总体邮件中带有特定特征的邮件概率
可以通过抽样来计算先验概率
eg:
总体100,正常70,垃圾30,办证在正常邮件中出现10次,垃圾邮件中出现15次。
设X为办证,H为垃圾邮件
包含办证这个词的邮件属于垃圾邮件的概率为
多个特征会使统计量巨大,所有特征需要计算次,n是特征数
朴素贝叶斯(Naive Bayes)
假设:特征之间都是相互独立的
多项式模型:重复的词语我们视其出现多次('a','b','c','a','d','a')
eg:
伯努利模型:重复的词我们视其为出现一次('a','b','c','d')
eg:
混合模型:在计算句子概率时,不考虑重复词语出现的次数,但是在统计计算词语的概率时,却考虑重复词语出现的次数
高斯模型:连续型变量,转换成离散型的值
词袋模型(Bag of Words)
BoW模型最早出现在自然语言处理(Natural Language Processing)和信息检索(Information Retrieval)领域。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。BoW使用一组无序的单词来表达一段文字或一个文档。
eg:John likes to watch movies,Marry likes too.John also likes to watch football games.
构成词典:
{"John" : 1 , "likes" 2 , "to" : 3 , "watch" : 4 , "movies" : 5 , "also" : 6 , "football" : 7 , "games" : 8 , "Marry" : 9 , "too" : 10}
则上述两个文本可用向量表示:
[ 1 , 2 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 1 ]
[ 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 ]
向量与原来文本中单词出现的顺序无关,而是词典中每个单词在文本中出现的频率
python中使用CountVictorizer方法构建单词的字典,每个单词实例被转换为向量的一个数值特征,每个元素是特定单词在文本中出现的次数
from sklearn.feature-extraction.text import CountVectorizer
TF-IDF
提取文章关键词:
1、提取词频(Term Frequency,TF),但出现最多的词可能是“的,是,在”等对文章分类或搜索没有帮助的停用词(stop words)
2、假设停用词都过滤掉了,但仍会有关键词排序问题,比如“中国”,“蜜蜂”,“养殖”三个词TF相同,但相对而言,后两个比前一个不那么常见,对于一篇文章,三者TF相同,那么在关键词排序上,后两者应该在“中国”之前,所以需要一个重要性调整系数,衡量一个词是否是常见词。常见词的权重 < 不常见词的权重,这个权重叫做“逆文本频率(Inverse Document Frequency,IDF)”其大小与一个词的常见程度成反比。
词频(TF) = 某个词在文章中的出现次数
词频(TF) =
词频(TF) =
TF-IDF = TF * IDF
sklearn实现,可以使用 TfidfVectorizer()
from sklearn.feature-extraction.text import TfidfVectorizer
代码:
import numpyas np
from sklearnimport datasets
from sklearn.model_selectionimport train_test_split
from sklearn.metricsimport classification_report, confusion_matrix
from sklearn.naive_bayesimport MultinomialNB, BernoulliNB, GaussianNB
# 载入数据
iris = datasets.load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)
mul_nb = MultinomialNB()
mul_nb.fit(x_train, y_train)
print(classification_report(mul_nb.predict(x_test), y_test))
print(confusion_matrix(mul_nb.predict(x_test), y_test))
Ber_nb = BernoulliNB()
Ber_nb.fit(x_train, y_train)
print(classification_report(Ber_nb.predict(x_test), y_test))
print(confusion_matrix(Ber_nb.predict(x_test), y_test))
Gau_nb = GaussianNB()
Gau_nb.fit(x_train, y_train)
print(classification_report(Gau_nb.predict(x_test), y_test))
print(confusion_matrix(Gau_nb.predict(x_test), y_test))