朴素贝叶斯生成新的样本数据,主要是通过训练时计算的先验概率p(y)和似然p(x|y)生成。首先会通过先验概率大小随机生成第c类,然后通过c类的似然概率大小,生成每一维的数据,最后就得到了新的样本。数据集加载方法load_mnist可以自行修改,这里用到了mnist-original.mat文件需要下载后放入当前路径的datasets/mldata下。
from sklearn.datasets import fetch_mldata
from collections import Counter
import numpy as np
#加载MNIST数据集
def load_mnist():
mnist = fetch_mldata('MNIST original', data_home='./datasets')
x, y = mnist["data"], mnist["target"]
x = np.where(x>0, 1, x) #将大于1的数组全部换成1
X_train, X_test, y_train, y_test = x[:60000], x[60000:], y[:60000], y[60000:]
return X_train, y_train, X_test, y_test
class NaiveBayes():
prob_c = None #类别为c的先验概率
prob_cj = None #类别为C,维度为j的似然概率
y_pred = None #预测结果,类别
y_pred_prob = None #预测结果,类别概率
#训练模型,计算先验概率和似然概率
def fit(self, X_train, y_train):
#计算各类别先验概率 p(y)