Java教程

朴素贝叶斯——分类模型

本文主要是介绍朴素贝叶斯——分类模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

朴素贝叶斯——分类模型

朴素贝叶斯:首先贝叶斯推论就是通过结论推条件。专业点就是先假定先验概率,然后通过后验概率来判断先验概率的正确性,若不准确,则修正。(感觉好像逻辑回归的反向传播)

然后朴素的意思是:各个因素相互独立。互不干扰

优点

朴素贝叶斯发源于古典数学理论,有稳定的分类效率。

对缺失数据不太敏感,算法也比较简单,常用于文本分类

分类准确度高,速度快

缺点

由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好

鸢尾花

from sklearn.naive_bayes import GaussianNB
from sklearn import datasets
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()
feature = iris.data
target = iris.target

g = GaussianNB()
g.fit(x_train,y_train)
g.score(x_test,y_test) #0.8333333333333334

# 查看第一条测试数据的分类
g.predict(x_test[1].reshape((1,-1)))

tmp = g.predict_proba(x_test[10].reshape(1,-1))  #获得预测值,求和=1,注意这里没有取log
import numpy as np
data= np.around(tmp, 2)  #保留两位小数
data

手写数字

import sklearn.datasets as datasets
import numpy as np
digist = datasets.load_digits()
feature= digist.data
target = digist.target

x_train,x_test,y_train,y_test = train_test_split(feature,target,test_size=0.1,random_state=2020)

#训练模型
g = GaussianNB()
g.fit(x_train,y_train)

g.score(x_test,y_test)#0.8333333333333334

y_pred = g.predict(x_test)
print('模型分类结果:',y_pred[:10])
print('真实的分类结果:',y_test[:10])

#看各种分类的概率 其中4的概率也是最大的
tmp = g.predict_proba(x_test[3].reshape(1,-1))  
data= np.around(tmp, 2) 
data

# g.predict_log_proba(x_test[3].reshape(1,-1))  这个是把概率取log了,就不会发生很大的精度误差了

数据使用- 实战:数据使用fetch_20newsgroups中的数据,包含了20个主题的18000个新闻组的帖子

  • 什么是TF-IDF
    • 在信息检索中,tf-idf(词频-逆文档频率)是一种统计方法,用以评估一个单词在一个文档集合或语料库中的重要程度。
    • 如果某个词或短语在一篇文章中出现的频率高(即TF高),并且在其他文章中很少出现(即IDF高),则认为此词或者短语具有很好的类别区分能力,适合用来分类。
import sklearn.datasets as datasets
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
news = datasets.fetch_20newsgroups(data_home='./')                  #加载20类新闻数据

feature = news.data#返回的是列表,列表中为一篇篇的文章
target = news.target#返回的ndarray,存储的是每一篇文章的类别

print(feature[1])

t = TfidfVectorizer()
feature_t = t.fit_transform(feature) #提取Tf_idf

x_train,x_test,y_train,y_test = train_test_split(feature_t,target,test_size=0.01,random_state=2020)

m = MultinomialNB()
m.fit(x_train,y_train)

m.score(x_test,y_test) #0.868421052631579
m.predict(x_test)
m.predict_log_proba(x_test[10])
这篇关于朴素贝叶斯——分类模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!