美文网首页
机器学习-朴素贝叶斯

机器学习-朴素贝叶斯

作者: 今天也是努力的小张 | 来源:发表于2020-12-15 19:31 被阅读0次

一、算法原理

1. 原理

朴素贝叶斯(Naive Bayesian)是基于贝叶斯定理和特征条件独立假设的分类方法。它通过特征计算分类的概率,选取概率大的情况,是基于概率论的一种机器学习分类(监督学习)方法,被广泛应用于情感分类领域的分类器。

2. 特点:

优点:

  • 在数据较少的情况下仍然有效
  • 可以处理多类别问题
  • 可以增量式学习

增量式学习:数据量很大的情况下进行数据拟合,很难将数据一次性拟合完成,可以使用部分数据进行拟合(批次送入)的方法。但是注意,第一次时,需要传入类别。具体方法是:nb.partial_fit()

nb.partial_fit(X_train[:300], y_train[:300], classes=[0,1])
nb.partial_fit(X_train[300:], y_train[300:])

缺点:

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

如输入法快速匹配这样的功能或软件, 比如你输入几个中文字符机器就会识别出你还没输入但是最可能输入的其他字符,能够快速帮你输入你想输入的东西,表现出的状态就是机器很懂你。搜索引擎中模糊查询的关键词的快速识别,可以在下拉栏中预测出你想输入的完整答案甚至比你还懂你自己的答案都是贝叶斯算法的功劳。其他类型的还包括大部分跟简单模式识别相关的应用都是跟贝叶斯算法有关的。

二、朴素贝叶斯——朴素(相互对立性)

朴素贝叶斯算法:假设各个特征之间相互独立

为什么要假设特征之间相互独立?
1.现实生活中,某一事件的特征非常多的时候,通过统计来估计后面概率的值几乎不可做。
2.反推:假设特征之间没有相互独立,统计的时候就要在整个特征空间中找,在某一条件下全部满足所有特征,这样的话,由于数据的稀疏性,很容易统计到0的情况,这样不合适。
综上:朴素贝叶斯算法对条件概率分布做了条件独立性的假设,这一假设是的朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。

三、分类(API)

1. 多项式朴素贝叶斯

导入:from sklearn.naive_bayes import MultinomialNB # 多项式朴素贝叶斯
实例化:nb = MultinomialNB()
应用:主要用于文本分类,可以参考多项式朴素贝叶斯应用

2. 伯努利朴素贝叶斯

特点:特征只有0和1
导入:from sklearn.naive_bayes import BernoulliNB # 伯努利朴素贝叶斯
实例化:nb = BernoulliNB()
应用:用于离散化特征的二分类预测
方法:
a. 预测:nb.predict(‘要预测的变量’)
b. 计算概率:nb.precdict_proba(‘要预测的变量’)
简单代码示例:

from sklearn.naive_bayes import MultinomialNB   # 多项式朴素贝叶斯
from sklearn.naive_bayes import BernoulliNB   # 伯努利朴素贝叶斯
from sklearn.naive_bayes import GaussianNB   # 高斯朴素贝叶斯

X = [
    [0, 1, 0],
    [1, 1, 1],
    [0, 1, 1],
    [0, 0, 0],
    [1, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
]

y = [0, 1, 1, 0, 1, 0, 0]

# 伯努利朴素贝叶斯: 特征只有0和1
nb = BernoulliNB()
# 拟合
nb.fit(X, y)
y_pred = nb.predict(X)
print('预测结果:', y_pred)
print('得分:', nb.score(X, y))

# 刮北风,没有闷热,多云
day1 = [[1, 0, 1]]
print('预测结果:', nb.predict(day1))
# 底层处理:将算出来的概率重新整理使其相加得1
print('预测概率', nb.predict_proba(day1))

3. 高斯朴素贝叶斯

导入:from sklearn.naive_bayes import GaussianNB # 高斯朴素贝叶斯
实例化:nb = GaussianNB()
应用:用于分类的数值预测

4. 总结

  • 三个API的标签都可以是多个类别,他们之间的不同主要是对特征的约束不同
  • 伯努利朴素贝叶斯适合于特征为0和1的,但是特征不是0、1型数据,可以使用伯努利贝叶斯,只是效果没有高斯效果好。
  • 特征是高斯分布(正态分布),或者其他有正负或者浮点的特征数据,虽然数据不完全满足高斯分布,但是高斯朴素贝叶斯可以用于解决生活中大部分分类任务。
  • 特征数量多的情况,伯努利和高斯的效果都比较好。
  • 特征数量少的情况,高斯比伯努利效果好。
  • 多项式朴素贝叶斯特征值不能为负数,最好是正整数,通常使用词出现的次数作为特征值(文本数据特征),多项式朴素贝叶斯适合的场景就是文本分类,情感分析和垃圾邮件识别。

四、概率

1. 概率:通过概率来衡量事件发生的可能性

概率论和统计学是两个相反的概念,统计学是抽取 部分样本统计来估算总体情况,而概率论是通过总体情况来估计单个事件或部分事情的发生情况。概率论需要已知数据去预测未知的事件。

2. 条件概率

条件概率

3. 全概率

全概率公式主要用途在于它可以将一个复杂的概率计算问题,分解为若干个简单事件的概率计算问题,最后应用概率的可加性求出最终结果。

全概率 全概率例题

4. 贝叶斯公式

现在已知事件A确实已经发生,若要估计它是由原因 Bi 所导致的概率,则可用 Bayes 公式求出。

贝叶斯公式 贝叶斯公式例题

机器学习相关方法

1. 内部相关数据集

from sklearn.datasets import make_blobs

# 参数
# n_samples=100 样本数
# n_features=2  特征数
# centers 标签有多少种,默认产生3个类别----通常类别是均匀的
data = make_blobs(100, 2, centers=2)
""" 判断肿瘤是恶性还是良性的案例"""
# 从机器学习内部数据集导入数据集
from sklearn.datasets import load_breast_cancer
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import BernoulliNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import numpy as np

# out = load_breast_cancer()
# 返回形式为字典
# print(out.keys())

# 数据集的描述
out = load_breast_cancer()
# 变量赋值
X, y = out.data, out.target

# print(out["DESCR"])  # 打印数据集的描述信息:569个样本,30个属性
print("特征\n", X)
print("标签\n", np.unique(y))    #  [0 1]

# 使用哪个朴素贝叶斯----高斯
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.2,
                                                    random_state=1,
                                                    stratify=y,
                                                    )

# 算法过程
# nb = GaussianNB()   # 0.93859
# nb = BernoulliNB()   #0.6315
# nb = MultinomialNB()    # 0.92105263

# KNN算法
nb = KNeighborsClassifier()  # 0.956140

# 拟合
nb.fit(X_train, y_train)

# 查看准确率
print("准确率", nb.score(X_test, y_test))

2. 训练集和测试集拆分

from sklearn.model_selection import train_test_split  # 训练集测试集拆分

X_train, X_test, y_train, y_test = train_test_split(feature,
                                                    label,
                                                    test_size=0.2,   # 20%的数据作为测试集
                                                    random_state=1,   # 拆分为随机拆分,可以设置随机种子
                                                    stratify=label,   # 保证拆分后类别比例,和原始数据集类别比例一致
                                                    )

相关文章

  • 机器学习实战 朴素贝叶斯

    title: 朴素贝叶斯 机器学习实战date: 2019-07-28tags: 机器学习 贝叶斯categori...

  • 机器学习数学原理(4)——朴素贝叶斯模型

    机器学习数学原理(4)——朴素贝叶斯模型 朴素贝叶斯模型(Naive Bayes Model),是一种基于贝叶斯定...

  • 朴素贝叶斯

    学习机器学习最简单的算法可以说就是 朴素贝叶斯了,今天分享下自己的学习心得。 什么是贝叶斯,什么是朴素贝叶斯 贝叶...

  • 朴素贝叶斯法

    朴素贝叶斯法 朴素贝叶斯法的学习与分类 朴素贝叶斯法的参数估计 朴素贝叶斯实现 高斯朴素贝叶斯实现 使用 skle...

  • 朴素贝叶斯分类算法

    朴素贝叶斯分类算法多项式和高斯朴素贝叶斯的解释 朴素贝叶斯是一种有监督的机器学习方法,是概率分类器家族的一员。它采...

  • Task4

    传统机器学习 一、朴素贝叶斯朴素贝叶斯(naïve Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。对...

  • 机器学习 Day 12 | 朴素贝叶斯基础

    机器学习第十二天 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均...

  • Scikit-Learn 朴素贝叶斯分类丨数析学院

    朴素贝叶斯分类是机器学习中常见的分类方法之一,本节将带大家深入学习一下 Scikit-Learn 中朴素贝叶斯分类...

  • 朴素贝叶斯法解析实践

    教材选用《统计学习方法》,第一版,李航著;代码取自《机器学习实战》,人民邮电出版社; 朴素贝叶斯介绍 朴素贝叶斯法...

  • 算法笔记(7)-朴素贝叶斯算法及Python代码实现

    朴素贝叶斯算法有三种类型,分别是贝努利朴素贝叶斯、高斯贝叶斯、多项式朴素贝叶斯。 贝叶斯公式 贝努利朴素贝叶斯 适...

网友评论

      本文标题:机器学习-朴素贝叶斯

      本文链接:https://www.haomeiwen.com/subject/guhogktx.html