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

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

时间:2022-11-13 17:23:15浏览次数:42  
标签:head end val proba dataSheet header 算法 实验 贝叶斯

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


班级:20大数据(3)班
学号:201613341


【实验目的】

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

【实验内容】

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

【实验报告要求】

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

image

[实验过程]

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

①读取数据

点击查看代码
import pandas as pd
import numpy as np
df=pd.read_table("贝叶斯.txt",sep='\t')
df

image

②导入数据

点击查看代码
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))

image

image

点击查看代码
# 创建一个存放判断结果的数组
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))

image

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)

image

另附文件:贝叶斯.txt

点击查看代码

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

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

相关文章

  • 实验三:朴素贝叶斯算法实验
    【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容】针对下表中的数据,编写python程序实现朴素贝叶斯算法(不使用sklearn包),对输入数据进行预测;熟悉s......
  • 软件工程第二次实验
    实验过程1.本人角色本人在本次实验中担任驾驶员;姓名:邢巧巧   学号:223201062209我的结队伙伴是:庞玮洋2232010622302.任务分工驾驶员:邢巧巧博客链接:l 负责四则......
  • 实验三:朴素贝叶斯算法
    |20大数据三班|首页-20级大数据3班机器学习-池州学院-班级博客-博客园(cnblogs.com)||201613328|博客后台-博客园(cnblogs.com)|【实验目的】理解朴素贝叶......
  • 第2-2-4章 常见组件与中台化-常用组件服务介绍-分布式ID-附Snowflake雪花算法的代码实
    目录2.3分布式ID2.3.1功能概述2.3.2应用场景2.3.3使用说明2.3.4项目截图2.3.5Snowflake雪花算法的代码实现2.3分布式ID2.3.1功能概述ID,全称Identifier,中文翻译......
  • 实验二
    一实验要求:①能够自动生成四则运算练习题②可以定制题目数量③用户可以选择运算符④用户设置最大数(如十以内、百以内等)⑤用户选择是否有括号、是否有小数......
  • 11月13日第二次实验结对项目
    2 实验步骤2.1实验过程2.1.1实验代码博客园地址代码地址2.1.2实验过程(1) 本人角色我在本次实验中将担任领航员的角色,学号是226201093102。我的结对伙伴是杨屹松......
  • k-近邻算法
    分类任务概述曼哈顿距离:|x1-x2|+|y1-y2|欧几里得距离:汉明距离:距离测量——“相似”是什么意思?2.最近邻算法提供一种思路,即:未知的豆离哪种豆最近就认为未......
  • 实验二报告
    2实验步骤2.1实验过程2.1.1实验代码给出博客园截图和网址,并附上github的代码地址。博客园截图:github的代码地址:实验二·iiani/lll@9b8bce2(github.com)2.1.2实......
  • 软件工程结对编程实验
    1.1 教学内容及要求完成结对项目,实现代码复审。1.2 实验要求首先在同学中找一个同伴,范围不限,可以在1~3班中随意组合,不要找同组的成员,女同学尽量找男同学结对,但是不......
  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。三、实验要求(一)基本要求编写Python程序,调用Ope......