详解 Scikit-learn 的 naive_bayes.GaussianNB函数:高斯朴素贝叶斯分类器

  • Post category:Python

Scikit-learn是python中机器学习的重要库之一,其中之一的模块是Naive Bayes模块,该模块中包含了众多的朴素贝叶斯算法。其中之一是GaussianNB函数。GaussianNB是一种使用高斯分布的朴素贝叶斯算法。

该函数的主要作用是用于解决分类问题。它可以在给定特征和类别的条件下,计算给定样本(包含特征)属于每个类别的概率,从而预测其所属的类别。在实际应用中,GaussianNB可以用于文本分类,垃圾邮件识别等方面。

下面是GaussianNB函数的使用方法:

1.导入相关库

from sklearn.naive_bayes import GaussianNB

2.准备数据集

当我们想要使用GaussianNB进行分类时,首先需要准备一些数据集,这些数据集可以是由标签化的样本和特征向量组成的,可以从磁盘上的CSV文件中读取,或使用SKlearn库中内置的线性分类数据集。在这些数据集中,每个样本可以是一封电子邮件、一篇文章或者一张图片。

3.创建分类器

创建分类器是非常容易的,只需要调用函数GaussianNB()即可。

classifier = GaussianNB()

4.训练模型

训练模型需要将数据集分为训练集和测试集。我们可以使用SKlearn库中的train_test_split函数来完成这个任务。该函数可以将数据集随机分为训练集和测试集,使得我们可以在测试集上测试模型的准确性。这里的训练集被用于训练模型。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
classifier.fit(X_train, y_train)

这里的X_train和y_train是训练样本和训练标签,X_test和y_test是测试样本和测试标签。test_size是测试集占数据集的比重。random_state设置为0保证随机性。

5.使用模型进行预测

模型训练完成后,我们可以使用predict()函数对测试数据进行预测。

y_pred = classifier.predict(X_test)

这里的y_pred是分类器对测试集进行预测的结果。

6.评估模型

最后,我们可以通过调用准确度函数来评估模型的准确度。

from sklearn.metrics import accuracy_score

accuracy= accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))

这里accuracy_score函数从y_test(真实标签)和y_pred(预测标签)作为参数,返回分类器的准确率。将其乘以100是因为我们想以百分数的形式呈现它。

下面是两个实例:

例1:鸢尾花分类器

from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
data = load_iris()

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=0)

# 创建分类器
classifier = GaussianNB()

# 训练模型
classifier.fit(X_train, y_train)

# 预测测试集
y_pred = classifier.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))

例2:垃圾邮件分类器

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
data = pd.read_csv("spam.csv")
texts = data['text']
labels = data['label'].map({'ham': 0, 'spam': 1})

# 将文本向量化
cv = CountVectorizer()
X = cv.fit_transform(texts)

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=0)

# 创建分类器
classifier = GaussianNB()

# 训练模型
classifier.fit(X_train.toarray(), y_train)

# 预测测试集
y_pred = classifier.predict(X_test.toarray())

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))

这两个例子说明了GaussianNB函数的使用方法,同时展示了它在不同领域的应用。