《机器学习核心算法》分类算法 - 朴素贝叶斯 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日,先到先得,快快来抢

相关推荐
Li emily6 小时前
解决了加密货币api多币种订阅时的数据乱序问题
人工智能·python·api·fastapi
山川绿水6 小时前
bugku——PWN——overflow2
人工智能·web安全·网络安全
程序员cxuan6 小时前
微信读书官方发了 skills,把我给秀麻了。
人工智能·后端·程序员
fake_ss1986 小时前
AI时代学习全栈项目开发的新范式
java·人工智能·学习·架构·个人开发·学习方法
nassi_6 小时前
对AI工程问题的一些思考
大数据·人工智能·hadoop
AI技术控7 小时前
《Transformers are Inherently Succinct》论文解读:从“能表达什么”到“多紧凑地表达”
人工智能·python·深度学习·机器学习·自然语言处理
蔡俊锋7 小时前
AI记忆压缩术:从305GB到7.4GB的魔法
人工智能·ai·ai 记忆
Upsy-Daisy7 小时前
AI Agent 项目学习笔记(二):Spring AI 与 ChatClient 主链路解析
人工智能·笔记·学习
zhangxingchao7 小时前
AI应用开发六:企业知识库
前端·人工智能·后端
Terrence Shen8 小时前
关于传统软件工程后端技术和当代AI智能体agent构建的harness engineering的一点思考
人工智能·软件工程