python 朴素贝叶斯

一、实验目的

1.加深对贝叶斯原理的理解
2. 熟悉python的集成开发环境
3.掌握贝叶斯分类器的实现—西瓜判别

二、实验环境

Windows + Python3+
一台装有集成开发环境(IDE)—— PyCharm的计算机

三、实验内容

1.训练数据集

在这里插入图片描述

四、代码填写

#encoding=utf-8
import numpy as np
from math import sqrt
import csv
attr_num=[3,3,3,3,3,2]
"""
--------获取数据--------
"""
def loadCsv(filename):
    lines = csv.reader(open(filename, "r"))
    dataset = list(lines)
    for i in range(1, len(dataset)):
        dataset[i] = [float(x) for x in dataset[i]]
    result = np.array(dataset[1:])
return result[:, 1:]
"""
--------计算先验--------
通过下图实现好瓜和坏瓜的概率
 
 
 
"""
def per_problity(datasets):
pos_prob=1.0*(np.sum(datasets[:,-1]==1.0)+1)/(np.shape(datasets[0]+2))
neg_prob=1.0*(np.sum(datasets[:,-1]==0.0)+1)/(np.shape(datasets[0]+2))
return [pos_prob,neg_prob]
"""
--------根据上面的公式计算P(=X_i|C_i)--------
"""
def cond_attr_problity(datasets, testdata):
#定义返回变量,里面用于存放输出结果
#cond_result[i,0]表示第i个属性  属于pos的概率
#cond_result[i,1]表示第i个属性  属于neg的概率
cond_result = np.zeros([np.shape(datasets)[1] - 1, 2])
#提取正负样本数据集
pos_data = datasets[datasets[:, -1] == 1.0, :]
neg_data = datasets[datasets[:, -1] == 0.0, :]
#计算测试数据的各种属性概率  即测试样本属性在正负样本中的概率
#首先计算离散变量
for i in range(len(attr_num)):
    cond_result[i, 0] =1.0*(np.sum(pos_data[:,i]==testdata[0,i])+1)/(np.sum(datasets[:,-1]==1)+attr_num[i])
cond_result[i, 1]
=1.0*(np.sum(neg_data[:,i]==testdata[0,i])+1)/(np.sum(datasets[:,-1]==0)+attr_num[i])

#计算连续变量
for j in range(6, 8):
    # mean,std computation
        pos_mean = np.mean(datasets[(datasets[:,-1]==1),j])
pos_std =np.std(datasets[(datasets[:,-1]==1),j])
neg_mean =np.mean(datasets[(datasets[:,-1]==0),j])
neg_std =np.std(datasets[(datasets[:,-1]==0),j])
cond_result[j, 0] = 1.0/(sqrt(2*np.pi)*pos_std)*np.exp(
    -1*(testdata[0,j]-pos_mean)**2/(2*pos_std**2))
cond_result[j, 1] = 1.0/(sqrt(2*np.pi)*neg_std)*np.exp(
    -1*(testdata[0,j]-neg_mean)**2/(2*neg_std**2))
return cond_result
"""
--------判断函数
"""

def classify_data(cond_result, pre_result):
    pos_result = pre_result[0]
    neg_result = pre_result[1]
    for i in range(np.shape(cond_result)[0]):
        pos_result *= cond_result[i, 0]
        neg_result *= cond_result[i, 1]
    if pos_result > neg_result:
        print('好瓜')
        print("好瓜分数:",pos_result)
        print("坏瓜分数:", neg_result)
    else:
        print('坏瓜')
        print("好瓜分数:", pos_result)
        print("坏瓜分数:", neg_result)
"""
-------主函数-----
"""
def main():
    filename = 'watermelon3_0_En.csv'
    dataset = loadCsv(filename)
    testname = 'test.csv'
    testdata = loadCsv(testname)
    pre_result = pre_problity(dataset)
    cond_result = cond_attr_problity(dataset, testdata)
classify_data(cond_result, pre_result)

五.实验截图

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中的朴素贝叶斯算法可以通过sklearn库来实现。在sklearn中,有三种朴素贝叶斯算法的实现:伯努利朴素贝叶斯、高斯朴素贝叶斯和多项式朴素贝叶斯。伯努利朴素贝叶斯适用于二值型特征,高斯朴素贝叶斯适用于连续型特征,而多项式朴素贝叶斯适用于离散型特征。\[1\] 下面是使用sklearn库实现朴素贝叶斯算法的示例代码: ```python # 导入所需库 from sklearn.naive_bayes import GaussianNB, BernoulliNB # 实例化高斯朴素贝叶斯算法 gaussian_nb = GaussianNB() # 实例化伯努利朴素贝叶斯算法 bernoulli_nb = BernoulliNB() # 使用高斯朴素贝叶斯算法进行拟合和预测 gaussian_nb.fit(X_train, y_train) y_pred_gaussian = gaussian_nb.predict(X_test) # 使用伯努利朴素贝叶斯算法进行拟合和预测 bernoulli_nb.fit(X_train, y_train) y_pred_bernoulli = bernoulli_nb.predict(X_test) # 查看预测结果和预测概率 print('高斯朴素贝叶斯预测结果:', y_pred_gaussian) print('高斯朴素贝叶斯预测概率:', gaussian_nb.predict_proba(X_test)) print('伯努利朴素贝叶斯预测结果:', y_pred_bernoulli) print('伯努利朴素贝叶斯预测概率:', bernoulli_nb.predict_proba(X_test)) # 查看准确率 score_gaussian = gaussian_nb.score(X_test, y_test) score_bernoulli = bernoulli_nb.score(X_test, y_test) print('高斯朴素贝叶斯准确率:', score_gaussian) print('伯努利朴素贝叶斯准确率:', score_bernoulli) ``` 以上代码展示了如何使用sklearn库中的高斯朴素贝叶斯和伯努利朴素贝叶斯算法进行拟合、预测和评估准确率。你可以根据自己的数据类型选择适合的朴素贝叶斯算法进行分类任务。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [Python机器学习--分类算法--朴素贝叶斯算法](https://blog.csdn.net/qq_43214331/article/details/120026248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值