统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

统计学习方法第二章:感知机(perceptron)算法及python实现
统计学习方法第三章:k近邻法(k-NN),kd树及python实现
统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现
统计学习方法第五章:决策树(decision tree),CART算法,剪枝及python实现
统计学习方法第五章:决策树(decision tree),ID3算法,C4.5算法及python实现

完整代码:
https://github.com/xjwhhh/LearningML/tree/master/StatisticalLearningMethod
欢迎follow和star

朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。

对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。

朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常用的方法

下图是朴素贝叶斯算法:

朴素贝叶斯算法

具体的解释和证明可以看《统计学习方法》或其他博文,这里不再赘述

python代码实现,使用MINST数据集,为了避免概率值为0的情况,使用贝叶斯估计:

import cv2
import time
import logging
import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


def log(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        logging.debug('start %s()' % func.__name__)
        ret = func(*args, **kwargs)

        end_time = time.time()
        logging.debug('end %s(), cost %s seconds' % (func.__name__, end_time - start_time))

        return ret

    return wrapper


# 二值化,将图片进行二值化的目的是确定每个特征可选的值只有两种,对应于train方法里conditional_probability最后一个维度的长度2
def binaryzation(img):
    cv_img = img.astype(np.uint8)
    cv2.threshold(cv_img, 50, 1, cv2.THRESH_BINARY_INV, cv_img)
    return cv_img


@log
def train(train_set, train_labels):
    class_num = len(set(train_labels))
    feature_num = len(train_set[0])
    prior_probability = np.zeros(class_num)  # 先验概率
    conditional_probability = np.zeros((class_num, feature_num, 2))  # 条件概率
    print(conditional_probability.shape)

    for i in range(len(train_labels)):
        img = binaryzation(train_set[i])  # 图片二值化
        label = train_labels[i]

        prior_probability[label] += 1

        for j in range(feature_num):
            conditional_probability[label][j][img[j]] += 1

    # 贝叶斯估计,因为分母都相同,所以先验概率和条件概率都不用除以分母
    prior_probability += 1
    for label in set(train_labels):
        for j in range(feature_num):
            conditional_probability[label][j][0] += 1
            conditional_probability[label][j][0] /= (len(train_labels[train_labels == label]) + 2 * 1)
            conditional_probability[label][j][1] += 1
            conditional_probability[label][j][1] /= (len(train_labels[train_labels == label]) + 2 * 1)

    # print(prior_probability)
    # print(conditional_probability)
    return prior_probability, conditional_probability


@log
def predict(test_features, prior_probability, conditional_probability):
    result = []
    for test in test_features:
        img = binaryzation(test)

        max_label = 0
        max_probability = 0

        for i in range(len(prior_probability)):

            # print("label",i)
            probability = prior_probability[i]
            for j in range(len(img)):  # 特征长度
                # print("j",j)
                probability *= int(conditional_probability[i][j][img[j]])
            if max_probability < probability:
                max_probability = probability
                max_label = i
        result.append(max_label)
    return np.array(result)


if __name__ == '__main__':
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    raw_data = pd.read_csv('../data/train.csv', header=0)
    data = raw_data.values

    imgs = data[0:2000, 1:]
    labels = data[0:2000, 0]

    # print(imgs.shape)

    # 选取 2/3 数据作为训练集, 1/3 数据作为测试集
    train_features, test_features, train_labels, test_labels = train_test_split(imgs, labels, test_size=0.33,random_state=1)

    prior_probability, conditional_probability = train(train_features, train_labels)
    test_predict = predict(test_features, prior_probability, conditional_probability)
    score = accuracy_score(test_labels, test_predict)
    print("The accuracy score is ", score)
贝叶斯估计及其python实现 估计结果来看,贝叶斯估计对总体均值的估计误差较小。 阅读详情

相关推荐

贝叶斯估计python 版)

一、实现例子例子:李航《统计学方法》例4.1二、最终效果三、代码实现import numpy as np train_data = np.array([[1, "S", -1], [1, "M", -1], [1, "M", 1], [1, "S", 1], [1, "S", -1], [2, "S", -1], [2, "M", -1], [2,

W_peijian的博客 4624

贝叶斯方法预测的demo(Python版本)

贝叶斯方法预测的demo(Python版本),采用python的sklearn包实现

Python机器学习 — 朴素贝叶斯Naive Bayes

一、朴素贝叶斯 -- 简介        朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。       和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier,或 NBC)发源于古典数学理论,有着坚实的数学基础,...

ls秦 2万+

朴素贝叶斯的matlab程序实现(极大似然估计贝叶斯估计

朴素贝叶斯,matlab程序,极大似然估计贝叶斯估计

使用python进行贝叶斯统计分析

本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. 贝叶斯公式 "真实值是否等于X?"或者说"给定数据,对于感兴趣的参数,可能值的概率分布是多少?"我把我的硬币抛了 n次,正面是 h次。 这枚硬币是有偏的吗? 数据 MCMC Inference Button (TM) 结果 In [10]: 我有一个新开发的X; X在阻止流感病毒复制方面有多好?测试X的浓度范围, 测量流感活性计算 IC50: 能够抑制病毒复制活性50%的X浓度. 参数化问

拓端研究室TRL 1508

贝叶斯模型的一个简单例子及python实现

本文介绍一个贝叶斯推断的python实现例,并展现了基于标量运算的实现和基于numpy的矩阵运算的实现之间的差别。

chenxy_bwave的专栏 1万+

朴素贝叶斯python实现

朴素贝叶斯 是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定数据集,首先基于特征条件独立假设学习输入输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。 式(2)为极大似然估计。 # 先验概率 def pAbusice(self, labels): N = len(labels) label = dict(Counter(labels)) pa = {} for key, val in

qq_43683133的博客 1099

深入理解朴素贝叶斯Naive Bayes

朴素贝叶斯是经典的机器学习算之一,也是为数不多的基于概率论的分类算朴素贝叶斯原理简单,也很容易实现,多用于文本分类,比如垃圾邮件过滤。该算虽然简单,但是由于笔者不常用,总是看过即忘,这是写这篇博文的初衷。当然,更大的动力来在于跟大家交流,有论述不妥的地方欢迎指正。

li8zi8fa的博客 9万+

Naive Bayes朴素贝叶斯

朴素贝叶斯的概念介绍以及参数估计

假装有标题 2万+

【机器学习】朴素贝叶斯Naive Bayes,NB)

作者:田志晨 来源:小田学Python贝叶斯分类算是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算。在许多场合,朴素贝叶斯(Naïve Bayes,N...

数据森麟 9549

【ML】朴素贝叶斯分类器及Python手写实现(详细)

本篇文章介绍了朴素贝叶斯分类器(Naive Bayes,NB)的工作原理以及使用Python实现NB,这里介绍了3种代码:使用西瓜集3.0手写NB、使用鸢尾花数据集手写NB、使用鸢尾花数据集使用机器学习第三方库实现NB

weixin_66845445的博客 1万+

mnist手写字的knn ,naive bayes,svm实现

机器学习大作业,用matlab对mnist手写字分类,包含knn bayes 和svm算

贝叶斯估计2

贝叶斯估计Bayesian estimation)是利用贝斯定理结合新的证据及以前的先验概率,来得到新的概率。它提供了一种计算假设概率的方法,基于假设的先验概率、给定假设下观察到不同数据的概率以及观察到的数据本身。

机器学习算朴素贝叶斯Naive Bayes)--第二篇

引言 如果你对朴素贝叶斯的原理不太清楚,请看我的第一篇文章:http://blog.csdn.net/xlinsist/article/details/51236454 这篇文章主要介绍将朴素贝叶斯模型应用到文本分类任务的技巧和方法。 词袋模型(The Bag of Words Model) 对于机器学习算来说,特征的选择是一个很重要的过程。那么如何从文本训练集中选出好的特征呢?在自

踩风火轮的乌龟 1万+

朴素贝叶斯(Naive Bayes)算python实现 含源代码

原理不在赘述,请参考: 朴素贝叶斯分类算 将代码保存为.py格式,默认使用的数据是代码文件所在目录下data目录下的 bayes_train.txt 和bayes_test.txt 两个文件分别作为训练样例和测试样例。以上参数可以在源代码中修改,也可以使用命令行参数传入,参考以下启动方式: python bayes.py bayes_train.txt bayes_test

seekerhit的博客 1万+

机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

朴素贝叶斯Naive Bayes, NB) 是机器学习中一种基于贝叶斯定理的算。它假设输入的特征之间相互独立且对分类结果的影响是等同的,因此称为朴素贝叶斯。具体来说,它通过计算先验概率和条件概率来确定输入样本所属的分类,其中先验概率指的是每个分类在整个数据集中出现的概率,条件概率指的是给定某个分类的情况下,输入样本在各个特征上的概率分布。在实际应用中,朴素贝叶斯常用于文本分类、垃圾邮件过滤等任务中,具有计算速度快、对数据量不敏感等优点。

m0_62237233的博客 8688

【手写算实现】 之 朴素贝叶斯 Naive Bayes

【手写算实现】 之 朴素贝叶斯 Naive Bayes朴素贝叶斯模型(naive bayes)属于分类模型,也是最为简单的概率图模型,对于之后理解HMM、CRF等模型,大有裨益。这里手写算介绍一下朴素贝叶斯模型。.........

风信子的猫Redamancy的快乐星球 6336

机器学习——朴素贝叶斯Naive Bayes)详解及其python仿真

朴素贝叶斯(naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯实现简单,学习与预测的效率都很高,是一种常用的方法

nnn0245的博客 2041

通俗易懂之朴素贝叶斯Naive Bayes)原理及其python实现(不依赖高级库)

*朴素贝叶斯Naive Bayes)**是一类基于贝叶斯定理并假设特征之间相互独立的概率分类算。尽管这个独立性假设在实际应用中往往不成立,但朴素贝叶斯在许多实际任务中表现出色,尤其在文本分类(如垃圾邮件检测)和情感分析中具有广泛应用。主要类别高斯朴素贝叶斯(Gaussian Naive Bayes):假设特征服从高斯分布,适用于连续特征。多项式朴素贝叶斯(Multinomial Naive Bayes):适用于多项式分布的数据,常用于文本文档的词频统计。

qq_31763735的博客 1847
上一篇: 统计学习方法第三章:k近邻法(k-NN),kd树及python实现
下一篇: 统计学习方法第五章:决策树(decision tree),CART算法,剪枝及python实现
不晓得X
博客等级 码龄10年 114粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值