Scikit Learn - 使用朴素贝叶斯进行分类
朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,它假设所有预测变量彼此独立,即某个特征在某个类中的存在与否与同一类中任何其他特征的存在无关。正是由于这种朴素假设,这些方法被称为朴素贝叶斯方法。
贝叶斯定理阐明了以下关系,以便计算类别的后验概率,即某个标签和某些观测特征的概率,$P\left(\begin{array}{c} Y\arrowvert features\end{array} ight)$。
$$P\left(\begin{array}{c} Y\arrowvert features\end{array} ight)=\left(\frac{P\lgroup Y group P\left(\begin{array}{c} features\arrowvert Y\end{array} ight)}{P\left(\begin{array}{c} features\end{array} ight)} ight)$$Here, $P\left(\begin{array}{c} Y\arrowvert features\end{array} ight)$ is the posterior probability of class.
$P\left(\begin{array}{c} Y\end{array} ight)$ is the prior probability of class.
$P\left(\begin{array}{c} features\arrowvert Y\end{array} ight)$ is the likelihood which is the probability of predictor given class.
$P\left(\begin{array}{c} features\end{array} ight)$ is the prior probability of predictor.
The Scikit-learn provides different naïve Bayes classifiers models namely Gaussian, Multinomial, Complement and Bernoulli. All of them differ mainly by the assumption they make regarding the distribution of 𝑷$P\left(\begin{array}{c} features\arrowvert Y\end{array} ight)$ i.e. the probability of predictor given class.
| Sr.No | 模型 &描述 |
|---|---|
| 1 |
高斯朴素贝叶斯
高斯朴素贝叶斯分类器假设每个标签的数据都服从简单的高斯分布。 |
| 2 |
多项朴素贝叶斯
它假设特征服从简单的多项分布。 |
| 3 |
伯努利朴素贝叶斯
该模型假设特征本质上是二进制的(0 和 1)。伯努利朴素贝叶斯分类的一个应用是使用"词袋"模型进行文本分类。 |
| 4 |
补充朴素贝叶斯
它的设计是为了纠正多项贝叶斯分类器所做的严格假设。这种朴素贝叶斯分类器适用于不平衡数据集。 |
构建朴素贝叶斯分类器
我们也可以在 Scikit-learn 数据集上应用朴素贝叶斯分类器。在下面的示例中,我们应用了 GaussianNB 并拟合了 Scikit-learn 的 breast_cancer 数据集。
示例
Import Sklearn from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split data = load_breast_cancer() label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data'] print(label_names) print(labels[0]) print(feature_names[0]) print(features[0]) train, test, train_labels, test_labels = train_test_split( features,labels,test_size = 0.40, random_state = 42 ) from sklearn.naive_bayes import GaussianNB GNBclf = GaussianNB() model = GNBclf.fit(train, train_labels) preds = GNBclf.predict(test) print(preds)
输出
[ 1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1 ]
上述输出由一系列 0 和 1 组成,它们基本上是恶性和良性肿瘤类别的预测值。

