首页 > 编程语言 >实验三:朴素贝叶斯算法实验

实验三:朴素贝叶斯算法实验

时间:2022-11-12 11:11:41浏览次数:38  
标签:head end val proba dataSheet header 算法 实验 贝叶斯

【实验目的】

理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。

【实验内容】

针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包),对输入数据进行预测;
熟悉sklearn库中的朴素贝叶斯算法,使用sklearn包编写朴素贝叶斯算法程序,对输入数据进行预测;

【实验报告要求】

对照实验内容,撰写实验过程、算法及测试结果;
代码规范化:命名规则、注释;
查阅文献,讨论朴素贝叶斯算法的应用场景。

 

色泽 根蒂 敲声 纹理 脐部 触感 好瓜
青绿 蜷缩 浊响 清晰 凹陷 碍滑
乌黑 蜷缩 沉闷 清晰 凹陷 碍滑
乌黑 蜷缩 浊响 清晰 凹陷 碍滑
青绿 蜷缩 沉闷 清晰 凹陷 碍滑
浅白 蜷缩 浊响 清晰 凹陷 碍滑
青绿 稍蜷 浊响 清晰 稍凹 软粘
乌黑 稍蜷 浊响 稍糊 稍凹 软粘
乌黑 稍蜷 浊响 清晰 稍凹 硬滑
乌黑 稍蜷 沉闷 稍糊 稍凹 硬滑
青绿 硬挺 清脆 清晰 平坦 软粘
浅白 硬挺 清脆 模糊 平坦 硬滑
浅白 蜷缩 浊响 模糊 平坦 软粘
青绿 稍蜷 浊响 稍糊 凹陷 硬滑
浅白 稍蜷 沉闷 稍糊 凹陷 硬滑
乌黑 稍蜷 浊响 清晰 稍凹 软粘
浅白 蜷缩 浊响 模糊 平坦 硬滑
青绿 蜷缩 沉闷 稍糊 稍凹 硬滑

【实验过程】

1、编写python程序实现朴素贝叶斯算法,对输入数据进行预测

import pandas as pd
import numpy as np
df=pd.read_table("贝叶斯.txt",sep='\t')
df
import json
import numpy as np
import pandas as pd

# 导入数据/生成数据表
dataSheet = df
# print(dataSheet)
# 预数据
data_proba = {}
# 标签/列名称
header = dataSheet.columns
# 案例个数/行数
length = dataSheet.shape[0]
# 数据表值
values = dataSheet.values
# 最后一列的不重复数据
end_unique = dataSheet[header[-1]].unique()
# 遍历
for end in end_unique:
    # [header[-1]==end]时end出现的次数
    end_sum = dataSheet[dataSheet[header[-1]].isin([end])].shape[0]
    # [header[-1]==end]时end出现的频率
    end_proba = dataSheet[dataSheet[header[-1]].isin([end])].shape[0] / length
    # 预保存
    data_proba[end] = {'proba': end_proba, 'data': {}}
    # 遍历标签/列名称
    for head in header[:-1]:
        # 初始化
        data_proba[end]['data'][head] = {}
        # 该标签/名称下不重复值
        head_unique = dataSheet[head].unique()
        # 遍历属性
        for head_val in head_unique:
            # [header[-1]==end]时head_val出现的次数
            head_val_sum = dataSheet[dataSheet[head].isin([head_val]) & dataSheet[header[-1]].isin([end])].shape[0]
            # [header[-1]==end]时head_val出现的频率
            head_val_proba = head_val_sum / end_sum
            # 预保存
            data_proba[end]['data'][head][head_val] = head_val_proba
# 打印结果
print(json.dumps(data_proba, indent=4, ensure_ascii=False))
# 创建一个存放判断结果的数组
new = np.empty((length, 1), str)

# 遍历values的每一行
for val_num in np.arange(length):
    judge = {}
    # 遍历最后一列不重复数据
    for end in end_unique:
        # 标签/列名称除最后一列的数量
        header_sum = len(header[:-1])
        # 创建一个临时存放数据的数组
        tempor = np.empty(header_sum + 1, float)
        # 最后一个标签/列名称的属性对应的先验概率
        end_proba = data_proba[end]['proba']
        # 加1处理
        end_proba += 1
        # 临时保存
        tempor[-1] = end_proba
        # 遍历除最后一行的标签/列名称
        for head_num in np.arange(header_sum):
            # 标签/列名称
            head = header[head_num]
            # 该标签/列名称下的属性
            val = values[val_num][head_num]
            # 属性对应的先验概率
            head_val_proba = data_proba[end]['data'][head][val]
            # 加1处理
            head_val_proba += 1
            # 临时保存
            tempor[head_num] = head_val_proba
        # 对数据log处理并求和保存
        temp = np.log(tempor).sum()
        judge[temp] = end
    # 提取后验概率较大的值
    judge_max = np.max(list(judge.keys()))
    # 保存预测结果
    new[val_num] = judge[judge_max]
# 将预测结果添加到数据表新列
dataSheet['new'] = new
# 预测正确的数量
rate = dataSheet[dataSheet[header[-1]] == dataSheet['new']].shape[0]
# 打印数据表
print(dataSheet)
# 准确率
print('准确率: {rate:.7f}%'.format(rate=100 * rate / length))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 2、使用sklearn包编写朴素贝叶斯算法程序,对输入数据进行预测

#熟悉sklearn库中的朴素贝叶斯算法,使用sklearn包编写朴素贝叶斯算法程序,对输入数据进行预测
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
#载入数据集
X,y=load_iris(return_X_y=True)
bayes_modle=GaussianNB()
#训练数据
bayes_modle.fit(X,y)
#使用模型进行分类预测
result=bayes_modle.predict(X)
print(result)
#对模型评分
model_score=bayes_modle.score(X,y)
print(model_score)

 

 

 

标签:head,end,val,proba,dataSheet,header,算法,实验,贝叶斯
From: https://www.cnblogs.com/zcqs-001/p/16880322.html

相关文章

  • 《STM32MP1 M4裸机HAL库开发指南》第二十章 串口通信实验
    第二十章串口通信实验​本章节我们来学习STM32MP1的串口使用方法,并通过串口发送和接收数据。​本章将分为如下几个小节:​20.1、串口简介;​20.2、STM32MP1串口简介;​20.......
  • [回溯算法]leetcode216. 组合总和 III(c实现)
    题目找出所有相加之和为 n的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次 返回所有可能的有效组合的列表。该列表不能包含相同的组合两次......
  • KMP算法
    KMP算法是一个字符串匹配算法,或者说是一个子字符串匹配算法算法在字符串str中搜索子串pattern,如果存在,返回这个子串的起始索引,如果不存在,返回-1暴力枚举匹配暴力的字符......
  • 基于prim算法的网络最小生成树生成得到路径规划
    目录​​一、理论基础​​​​二、核心程序​​​​三、测试结果​​一、理论基础    普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由......
  • 每日算法题之扑克牌顺子
    JZ61扑克牌顺子描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:1.A为1,J为11,Q为12,K为13,A不能视为142.大、小王为0,0可以看......
  • 回溯算法解数独问题
    好久没写算法了,浅解个数独本篇代码以伪代码为主,主要讲解解题思路规则介绍:首先数独的游戏规则,每个九宫格每一行每一列每个数字只能出现一次(1-9)开局时会生成一些不......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实......
  • 基于prim算法的网络最小生成树生成得到路径规划
    目录一、理论基础二、核心程序三、测试结果一、理论基础普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的......
  • 道长的算法笔记:二分图匹配
    二分图的概念二分图又称作二部图,是图论中的一种特殊模型。假设\(G=(V,E)\)是一个无向图,如果顶点\(V\)能够分割为两个互不相交的子集\((S,T)\),并且图中的每条边\((......
  • Python实验报告——第10章 文件及目录操作
    实验报告实例01:创建并打开记录蚂蚁庄园动态的文件代码如下:print('\n','='*10,'蚂蚁庄园动态','='*10)file=open('message.txt','w')print('\n即将显示……\n')......