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

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

时间:2022-11-13 15:45:17浏览次数:41  
标签:浊响 贝叶斯 prior 算法 实验 result print class

【实验目的】

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

【实验内容】

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

【实验报告要求】

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

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

【实验代码及结果截图】

一、编写python程序实现朴素贝叶斯算法(不使用sklearn包)

#导入包
import pandas as pd
import numpy as np


#数据预处理
data=pd.read_csv("西瓜数据集3.0.txt",delimiter=',',header=None,names=['色泽','根蒂','敲声','纹理','脐部','触感','好瓜'])
x=data.drop(['好瓜'],axis=1)
y=data['好瓜']
x

y

#朴素贝叶斯算法
def nb_fit(x,y):
    classes=y.unique()
    class_count=y.value_counts()
    class_prior=(class_count+1)/(len(y)+2)#拉普拉斯平滑
    prior=dict()
    for col in x.columns:
        a=x[col].value_counts()
        for j in classes:
            p_x_y=x[(y==j).values][col].value_counts()
            for i in a.index:
                if(i in p_x_y.index):
                    prior[(col,i,j)]=(p_x_y[i]+1)/(class_count[j]+3)#拉普拉斯平滑
                else:
                    prior[(col,i,j)]=1/(class_count[j]+3)
    return classes,class_prior,prior

#预测函数
def predict(X_test):
    classes=y.unique()
    class_count=y.value_counts()
    class_prior=(class_count+1)/(len(y)+2)
    prior=dict()
    for col in x.columns:
        a=x[col].value_counts()
        for j in classes:
            p_x_y=x[(y==j).values][col].value_counts()
            for i in a.index:
                if(i in p_x_y.index):````
                    prior[(col,i,j)]=(p_x_y[i]+1)/(class_count[j]+3)#拉普拉斯平滑
                else:
                    prior[(col,i,j)]=1/(class_count[j]+3)
    result=dict()
    for c in classes:
        p_y=class_prior[c]
        p_x_y=1
        for i in X_test.items():
            p_x_y*=prior[tuple(list(i)+[c])]
        result[c]=p_y*p_x_y
    return result
print(nb_fit(x,y))

X_test={"色泽":"乌黑","根蒂":"蜷缩","敲声":"沉闷","纹理":"清晰","脐部":"凹陷","触感":"碍滑"}
X_test.items()
result=predict(X_test)
print('\n')
print(result)
print('测试数据预测类别为:',max(result,key=result.get))

输出实验结果

二、使用sklearn包编写朴素贝叶斯算法程序

#导入包
import pandas as pd
from sklearn.model_selection import train_test_split  
from sklearn.naive_bayes import GaussianNB  # 高斯分布
from sklearn.naive_bayes import MultinomialNB  # 多项式分布
from sklearn.naive_bayes import BernoulliNB #伯努利分布


#数据预处理
data=[['0','0','0','0','0','0','1'],
      ['1','0','1','0','0','0','1'],
      ['1','0','0','0','0','0','1'],
      ['0','0','1','0','0','0','1'],
      ['2','0','0','0','0','0','1'],
      ['0','1','0','0','1','1','1'],
      ['1','1','0','1','1','1','1'],
      ['1','1','0','0','1','2','1'],
      ['1','1','1','1','1','2','0'],
      ['0','2','2','0','2','1','0'],
      ['2','2','2','2','2','2','0'],
      ['2','0','0','2','2','1','0'],
      ['0','1','0','1','0','2','0'],
      ['2','1','1','1','0','2','0'],
      ['1','1','0','0','1','1','0'],
      ['2','0','0','2','2','2','0'],
      ['0','0','1','1','1','2','0']]

"""
设置数据:  青绿:0 乌黑:1 浅白:2
            蜷缩:0 稍蜷:1 硬挺:2
            浊响:0 沉闷:1 清脆:2
            清晰:0 稍糊:1 模糊:2
            凹陷:0 稍凹:1 平坦:2
            碍滑:0 软粘:1 硬滑:2
            是:1 否:0

"""

labels=['色泽','根蒂','敲声','纹理','脐部','触感','好瓜']
data2=pd.DataFrame(data,columns=labels)
x=data2.drop(['好瓜'],axis=1)
y=data2['好瓜']
#划分数据集为训练集和测试集
xtrain,xtest,ytrain,ytest=train_test_split(x,y,test_size=0.3,random_state=0)

#高斯朴素贝叶斯
Gc=GaussianNB()
Gc.fit(xtrain,ytrain)
result=Gc.predict(xtest)
print(result)
print("预测的准确率为:",Gc.score(xtest,ytest))

#多项式朴素贝叶斯
mc=MultinomialNB()
mc.fit(xtrain,ytrain)
result=mc.predict(xtest)
print(result)
print("预测的准确率为:",mc.score(xtest,ytest))

#伯努利朴素贝叶斯
bc=BernoulliNB()
bc.fit(xtrain,ytrain)
result=bc.predict(xtest)
print(result)
print("预测的准确率为:",bc.score(xtest,ytest))
#预测数据,以乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑样本属性为例
a=['1','1','1','1','1','2']
a=pd.DataFrame(a)
b=a.T
print("\n预测值为:")
print(b)
print("高斯分布预测结果为:",  Gc.predict(b))
print("多项式分布预测结果为:",mc.predict(b))
print("伯努利分布预测结果为:",bc.predict(b))

输出实验结果

【实验总结】

朴素贝叶斯算法的应用场景:
需要一个比较容易解释,而且不同维度之间相关性较小的模型的时候;
可以高效处理高维数据,虽然结果可能不尽如意;
主要运用于文本分类,垃圾邮件分类,信用评估,钓鱼网站检测等领域。

标签:浊响,贝叶斯,prior,算法,实验,result,print,class
From: https://www.cnblogs.com/yuanyou201613316/p/16886000.html

相关文章

  • 223201062506 王靖榕 223201062507 王静怡-软件工程基础Y-实验二结对项目
    沈阳航空航天大学  软 件 工 程 基 础实验报告 实验名称:实验二实验题目:结对项目   专   业软件工程学   号22320......
  • 算法题--斐波那契数列
    9要求时间限制:1秒空间限制:32768K题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39解题思路这道题可以直接用递归来解决,但......
  • 实验二
    实验代码https://github.com/gguorui/dianti实验过程(1)本人角色   本次结对项目中担任驾驶员,结对伙伴(领航员):荆雪冰223201062102。(2)成员定位驾驶员:郭蕊能够......
  • 223201062521黄宇轩 223201062523李凌桦 实验二结对项目
    沈阳航空航天大学  软  件  工 程 基 础实验报告 实验名称:实验二实验题目:结对项目   专   业软件工程学   号223......
  • 实验二四则运算
    一.任务分工驾驶员:孙钰欣,负责编写代码,对同伴做出评价领航员:吕浩,辅助驾驶员完成代码,设计单元测试用例,对同伴做出评价。二.代码审查功能模块名称四则运算 审查人......
  • 实验1:SDN拓扑实践
    (一)基本要求使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py。使用Mininet的命令行生成如下拓扑:a)3台交换机,每个交换机连接1台主机,3台交换机连接成......
  • 实验2:Open vSwitch虚拟交换机实践
    一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的O......
  • 软件工程实验二 选做
    选做题实验过程一、题目要求(1)  从以往个人完成的项目中选择一个作品,例如:以往的具有比较完整功能的小系统,代码至少要大于100行。(2)  将代码上传至个人GitHub系统中,并......
  • 软件工程第二次实验
    一、题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题我们在刚开始上课......
  • 艾婷婷实验二结对四则运算
    一、代码审查表结对同学姓名:高宏鑫领航员(艾婷婷)代码地址https://github.com/1att2/hello/blob/main/%E8%89%BE%E5%A9%B7%E5%A9%B7%E5%AE%9E%E9%AA%8C%E4%BA%8C驾驶员(高......