监督学习算法——朴素贝叶斯分类器

本文介绍了朴素贝叶斯分类器的原理,包括其快速训练、独立特征假设以及scikit-learn中的三种实现(GaussianNB,BernoulliNB,MultinomialNB)。着重讨论了BernoulliNB和MultinomialNB在文本数据中的应用,以及参数alpha的控制作用。朴素贝叶斯模型适用于高维稀疏数据,常作为基准模型在大数据集上使用。
摘要由CSDN通过智能技术生成

朴素贝叶斯分类器

朴素贝叶斯分类器是与之前的线性模型非常相似的一种分类器,但它的训练速度要更快一点。但它的泛化能力要比线性分类器稍差。
朴素贝叶斯模型如此高效的原因在于,它通常单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计书记。scikit-learn中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB和MultinomialNB。GaussianNB可应用于任意连续数据,而BernoulliNB假定输入数据为二分类数据,MultinomialNB假定输入数据为计数数据。BernoulliNB和MultinomialNB主要用于文本数据分类。
BernoulliNB分类器计算每个类别中每个特征不为0的元素个数。

X = np.array([[0, 1, 0, 1],
              [1, 0, 1, 1],
              [0, 0, 0, 1],
              [1, 0, 1, 0]])
y = np.array([0, 1, 0, 1])

这里有四个数据点,每个数据点有4个二分类特征。一共有两个类别:0和1。类别0(第1,3个数据点),第一个特征有2个为零,0个不为零,第二个特征有1个为零、1个不为零,以此类推。然后对类别1中的数据点计算相同的计数。计算每个类别中的非零元素个数:

counts = {}
for label in np.unique(y):
    counts[label] = X[y == label].sum(axis=0)
print("Feature counts:\n", counts)
Feature counts:
 {0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}

优点、缺点和参数
MultinomialNB和BernoulliNB都只有一个参数 alpha,用于控制模型复杂度。alpha 的工作
原理是,算法向数据中添加alpha这么多的虚拟数据点,这些点对所有特征都取正值。这
可以将统计数据“平滑化”(smoothing)。 alpha 越大,平滑化越强,模型复杂度就越低。
算法性能对alpha值的鲁棒性相对较好,也就是说,alpha 值对模型性能并不重要。但调
整这个参数通常都会使精度略有提高。
GaussianNB主要用于高维数据,而另外两种朴素贝叶斯模型则广泛用于稀疏计数数据,比
如文本。MultinomiaLNB 的性能通常要优于BernoulliNB,特别是在包含很多非零特征的数
据集(即大型文档)上。
朴素贝叶斯模型的许多优点和缺点都与线性模型相同。它的训练和预测速度都很快,训练
过程也很容易理解。该模型对高维稀疏数据的效果很好,对参数的鲁棒性也相对较好。朴
类见叶斯模型是很好的基准模型,常用于非常大的数据集,在这些数据集上即使训练线性
模型可能也要花费大量时间。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
朴素贝叶斯算法是一种基于概率统计的分类算法,它的核心思想是利用贝叶斯定理计算出每个类别的后验概率,然后选择具有最大后验概率的类别作为分类结果。在这个过程中,朴素贝叶斯假设每个特征之间相互独立,也就是说,每个特征对于分类的贡献是独立的。 在Python中,我们可以使用scikit-learn库来实现朴素贝叶斯算法。具体步骤如下: 1.准备数据:将数据集划分为训练集和测试集。 2.训练模型:使用训练集来训练朴素贝叶斯模型。 3.测试模型:使用测试集来测试模型的准确率。 下面是一个简单的朴素贝叶斯分类器的实现示例: ``` from sklearn.naive_bayes import GaussianNB from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # 创建朴素贝叶斯分类器对象 gnb = GaussianNB() # 训练模型 gnb.fit(X_train, y_train) # 预测测试集的结果 y_pred = gnb.predict(X_test) # 计算准确率 accuracy = sum(y_pred == y_test) / len(y_test) print("准确率:", accuracy) ``` 这里使用了iris数据集作为示例数据集进行分类。首先,我们使用`train_test_split`函数将数据集划分为训练集和测试集,然后创建一个`GaussianNB`对象,训练模型并使用测试集来测试模型的准确率。最后,我们计算出准确率并将其打印出来。 完整的代码可以在以下链接中找到: https://github.com/Light-City/NaiveBayesClassifier-Python/blob/master/NaiveBayesClassifier.py
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值