朴素贝叶斯分类算法python代码

原理

条件概率 (conditional probability) 是指在事件 B 发生的情况下,事件 A 发生的概率。通常记为 P(A | B)。
贝叶斯公式中,P(A)称为"先验概率"(Prior probability),即在B事件发生之前,对A事件概率的一个判断。
P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,对A事件概率的重新评估。
在这里插入图片描述
举个简单例子
例如:
假设一个学校里有60%男生和4 0%女生.女生穿裤子的人数和穿裙子的人数相等,所有男生穿裤子.一个人在远处随机看到了一个穿裤子的学生.那么这个学生是女生的概率是多少?
P(女) = 0.4
P(裤子|女) = 0.5
P(裤子) = 0.6 + 0.2 = 0.8
P(女|裤子) = P(裤子|女) * P(女) / P(裤子) = 0.5 * 0.4 / 0.8 = 0.25
在这里插入图片描述
朴素贝叶斯为何朴素?
在这个现实世界中,特征之间存在一定的依赖关系。(例如一个人的年龄和年薪,在大多数情况下存在明显的依赖关系。)然而,朴素贝叶斯假设样本的特征之中彼此独立,没有相关关系。正如我们所知,这个假设在现实生活中是很不真实的。
所以,我们认为朴素贝叶斯真的很“朴素”,确切的说,应该是真的很“天真”。

优缺点

优点
朴素贝叶斯算法假设了数据集属性之间是相互独立的,因此算法的逻辑性十分简单,并且算法较为稳定,当数据呈现不同的特点时,朴素贝叶斯的分类性能不会有太大的差异。换句话说就是朴素贝叶斯算法的健壮性比较好,对于不同类型的数据集不会呈现出太大的差异性。当数据集属性之间的关系相对比较独立时,朴素贝叶斯分类算法会有较好的效果。
缺点
属性独立性的条件同时也是朴素贝叶斯分类器的不足之处。数据集属性的独立性在很多情况下是很难满足的,因为数据集的属性之间往往都存在着相互关联,如果在分类过程中出现这种问题,会导致分类的效果大大降低

sklearn 中朴素贝叶斯算法用例

蘑菇分类的例子, 根据蘑菇各种特征, 用朴素贝叶斯对蘑菇分类,
读取数据

import numpy as np
import pandas as pd
data = pd.read_csv('mushrooms.csv')
data.head()

在这里插入图片描述
数据转换

# 数据转换
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for col in data.columns:
    data[col]=le.fit_transform(data[col])
    samples = le.inverse_transform(data[col]) 
data.head()

划分训练集和测试集

from sklearn.model_selection import train_test_split
y=data.iloc[:,0]
x=data.iloc[:,1:]
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)

#调用朴素贝叶斯

import sklearn.naive_bayes as nb
model = nb.GaussianNB()
model.fit(x_train,y_train)
model.score(x_test,y_test)

在这里插入图片描述
#对测试集进行预测

y_pred = model.predict(x_test)

把预测和真实值对比一下, 看看预测对和错的数量.

d = pd.DataFrame(y_pred == y_test)

在这里插入图片描述
预测对1506个, 预测错119个

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值