贝叶斯算法

贝叶斯定理

在这里插入图片描述
在这里插入图片描述

朴素贝叶斯

在这里插入图片描述

朴素贝叶斯的几种模型

1.多项式模型

该模型常用于文本分类,特征是单词,值是单词的出现次数。
在这里插入图片描述
在这里插入图片描述

2.伯努利模型

在伯努利模型中,每个特征的取值是布尔型的,即true和false,或者1和0。在文本分类中,就是一个特征有没有在一个文档中出现。
在这里插入图片描述

3.高斯模型

处理连续的特征变量,应该采用高斯模型。
高斯分布(正态分布)的概率密度公式如下:
在这里插入图片描述
当数据为连续的特征变量时,我们只需要根据训练数据求得该特征期望和方差,然后代入上面的公式,就能够判断测试数据在该特征下属于某一类的概率是多少。
在这里插入图片描述

# 导入算法包以及数据集
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.naive_bayes import MultinomialNB,BernoulliNB,GaussianNB #分别是三种模型

# 载入数据
iris = datasets.load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target) 

model = GaussianNB()
model.fit(x_train,y_train)

print(classification_report(mul_nb.predict(x_test),y_test))

结果:
在这里插入图片描述

词袋模型BoW

在这里插入图片描述
在这里插入图片描述

TF-IDF

在这里插入图片描述
在这里插入图片描述
利用TF-IDF是为朴素贝叶斯筛选重要词汇:
在这里插入图片描述

利用TF-IDF实现新闻分类

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import model_selection 
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer

news = fetch_20newsgroups(subset='all')
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target)
mul_nb = MultinomialNB() #朴素贝叶斯多项式模型

vector1 = CountVectorizer()  #只考虑词汇在文本中出现的频率,属于词袋模型特征。
vector1_data = vector1.fit_transform(x_train)
scores1 = model_selection.cross_val_score(mul_nb, vector1_data, y_train, cv=3, scoring='accuracy')  

vector2 = TfidfVectorizer()#除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量,属于Tfidf特征。
vector2_data = vector2.fit_transform(x_train)# 会生成训练集中每个词的TF-IDF的值
scores2 = model_selection.cross_val_score(mul_nb, vector2_data, y_train, cv=3, scoring='accuracy') 

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()
vector3 = TfidfVectorizer(stop_words=stop_words)
vector3_data = vector3.fit_transform(x_train)
scores3 = model_selection.cross_val_score(mul_nb, vector3_data, y_train, cv=3, scoring='accuracy') 

print("Accuracy1: %0.3f" % (scores1.mean())) 
print("Accuracy2: %0.3f" % (scores2.mean())) 
print("Accuracy3: %0.3f" % (scores3.mean())) 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值