EM算法中的E步 依据当前模型参数,计算分模型k对观数据y的响应度 :param dataSetArr: 可观测数据y :param alpha0: 高斯模型0的系数 :param mu0: 高斯模型0的均值 :param sigmod0: 高斯模型0的方差 :param alpha1: 高斯模型1的系数 :param mu1: 高斯模型1的均值 :param sigmod1: 高斯模型1的方差 :return: 两个模型各自的响应度
(dataSetArr, alpha0, mu0, sigmod0, alpha1, mu1, sigmod1)
| 80 | |
| 81 | |
| 82 | def E_step(dataSetArr, alpha0, mu0, sigmod0, alpha1, mu1, sigmod1): |
| 83 | ''' |
| 84 | EM算法中的E步 |
| 85 | 依据当前模型参数,计算分模型k对观数据y的响应度 |
| 86 | :param dataSetArr: 可观测数据y |
| 87 | :param alpha0: 高斯模型0的系数 |
| 88 | :param mu0: 高斯模型0的均值 |
| 89 | :param sigmod0: 高斯模型0的方差 |
| 90 | :param alpha1: 高斯模型1的系数 |
| 91 | :param mu1: 高斯模型1的均值 |
| 92 | :param sigmod1: 高斯模型1的方差 |
| 93 | :return: 两个模型各自的响应度 |
| 94 | ''' |
| 95 | #计算y0的响应度 |
| 96 | #先计算模型0的响应度的分子 |
| 97 | gamma0 = alpha0 * calcGauss(dataSetArr, mu0, sigmod0) |
| 98 | #模型1响应度的分子 |
| 99 | gamma1 = alpha1 * calcGauss(dataSetArr, mu1, sigmod1) |
| 100 | |
| 101 | #两者相加为E步中的分布 |
| 102 | sum = gamma0 + gamma1 |
| 103 | #各自相除,得到两个模型的响应度 |
| 104 | gamma0 = gamma0 / sum |
| 105 | gamma1 = gamma1 / sum |
| 106 | |
| 107 | #返回两个模型响应度 |
| 108 | return gamma0, gamma1 |
| 109 | |
| 110 | def M_step(muo, mu1, gamma0, gamma1, dataSetArr): |
| 111 | #依据算法9.2计算各个值 |