机器学习(二):朴素贝叶斯算法

朴素贝叶斯

介绍

朴素贝叶斯是一个使用贝叶斯定理进行建模的分类器。属于分类算法一列,它是基于贝叶斯定理和一个朴素的假设,即所有的特征都相互独立于其他给定的响应变量。而朴素贝叶斯还有一个假设就是每个特征同等重要。尽管这个假设看起开起来是有错的,但是实际效果却很好。朴素贝叶斯有多项式朴素贝叶斯、高斯朴素贝叶斯、伯努利朴素贝叶斯这几种类型,

原理

贝叶斯公式P(A)是观察到事件A的概率,P(B)是观察到事件B的概率。P(A|B)是观察到事件B的同时又观察到事件A的条件概率。
将公式换为平时分类的就会更容易识别
在这里插入图片描述
我们要求的就是P(类别|特征)的值,即在有这些特征下属于某类别的概率。

实现

scikit-learn实现

这里使用皮马印第安人糖尿病数据集做实验,数据集在这 数据集

import numpy as np
from sklearn.naive_bayes import GaussianNB  # 导入sklearn的贝叶斯算法
from sklearn.model_selection import train_test_split


data = pd.read_csv('/home/h/Downloads/pima-indians-diabetes.data',header=None)
y = data[8]
X = data[[0,1,2,3,4,5,6,7]]
X_train,X_test,y_train,y_test = train_test_split(X,y,stratify=y,random_state=11)
nb = GaussianNB()
nb.fit(X_train,y_train)
print('准确率是:',nb.score(X_test,y_test))

# output
准确率是: 0.75

这里可以将朴素贝叶斯与逻辑回归做一个比较

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
%matplotlib inline
data = pd.read_csv('/home/h/Downloads/pima-indians-diabetes.data',header=None)
y = data[8]
X = data[[0,1,2,3,4,5,6,7]]
X_train,X_test,y_train,y_test = train_test_split(X,y,stratify=y,random_state=11)
lr = LogisticRegression()
nb = GaussianNB()
lr_score = []
nb_score = []
train_sizes = range(10,len(X_train),10)
for train_size in train_sizes:
    X_slice,_,y_slice,_ = train_test_split(X_train,y_train,train_size=train_size,stratify=y_train,random_state=11)
    nb.fit(X_slice,y_slice)
    nb_score.append(nb.score(X_test,y_test))
    lr.fit(X_slice,y_slice)
    lr_score.append(lr.score(X_test,y_test))
plt.plot(train_sizes,nb_score,label='native bayes')
plt.plot(train_sizes,lr_score,linestyle='--',label='logistic regression')
plt.xlabel('Number of training instances')
plt.ylabel('Test set accuracy')
plt.legend()

结果如图所示:
在这里插入图片描述
这里我们讲数据集分层并且不断增大,可以看到,在较少数据集的时候,朴素贝叶斯的准确率是要高于逻辑回归的,但是当数据集越来越大时,逻辑回归就会优于朴素贝叶斯。所以在进行分类任务的时候,可以根据数据集的大小进行分类算法的选择。

总结

朴素贝叶斯是一个基于概率论的分类方法,
优点:在小数据集上表现要优于其他分类算法、对缺失值不敏感、具有稳定的分类效率。
缺点:存在错误率、对数据的的准备方式敏感、假设特征不关联有瑕疵。
应用场景:欺诈检测、垃圾邮件过滤等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2020重新做人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值