from sklearn.datasets import load_breast_cancer
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB,GaussianNB,MultinomialNB
import numpy as np
#朴素贝叶斯
#概念:基于贝叶斯定理与特征条件独立假设的分类方法
#先验概率:通过经验来判断事情发生的概率,比如说“癌症”的发病率是万分之一,就是先验概率。
#后验概率:后验概率就是发生结果之后,推测原因的概率。比如说某人查出来了患有“癌症”,
#那么患病的原因可能是 A、B 或 C。**患有“癌症”是因为原因 A 的概率就是后验概率。**它是属于条件概率的一种。
#条件概率:事件 A 在另外一个事件 B 已经发生条件下的发生概率,表示为 P(A|B)。比如原因 A 的条件下,患有“癌症”的概率,就是条件概率。
#贝叶斯定理:P(A|B)=P(B|A)*P(A)/P(B)
def naive_bayes():
#导入威斯康星乳腺肿瘤数据集
cancer=load_breast_cancer()
#将数据集拆分为训练数据集和测试数据集
x_train,x_test,y_train,y_test=train_test_split(cancer.get('data'),cancer.get('target'),random_state=38)
#使用高斯朴素贝叶斯建模
#高斯朴素贝叶斯适合特征符合正态分布的数据
gnb=GaussianNB()
gnb.fit(x_train,y_train)
print("高斯训练集得分:{}".format(gnb.score(x_train,y_train)))
print("高斯测试集得分:{}".format(gnb.score(x_test, y_test)))
#贝努利朴素贝叶斯
#适合二项分布或0-1分布
bnb=BernoulliNB()
bnb.fit(x_train,y_train)
print("二项式训练集得分:{}".format(bnb.score(x_train,y_train)))
print("二项式测试集得分:{}".format(bnb.score(x_test, y_test)))
#多项式朴素贝叶斯
#适合多个分类的数据集
mnb=MultinomialNB()
mnb.fit(x_train,y_train)
print("多项式训练集得分:{}".format(mnb.score(x_train,y_train)))
print("多项式测试集得分:{}".format(mnb.score(x_test, y_test)))
print("######################")
#酒的分类
wine_dataset = load_wine()
# random_state=0,每次生成的随机数不同
# x代表数据集,y代表分类标签
x_train, x_test, y_train, y_test = train_test_split(wine_dataset["data"], wine_dataset["target"], random_state=0)
# 创建贝叶斯分类模型
gnb = GaussianNB()
gnb.fit(x_train, y_train)
# 测试模型得分
score = gnb.score(x_test, y_test)
print(score)
score=gnb.score(x_train,y_train)
print(score)
# 使用模型完成预测
x_news = np.array([[13.2, 2.77, 2.51, 18.5, 96.6, 1.04, 2.55, 0.57, 1.47, 6.2, 1.05, 3.33, 820]])
prediction = gnb.predict(x_news)
print(wine_dataset["target_names"][prediction])
朴素贝叶斯及python测试
最新推荐文章于 2023-11-11 18:27:10 发布