机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类

原理分析

朴素贝叶斯算法

    朴素贝叶斯方法是贝叶斯定理与特征条件独立假设相结合的分类方法。对于给定的训练数据,首先基于特征条件独立假设学习输入输出的联合概率分布;再利用贝叶斯定理算出后验概率最大的类。

朴素贝叶斯算法

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第1张图片

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第2张图片

  1. 拉普拉斯平滑

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第3张图片

代码解析:

朴素贝叶斯

(1)加载数据

①加载数据,将mnist二进制数据集加载成矩阵形式

②将label值二值化,label>=5时为1,label<5时为0

③将data值二值化,当data=0时为0,当data!=0时为1

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第4张图片

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第5张图片

(2)计算概率

①计算先验概率

通过以下代码,可以得到P(Y=1),P(Y=-1)

prior_probability[label] += 1  #得到num(y=1) 和num(y=0)

prior_probability = np.array([prior_probability[i] / totalNum for i in range(2)]) 

# totalNum是图片总数(行数) 生成先验概率数组[0.50990476 0.49009524]

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第6张图片

 

②计算条件概率

通过以下代码,可以得到P(X=x|Y=1)和P(X=x|Y=0)

conditional_probability[label][j][temp] += 1

# 经过二值化的图像只有0,1两种取值
pix_0 = conditional_probability[i][j][0]
pix_1 = conditional_probability[i][j][1]
# 计算0,1像素点对应的条件概率

#这里采用了拉普拉斯平滑,在分子处+1,分母处+2
probability_0 = ((float(pix_0)+1) / (float(pix_0 + pix_1)+2))
probability_1 = ((float(pix_1)+1 )/ (float(pix_0 + pix_1)+2))

conditional_probability[i][j][0] = probability_0
conditional_probability[i][j][1] = probability_1

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第7张图片

 机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第8张图片

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第9张图片

③计算后验概率

通过以下代码可以得到,P(Y=1|X=x) P(Y=0|X=x)

这里的label分别输入【0,1】,计算较大值

 机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第10张图片

比较 P(Y=1|X=x) 和P(Y=0|X=x),较大的P的Y值为该图片的label值

如果P(Y=1|X=x)较大,则label=1

否则为0;

 机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第11张图片

 

 

④计算正确率

比较test中的每一个图片的label值,与通过train训练得到的label值,

如果错误,则错误数量errorCount++

除以总数得正确率

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第12张图片

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第13张图片

机器学习二 基于朴素贝叶斯模型实现对mnist数据集的分类_第14张图片

 

 
 
 
 
 

你可能感兴趣的:(机器学习,机器学习)