from sklearn.naive_bayes import GaussianNB # 导入高斯朴素贝叶斯
from sklearn.datasets import load_digits # 导入数字数据集
from sklearn.model_selection import train_test_split # 用于对数据集的拆分
# 读取样本数据集
data = load_digits()
# print(data)
# 提取特征数据和标签数据
feature = data.data
target = data.target
# 拆分数据
x_train, x_test, y_train, y_test = train_test_split(feature, target, test_size=0.2, random_state=2021)
# 训练模型
nb = GaussianNB() # 实例化模型对象
nb.fit(x_train, y_train) # 训练模型
# 给模型评分
score = nb.score(x_test, y_test)
print(score)
# 预测
pred_result1 = nb.predict(x_test[6].reshape(1, -1))
true_result1 = y_test[6]
print('预测结果为:', pred_result1, '真实结果为:', true_result1)
# 打印perd_result1属于0~9每个类别的概率,最大值就是分类的结果
DP_pred_result1 = nb.predict_log_proba(x_test[6].reshape(1, -1))
print(DP_pred_result1)
# 结果如下,可以看出在9处的概率最高,也是因此将该测试数据的结果定义为了9
# [[-3.32723175e+02 -4.31949249e+01 -2.13646036e+02 -1.09524299e+02
# -4.67899190e+07 -7.60473436e+01 -8.76400506e+02 -9.94269149e+08
# -2.10601963e+02 0.00000000e+00]]
import sklearn.datasets as datasets # 用于导入数据集
from sklearn.feature_extraction.text import TfidfVectorizer # 用于文本的特征提取
from sklearn.model_selection import train_test_split # 用于数据集的拆分
from sklearn.naive_bayes import MultinomialNB # 导入多项式朴素贝叶斯算法
# 获取数据集
news = datasets.fetch_20newsgroups_vectorized(subset='all')
# print(news)
# 提取特征数据和标签数据
feature = news.data # 返回的是列表,列表中位一篇篇的文章
# print(feature)
# print(len(feature))
target = news.target # 返回的是ndarray,存储的是每一篇文章的分类
# print(target)
# print(len(target))
# 数据集的拆分
x_train, y_train, x_test, y_test = train_test_split(feature, target, test_size=0.2, random_state=2021)
# print(x_train) # 发现拿到的不论是训练集还是测试集的数据都不是数值型数据,因此必须要做特征工程
# 对数据集进行特征抽取
tf = TfidfVectorizer() # 实例化一个工具类
x_train = tf.fit_transform(x_train.toarray()) # 返回训练集所有文章中每个词的重要性
# print(x_train)
x_test = tf.fit_transform(x_test.toarray())
# 模型的训练
mlt = MultinomialNB(alpha=1)
mlt.fit(x_train, y_train)
# 对模型进行评价
y_pred = mlt.predict(x_test)
y_true = y_test
score = mlt.score(x_test, y_test)
print('预测分类为', y_pred)
print('真实分类为', y_true)
print('模型分类准确率为', score)
from sklearn import preprocessing
import numpy as np
X = np.array([
[1, -2, 2, 3, 1, 10],
[1, 2, 3, 33, 4, -90],
[11, 22, 33, 5, -80, 4]
])
binaryzation = preprocessing.Binarizer(threshold=5) # 将大于5的数字视为1,小于等于5的视为0
X_binaryzation = binaryzation.transform(X)
print('二值化结果为(阈值为5):\n', X_binaryzation)
# 结果
# 二值化结果为(阈值为5):
# [[0 0 0 0 0 1]
# [0 0 0 1 0 0]
# [1 1 1 0 0 0]]
import sklearn.datasets as datasets # 用于导入数据集
from sklearn.model_selection import train_test_split # 用于数据集的拆分
from sklearn.naive_bayes import BernoulliNB # 导入伯努利朴素贝叶斯算法
# 读取数据集
iris = datasets.load_iris()
# 提取特征数据和标签数据
feature = iris.data
target = iris.target
# 数据集的拆分
x_train, x_test, y_train, y_test = train_test_split(feature, target, test_size=0.2, random_state=2021)
# print(x_train) # 可以看出训练集数据均为数值型类型,且相差不是很大,因此不需要做特征抽取和特征预处理
# 对数据集进行训练
mlt = BernoulliNB(binarize=6) # 通过调节binarizer参数值的大小可以改善模型预测的准确率
mlt.fit(x_train, y_train)
score = mlt.score(x_test, y_test)
y_pred = mlt.predict(x_test)
y_true = y_test
print("预测鸢尾花类型为", y_pred)
print("实际鸢尾花类型为", y_true)
print("预测模型准确率为", score)
# 结果
# 预测鸢尾花类型为 [0 0 0 0 0 0 0 0 0 0 0 2 0 2 2 2 0 0 0 0 0 2 2 0 2 2 2 2 0 0]
# 实际鸢尾花类型为 [0 0 1 0 0 0 0 0 0 0 0 1 2 2 1 2 1 1 0 1 1 2 2 0 2 1 1 1 0 0]
# 预测模型准确率为 0.6333333333333333
由此可见,当待处理的样本数据是一个多分类的数据时,(鸢尾花的种类有三种(山鸢尾、杂色鸢尾、维吉尼亚鸢尾),需要判断它是哪一种),因此预测的结果偏差就较大。反之,如果样本数据中全部都是山鸢尾,那么训练后的模型就能很好地对一个未知的种类的鸢尾花它是不是山鸢尾而做出预测。
如有问题,敬请指正。欢迎转载,但请注明出处。