通过朴素贝叶斯进行概率估计 :param Py: 先验概率分布 :param Px_y: 条件概率分布 :param x: 要估计的样本x :return: 返回所有label的估计概率
(Py, Px_y, x)
| 43 | return dataArr, labelArr |
| 44 | |
| 45 | def NaiveBayes(Py, Px_y, x): |
| 46 | ''' |
| 47 | 通过朴素贝叶斯进行概率估计 |
| 48 | :param Py: 先验概率分布 |
| 49 | :param Px_y: 条件概率分布 |
| 50 | :param x: 要估计的样本x |
| 51 | :return: 返回所有label的估计概率 |
| 52 | ''' |
| 53 | #设置特征数目 |
| 54 | featrueNum = 784 |
| 55 | #设置类别数目 |
| 56 | classNum = 10 |
| 57 | #建立存放所有标记的估计概率数组 |
| 58 | P = [0] * classNum |
| 59 | #对于每一个类别,单独估计其概率 |
| 60 | for i in range(classNum): |
| 61 | #初始化sum为0,sum为求和项。 |
| 62 | #在训练过程中对概率进行了log处理,所以这里原先应当是连乘所有概率,最后比较哪个概率最大 |
| 63 | #但是当使用log处理时,连乘变成了累加,所以使用sum |
| 64 | sum = 0 |
| 65 | #获取每一个条件概率值,进行累加 |
| 66 | for j in range(featrueNum): |
| 67 | sum += Px_y[i][j][x[j]] |
| 68 | #最后再和先验概率相加(也就是式4.7中的先验概率乘以后头那些东西,乘法因为log全变成了加法) |
| 69 | P[i] = sum + Py[i] |
| 70 | |
| 71 | #max(P):找到概率最大值 |
| 72 | #P.index(max(P)):找到该概率最大值对应的所有(索引值和标签值相等) |
| 73 | return P.index(max(P)) |
| 74 | |
| 75 | |
| 76 | def model_test(Py, Px_y, testDataArr, testLabelArr): |