博客
关于我
补集朴素贝叶斯--能够很好的捕捉少数类样本
阅读量:687 次
发布时间:2019-03-15

本文共 1700 字,大约阅读时间需要 5 分钟。

#补集朴素贝叶斯-多项式朴素贝叶斯的补充,所以也是要求特征是离散的,非连续型from sklearn.naive_bayes import ComplementNBfrom time import timeimport datetime#探索补集朴素贝叶斯在不平衡数据中的处理#探索样本不均衡问题from sklearn.preprocessing import KBinsDiscretizerfrom sklearn.datasets import make_blobsfrom sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNBfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import brier_score_loss as bs,recall_score,roc_auc_score as auc#创建数据集class1=50000class2=500centers=[[0.0,0.0],[5.0,5.0]]std=[3,1]X,y=make_blobs(n_samples=[class1,class2names=["Multinomial","Gaussian","Bernoulli","Complement"]models=[MultinomialNB(),GaussianNB(),BernoulliNB(),ComplementNB()]for clf,name in zip(models,names):    times=time()    Xtrain,Xtest,ytrain,ytest=train_test_split(X,y,test_size=0.3,random_state=420)    if name!="Gaussian":        kbs=KBinsDiscretizer(n_bins=10,encode="onehot").fit(Xtrain)        Xtrain=kbs.transform(Xtrain)        Xtest=kbs.transform(Xtest)    clf.fit(Xtrain,ytrain)    y_pred=clf.predict(Xtest)    proba=clf.predict_proba(Xtest)[:,1]    score=clf.score(Xtest,ytest)    print(name)    print("\tBrier:{:.3f}".format(bs(ytest,proba,pos_label=1)))    print("\tAccuracy:{:.3f}".format(score))    print("\tRecall:{:.3f}".format(recall_score(ytest,y_pred)))    print("\tAUC:{:.3f}".format(auc(ytest,proba)))    print(datetime.datetime.fromtimestamp(time()-times).strftime("%M:%S:%f"))],              centers=centers,              cluster_std=std,              random_state=0,              shuffle=False)
在这里插入代码片

在这里插入图片描述

在这里插入图片描述
可以发现,补集朴素贝叶斯牺牲了部分整体的精确度和布里尔指数,但是得到了十分高的召回率Recall,捕捉出了
98.7%的少数类,并且在此基础上维持了和原本的多项式朴素贝叶斯一致的AUC分数。和其他的贝叶斯算法比起来,
我们的补集朴素贝叶斯的运行速度也十分优秀。如果我们的目标是捕捉少数类,那我们毫无疑问会希望选择补集朴素
贝叶斯作为我们的算法

转载地址:http://ptrmz.baihongyu.com/

你可能感兴趣的文章
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
查看>>
Mysql 中的日期时间字符串查询
查看>>
mysql 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>