高斯朴素贝叶斯分类spambase数据集+五折交叉验证(附python代码实现)

文章介绍了如何使用Python和scikit-learn库对Spambase数据集进行五折交叉验证,通过计算特征的概率密度函数进行预测,展示了单个特征对应概率的计算方法以及整个预测过程。结果表明,尽管贝叶斯方法在某些情况下准确率仅为0.8,但文章重点在于代码实现和理论应用。

代码

import math
import numpy as np
import pandas as pd
from sklearn.model_selection import KFold
      
spambase=pd.read_csv(r"C:\Users\hina\Desktop\spambase\spambase.data",header=None)#读取文件,没有表头要加header=None
spambasedata = np.array(spambase)
np.random.shuffle(spambasedata)#打乱顺序,数据集前半部分label全为1,后半部分全为0,如果不打乱顺序的话,会导致测试集全为0
indexs=np.arange(spambasedata.shape[0])
#划分五折交叉验证
kf=KFold(n_splits=5,shuffle=False)
data=[]
for train_index , test_index in kf.split(indexs):  # 调用split方法切分数据
    data.append((spambasedata[train_index], spambasedata[test_index]))

n=0
for train, test in data:#[feature1,feature2,...,label]*length
    n+=1
    print(f"第{
     
     n}折交叉验证")
    #按照标签将训练集分类
    tarin_lable0=train[train[:,-1]==0]
    p0=tarin_lable0.shape[0]/train.shape[0]#P(lable=0)
    tarin_lable1=train[train[:,-1]==1]
    p1=tarin_lable1.shape[0]/train.shape[0]#P(lable=1)
    print("训练集中01分别占的比例(概率)为",p0,p1)

    #计算每一列的均值和方差
    mean0=np.mean(tarin_lable0[:,:-1],axis=0)
    std0=np.std(tarin_lable0[:,:-1],axis=0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值