《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

朴素贝叶斯

朴素贝叶斯法(Naive Bayes model 简称 NBM )是基于「贝叶斯定理」与「特征条件独立假设」的分类方法。

「贝叶斯定理」:也叫贝叶斯公式,用来描述两个「条件概率」之间的关系。比如你看到一个人总是做好事,那这个人多半会是一个好人。
「特征条件独立假设」:为了解决「参数」成指数增长过多的问题,朴素贝叶斯在贝叶斯定理的基础上,假设特征的条件都是「相互独立」的。

1、朴素贝叶斯API

「多项式」模型的朴素贝叶斯分类器,用于具有「离散」特征的分类,比如文本分类的单词计数,需要整数特征计数。

sklearn.naive_bayes.MultinomialNB()

参数

  • alpha :(可选,浮点型)平滑参数,默认值为 1.0
  • force_alpha :(可选,布尔类型)默认值 False,如果为False且alpha小于1e-10,就将alpha设置为1e-10;如果为True,aplha保持不变;这是为了防止alpha太接近0而导致数值误差
  • fit_prior :(可选,布尔类型)是否学习先验概率,默认值 True,如果为False,就使用统一先验。

函数

  • MultinomialNB.fit( x_train,y_train ):接收训练集特征 和 训练集目标
  • MultinomialNB.predict( x_test ):接收测试集特征,返回数据的类标签
  • MultinomialNB.score(x_test, y_test):接收测试集特征 和 测试集目标,返回准确率。
  • MultinomialNB.get_params():获取接收的参数(alpha、fit_prior这种参数)
  • MultinomialNB.set_params():设置参数
  • MultinomialNB.partial_fit():增量测试,用于数据量太大不能一次装入内存的情况,

2、朴素贝叶斯算法实际应用

2.1、获取数据集

这里我们使用sklearn自带的「鸢尾花」数据集。

python 复制代码
from sklearn import datasets

# 1、获取数据集
iris = datasets.load_iris()
print(iris.data)

输出:

bash 复制代码
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 ......
  [5.9 3.  5.1 1.8]]

2.2、划分数据集

接下来,我们对数据集进行「划分」,传入特征值和目标值,按照默认比例划分(25%测试集、75%训练集)

python 复制代码
from sklearn import datasets
from sklearn import model_selection

# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
print('训练集特征值:', len(x_train))
print('测试集特征值:', len(x_test))
print('训练集目标值:', len(y_train))
print('测试集目标值:', len(y_test))

输出:

bash 复制代码
训练集特征值: 112
测试集特征值: 38
训练集目标值: 112
测试集目标值: 38

从结果可以看到,训练集划分了112组、测试集划分了38组,符合预期。

2.3、特征归一化

接下来,我们对特征值进行「归一化」处理,需要注意的是,训练集和测试集的处理必须完全相同。

python 复制代码
from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing

# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
# 3、特征归一化
mm = preprocessing.MinMaxScaler()
x_train = mm.fit_transform(x_train)
x_test = mm.fit_transform(x_test)
print(x_train)
print(x_test)

输出:

bash 复制代码
[[0.8        0.5        0.87719298 0.70833333]
 [0.42857143 0.5        0.66666667 0.70833333]
 ......

从结果我们可以看到,特征值发生了相应的变化。

2.4、贝叶斯算法处理并评估

接下来,实例化贝叶斯的类对象,把训练集的特征值目标值传进去,进行训练。

python 复制代码
from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing
from sklearn import naive_bayes

# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
# 3、特征归一化
mm = preprocessing.MinMaxScaler()
x_train = mm.fit_transform(x_train)
x_test = mm.fit_transform(x_test)
# 4、贝叶斯算法处理
estimator = naive_bayes.MultinomialNB()
estimator.fit(x_train, y_train)

# 5、模型评估
y_predict = estimator.predict(x_test)
print('真实值和预测值对比', y_predict == y_test)
score = estimator.score(x_test, y_test)
print('准确率', score)

输出:

bash 复制代码
真实值和预测值对比 [ True False  True False  True False  True  True  True  True False  True
 False False False False False  True False  True False  True  True  True
  True  True  True  True  True False False False  True  True  True  True
  True False]
准确率 0.6052631578947368

3、常见问题

MultinomialNB的训练集数据不能为「负数」,否则会报错:Negative values in data passed to MultinomialNB 。

比如标准化处理特征时,会出现负数结果,就会报错,可以改用归一化。

4、粉丝福利

评论区留言即可参与抽奖,送《云计算安全》5本。

本书既有理论研究,又有实践探讨,共分为6章,讲解了云计算安全中人工智能与大数据挖掘技术的应用实践。第1章从概念、发展、标准等角度宏观地介绍了云计算安全,第2章从云计算安全需求的角度阐释云计算安全的核心目标、公有云场景下的安全需求和私有云场景下的安全需求;第3章全面、系统地介绍了公有云安全技术体系和私有云安全技术体系,第4章详细个绍了人工智能技术在云计算安全领域的应用实践;第5章详细介绍了大数据挖掘技术在云计算安全领域的应用实践:第6章个绍了人工智能和人数据挖掘技术的综合应用,提出云数据中心安全防护框架,并详细个绍了云数据中心安全态势感知系统。

本书是人工智能与大数据挖掘技术在云计算安全领域的应用实践参考书,适用于人工智能、大数据挖掘、云计算、网络信息安全相关领域的从业人员。

清华社【秋日阅读企划】领券立享优惠

IT好书 5折叠加10元 无门槛优惠券:https://u.jd.com/Yqsd9wj

活动时间:9月4日-9月17日,先到先得,快快来抢

相关推荐
开发者每周简报12 分钟前
微软的AI转型故事
人工智能·microsoft
dundunmm15 分钟前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神16 分钟前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
普密斯科技44 分钟前
手机外观边框缺陷视觉检测智慧方案
人工智能·计算机视觉·智能手机·自动化·视觉检测·集成测试
四口鲸鱼爱吃盐1 小时前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
lishanlu1361 小时前
Pytorch分布式训练
人工智能·ddp·pytorch并行训练
Schwertlilien1 小时前
图像处理-Ch5-图像复原与重建
c语言·开发语言·机器学习
日出等日落1 小时前
从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互
人工智能·语言模型·自然语言处理
三木吧1 小时前
开发微信小程序的过程与心得
人工智能·微信小程序·小程序
whaosoft-1431 小时前
w~视觉~3D~合集5
人工智能