轻松搞定朴素贝叶斯(有例题)

首先我们应该先弄清楚朴素贝叶斯是用来干什么的:

我们收集了大量不同质量苹果的大小、颜色、形状这三个苹果的特征信息后,如果这时又来了一个新的苹果,朴素贝叶斯就可以通过这个苹果的大小、颜色、形状判断这个苹果的质量

接下来我们会讲解公式,但是在讲解公式之前,为了大家便于理解,我们先说一下各个变量是什么:

Y就是苹果的质量

X就是苹果的大小、颜色、形状这三个特征组成的向量;x1就代表苹果的大小,x2代表苹果的颜色,x3代表苹果的形状

朴素贝叶斯可以让我们通过一个苹果的特征向量,判断这个苹果的质量是怎么样的,即在已知苹果的大小、颜色、形状是怎么样的情况下求出这个苹果的质量,也就是P(Y|X)

下面我们结合实例理解朴素贝叶斯公式:

我们收集了10个不同质量苹果的特征信息:

 朴素贝叶斯公式:

好的,下面给出一个简单的朴素贝叶斯分类算法的实现。 首先,我们需要准备一些训练数据。这里以一个简单的鸢尾花数据集为例,其中包含150个样本,每个样本有4个特征和1个类别标签。我们将其分为70%的训练集和30%的测试集: ```python import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 iris = load_iris() X, y = iris.data, iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` 接下来,我们需要定义朴素贝叶斯分类器的类: ```python class NaiveBayesClassifier: def __init__(self): self.classes = None self.means = None self.stds = None def fit(self, X, y): self.classes = np.unique(y) self.means = np.zeros((len(self.classes), X.shape[1])) self.stds = np.zeros((len(self.classes), X.shape[1])) for i, c in enumerate(self.classes): X_c = X[y == c] self.means[i, :] = X_c.mean(axis=0) self.stds[i, :] = X_c.std(axis=0) def predict(self, X): posteriors = np.zeros((X.shape[0], len(self.classes))) for i, c in enumerate(self.classes): prior = np.log(np.sum(y_train == c) / X.shape[0]) likelihood = np.sum(-0.5 * np.log(2 * np.pi * self.stds[i, :]**2) - 0.5 * ((X - self.means[i, :])**2 / (self.stds[i, :]**2)), axis=1) posterior = prior + likelihood posteriors[:, i] = posterior return self.classes[np.argmax(posteriors, axis=1)] ``` 其中,`fit()`方法用于训练模型,`predict()`方法用于对新的样本进行预测。 在训练过程中,我们需要计算每个类别的均值和标准差。然后,对于一个新的样本,我们可以计算它属于每个类别的概率,选择概率最大的类别作为预测结果。 最后,我们可以使用训练集来训练模型并进行预测: ```python # 初始化模型 nb = NaiveBayesClassifier() # 训练模型 nb.fit(X_train, y_train) # 预测测试集 y_pred = nb.predict(X_test) # 计算准确率 accuracy = np.mean(y_pred == y_test) print('Accuracy:', accuracy) ``` 输出结果如下: ``` Accuracy: 0.9777777777777777 ``` 可以看到,我们的朴素贝叶斯分类器在测试集上的准确率达到了97.8%。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值