首页 > 编程语言 >NaiveBayes算法设计

NaiveBayes算法设计

时间:2024-07-05 19:30:57浏览次数:18  
标签:num probability conditional feature len NaiveBayes 算法 train 设计

一、朴素贝叶斯算法公式:

二、程序设计:

import numpy as np

#构造NB分类器

def Train(X_train, Y_train, feature):

    global class_num,label

    class_num = 2           #分类数目

    label = [1, -1]         #分类标签

    feature_len = 3         #特征长度

    #构造3×2的列表

    feature = [[1, 'S'],    

               [2, 'M'],

               [3, 'L']]

    prior_probability = np.zeros(class_num)                         # 初始化先验概率

    conditional_probability = np.zeros((class_num,feature_len,2))   # 初始化条件概率

    

    positive_count = 0     #统计正类

    negative_count = 0     #统计负类

    for i in range(len(Y_train)):

        if Y_train[i] == 1:

            positive_count += 1

        else:

            negative_count += 1

    prior_probability[0] = positive_count / len(Y_train)    #求得正类的先验概率

    prior_probability[1] = negative_count / len(Y_train)    #求得负类的先验概率

    

    '''

    conditional_probability是一个2*3*2的三维列表,第一维是类别分类,第二维和第三维是一个3*2的特征分类

    '''

    #分为两个类别

    for i in range(class_num):

        #对特征按行遍历

        for j in range(feature_len):

            #遍历数据集,并依次做判断

            for k in range(len(Y_train)):

                if Y_train[k] == label[i]: #相同类别

                    if X_train[k][0] == feature[j][0]:

                        conditional_probability[i][j][0] += 1

                    if X_train[k][1] == feature[j][1]:

                        conditional_probability[i][j][1] += 1

    class_label_num = [positive_count, negative_count]  #存放各类型的数目

    for i in range(class_num):

        for j in range(feature_len):

            conditional_probability[i][j][0] = conditional_probability[i][j][0] / class_label_num[i]  #求得i类j行第一个特征的条件概率

            conditional_probability[i][j][1] = conditional_probability[i][j][1] / class_label_num[i]  #求得i类j行第二个特征的条件概率

    return prior_probability,conditional_probability

#给定数据进行分类

def Predict(testset, prior_probability, conditional_probability, feature):

    result = np.zeros(len(label))

    for i in range(class_num):

        for j in range(len(feature)):

            if feature[j][0] == testset[0]:

                conditionalA = conditional_probability[i][j][0]

            if feature[j][1] == testset[1]:

                conditionalB = conditional_probability[i][j][1]

        result[i] = conditionalA * conditionalB * prior_probability[i]

    result = np.vstack([result,label])

    return result

def main():

    X_train = [[1, 'S'], [1, 'M'], [1, 'M'], [1, 'S'],  [1, 'S'],

               [2, 'S'], [2, 'M'], [2, 'M'], [2, 'L'],  [2, 'L'],

               [3, 'L'], [3, 'M'], [3, 'M'], [3, 'L'],  [3, 'L']]

    Y_train = [-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1]   

    #构造3×2的列表

    feature = [[1, 'S'],    

               [2, 'M'],

               [3, 'L']]

    testset = [2, 'S']

    

    prior_probability, conditional_probability= Train(X_train, Y_train, feature)

    

    result = Predict(testset, prior_probability, conditional_probability, feature)

    print(result)

if __name__ == '__main__':

    main()

三、实验结果:

标签:num,probability,conditional,feature,len,NaiveBayes,算法,train,设计
From: https://blog.csdn.net/2302_77382298/article/details/140216696

相关文章

  • 动态规划--打家劫舍-零钱兑换-算法刷题01
    目录1.概念2.打家劫舍3零钱兑换1.概念关于动态规划这类问题强烈建议学完下面的帖子:https://blog.csdn.net/qq_16664581/article/details/89598243理解动态规划的使用场景强烈建议读一下这个故事:https://www.cnblogs.com/sdjl/articles/1274312.html步骤:确定问题(可能......
  • 【粉丝免费】基于粒子群算法和雾凇算法求解发电机经济负荷调度优化问题,最低成本 含机
    %电力系统参数num_generators=5;%发电机数量load_demand=1000;%负荷需求(MW)%发电机参数generator_capacity=[200,300,250,150,200];%发电机容量(MW)generator_cost=[10,12,11,9,10];%发电机成本($/MWh)%粒子群算法参数num_particles=50;%......
  • 模拟集成电路设计系列博客——9.3 采样保持电路
    模拟集成电路设计9.3采样保持电路采样保持电路是集成电路中的一个重要组件,尤其是在数据转换器中。在许多情况下,使用采样保持(在数据转换器的前端)可以大大减少由于转换器内部操作中的延迟时间略有不同而导致的误差。采样保持电路的一种最简单的实现方式如下图所示,当\(\phi_{clk}......
  • 蓝牙音箱App设计总结
    前言最近做了一个关于带Soundbar的智能电视的蓝牙项目,就是将电视Soundbar当作蓝牙音箱,将手机、电脑等设备的声音传输到电视,通过电视Soundbar播放声音。做这个项目的时候遇到了各种大大小小的问题,好在都解决了。本篇文章总结了在设计蓝牙相关的项目时需要了解的小知识以及要考......
  • 设计模式学习(二)工厂模式——抽象工厂模式
    目录背景抽象工厂模式优点与缺点背景现在我需要开发一个相机操作模块,它可能在Windows下运行,也可能在Linux下运行。由于在厂家提供的SDK中,Windows下的SDK和Linux下的SDK是有区别的,因此我们要创建两个类去封装这两个不同平台下的API。我们先使用工厂方法模式去设计(以Basler相机为......
  • 代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    110平衡二叉树1classSolution{2public:3intGetHeight(TreeNode*root){4if(!root){5return0;6}7intleftHeight=GetHeight(root->left);8if(leftHeight==-1)ret......
  • 代码随想录算法训练营第五十二天 | 647.回文子串 516.最长回文子序列
    647.回文子串题目链接文章讲解视频讲解动态规划法动规五部曲:dp[i][j]:表示区间范围[i,j]的字串是否是回文串如果dp[i]表示下表为i的字符串有dp[i]个回文串的话,写不出递推公式,因为dp[i]和dp[i-1]没有什么关系,但如果已经知道i-j位置的字符串已经是回文串的话,只需判断i-1......
  • 【设计模式(七)】结构型模式--适配器模式
    定义:​ 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。把适配者类通过适配器转化为目标接口。例如下图的将三角接口转换成我们希望的二角接口适配器模式(Adapter)包含以下主要角色:目标(Target)接口:当前系统业务所期待的......
  • 工地/矿区/电力/工厂/环卫视频智能安全监控反光衣AI检测算法的原理及场景应用
    一、引言随着科技的快速发展,特别是在智能交通和安全生产领域,对于夜间或弱光环境下的人员识别和安全监控需求日益凸显。反光衣作为一种重要的安全装备,被广泛应用于道路施工、工地作业、夜间巡逻、安全生产等场景,旨在提高人员的可见性,降低事故发生的概率。为满足这一需求,反光衣......
  • 【代码随想录】【算法训练营】【第55天】 [42]接雨水 [84]柱状图中最大的矩形
    前言思路及算法思维,指路代码随想录。题目来自LeetCode。day55,又是一个周一,不能再坚持~题目详情[42]接雨水题目描述42接雨水解题思路前提:雨水形成的情况是凹的,需要前中后3个元素,计算该元素左右两侧的第一个大于该高度的高度思路:单调递增栈重点:单调栈的思......