Part3__机器学习实战学习笔记__朴素贝叶斯

简介: 本文首先对朴素贝叶斯算法原理进行简要的介绍,然后在iris数据集上面测试算法的效果。

step by step

1、朴素贝叶斯原理介绍
2、iris数据集测试
3、算法优缺点总结


一、朴素贝叶斯原理介绍
朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。
对于某些类型的概率模型,在监督式学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法;换而言之,在不用到贝叶斯概率或者任何贝叶斯模型的情况下,朴素贝叶斯模型也能奏效。

图片.png

二、iris数据集测试
  • 2.1 Code Sample
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB, GaussianNB, BernoulliNB, ComplementNB

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

gnb = GaussianNB()
mnb = MultinomialNB()
bnb = BernoulliNB()
cnb = ComplementNB()

gnb_y_pred = gnb.fit(X_train, y_train).predict(X_test)
mnb_y_pred = mnb.fit(X_train, y_train).predict(X_test)
bnb_y_pred = bnb.fit(X_train, y_train).predict(X_test)
cnb_y_pred = cnb.fit(X_train, y_train).predict(X_test)

for model in [gnb_y_pred,mnb_y_pred,bnb_y_pred,cnb_y_pred]:
    print("Number of mislabeled points out of a total %d points : %d" % (X_test.shape[0], (y_test != model).sum()))
  • The Result
Number of mislabeled points out of a total 45 points : 0
Number of mislabeled points out of a total 45 points : 18
Number of mislabeled points out of a total 45 points : 34
Number of mislabeled points out of a total 45 points : 18
  • 2.2 Code Sample(使用OneHot编码预处理样本数据)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB, GaussianNB, BernoulliNB, ComplementNB
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
from sklearn.datasets import load_iris
X,y = load_iris().data,load_iris().target
enc.fit(X)
array = enc.transform(X).toarray()
X_train, X_test, y_train, y_test = train_test_split(array, y, test_size=0.3, random_state=0)

gnb = GaussianNB()
mnb = MultinomialNB()
bnb = BernoulliNB()
cnb = ComplementNB()

gnb_y_pred = gnb.fit(X_train, y_train).predict(X_test)
mnb_y_pred = mnb.fit(X_train, y_train).predict(X_test)
bnb_y_pred = bnb.fit(X_train, y_train).predict(X_test)
cnb_y_pred = cnb.fit(X_train, y_train).predict(X_test)

for model in [gnb_y_pred,mnb_y_pred,bnb_y_pred,cnb_y_pred]:
    print("Number of mislabeled points out of a total %d points : %d" % (X_test.shape[0], (y_test != model).sum()))
  • The Result
Number of mislabeled points out of a total 45 points : 4
Number of mislabeled points out of a total 45 points : 4
Number of mislabeled points out of a total 45 points : 3
Number of mislabeled points out of a total 45 points : 3
使用OneHot对样本预处理之后,除了MultinomialNB精度有一定下降,其它三个算法均有显著提升。
三、算法优缺点总结

优点:

  • 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
  • 对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已;
  • 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练);
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类;
  • 朴素贝叶斯对结果解释容易理解。

缺点:

  • 需要计算先验概率;
  • 分类决策存在错误率;
  • 对输入数据的表达形式很敏感;
  • 由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。

更多参考

朴素贝叶斯分类器
机器学习实战教程(五):朴素贝叶斯实战篇之新浪新闻分类

相关文章
|
1月前
|
机器学习/深度学习 TensorFlow API
机器学习实战:TensorFlow在图像识别中的应用探索
【10月更文挑战第28天】随着深度学习技术的发展,图像识别取得了显著进步。TensorFlow作为Google开源的机器学习框架,凭借其强大的功能和灵活的API,在图像识别任务中广泛应用。本文通过实战案例,探讨TensorFlow在图像识别中的优势与挑战,展示如何使用TensorFlow构建和训练卷积神经网络(CNN),并评估模型的性能。尽管面临学习曲线和资源消耗等挑战,TensorFlow仍展现出广阔的应用前景。
57 5
|
20天前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
34 0
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
80 2
|
2月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
95 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
54 5
|
2月前
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
143 3
|
2月前
|
机器学习/深度学习 算法 数据可视化
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧2
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
43 1
|
2月前
|
数据采集 机器学习/深度学习 TensorFlow
声纹识别实战:从数据采集到模型训练
【10月更文挑战第16天】声纹识别技术通过分析个人的语音特征来验证其身份,具有无接触、便捷的特点。本文将带你从零开始,一步步完成声纹识别系统的构建,包括数据采集、音频预处理、特征提取、模型训练及评估等关键步骤。我们将使用Python语言和相关的科学计算库来进行实践。
300 0
|
2月前
|
机器学习/深度学习 程序员
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
|
3月前
|
机器学习/深度学习 算法 数据挖掘
从菜鸟到大师:Scikit-learn库实战教程,模型训练、评估、选择一网打尽!
【9月更文挑战第13天】在数据科学与机器学习领域,Scikit-learn是不可或缺的工具。本文通过问答形式,指导初学者从零开始使用Scikit-learn进行模型训练、评估与选择。首先介绍了如何安装库、预处理数据并训练模型;接着展示了如何利用多种评估指标确保模型性能;最后通过GridSearchCV演示了系统化的参数调优方法。通过这些实战技巧,帮助读者逐步成长为熟练的数据科学家。
126 3