贝叶斯推断:
P(A)为先验概率,即B事件发生之前,我们对A事件概率的一个判断
P(A|B)为后验概率,即在B事件发生之后,我们对A事件概率的重新评估
贝叶斯推断的含义:先预估一个先验概率,然后加入实验结果,看这个实验到底是增强还是削弱了先验概率,由此得到更接近事实的后验概率。
朴素贝叶斯
朴素贝叶斯:特征之间是相互独立
分词
词向量模型
(1) **One_hot representation:**每个文本(每句话)转化为1*n向量,但没有考虑到词矩,词频,纬度灾难(过拟合)(出现1.没出现0)
(2) **Distribution representation:**既能表示词本身又能考虑语义距离的词向量表示方法
词袋模型
将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的,向量值为对应的词语出现的次数。
但有些词语在所有文本中词频都很高,于是它们对文本是没有区分度的,于是需降低它们对文本区分时的重要度。所以有了TF-IDF(词频-逆文本频率)
TF-IDF(词频-逆文本频率)
IDF反映了词的重要度,如果一个词在很多的文本中出现,那么它的IDF值应该低
N代表语料库中文本的总数,而N(x)代表语料库中包含词x的文本总数
平滑处理
TF-IDF模型
TF(x)指词x在当前文本中的词频
例子
英文新闻分类
20 newsgroups数据集18000篇新闻文章,一共涉及到20种话题,所以称作20 newsgroups text dataset,分文两部分:训练集和测试集,通常用来做文本分类.
#第一步:导入数据
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(data_home=r'路径',subset='all' )
news.target_names#新闻的类别
news.target#类别编号
#第二步:将文本转为TF-IDF向量
from sklearn.feature_extraction.text import TfidfVectorizer
# 提取tfidf特征
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(news.data)
print(vectors)
#或者第二步:添加停用词,加载停用词,将文本转为TF-IDF向量
#添加停用词
def get_stop_words():
result = set()
for line in open('stopwords_en.txt','r').readlines():
result.add(line.strip())
return result
# 加载停用词
stop_words = get_stop_words()
tfidf = TfidfVectorizer(stop_words=stop_words)
tfidf_data = tfidf.fit_transform(news.data)
#第三步:建立朴素贝叶斯模型,并进行十折交叉验证
nb1 = MultinomialNB()
scores = model_selection.cross_val_score(nb1, tfidf_data, news.target, cv=10)
print(scores.mean())