Sklearn GaussianMixture

时间:2018-03-06 16:55:30

标签: python python-3.x scikit-learn handwriting-recognition mixture

我通过字符识别和手写转录项目为自己学习了几个月的人工智能。到目前为止,我通过实施CNN,CTC神经网络成功地使用了Keras,Theano和Tensorflow。

今天,我尝试使用高斯混合模型,这是迈向具有高斯发射的隐马尔可夫模型的第一步。为此,我使用具有pca缩减的sklearn混合物来选择具有Akaike和贝叶斯信息标准的最佳模型。具有协方差类型Full for Aic,它提供了一个很好的U形曲线和Tic for Bic,因为具有完全协方差Bic只给出一条线性曲线。有了12.000个样品,我获得了Aic的60个n组分和Bic的120个n组分的最佳模型。

我的输入图像旁边有64个像素,仅代表英文字母的大写字母,26个类别的编号从0到25。

Sklearn GaussianMixture的拟合方法忽略标签,预测方法将组件的位置(0到59或0到119)返回到关于概率的n分量中。

如何使用sklearn GaussianMixture检索原始标签中列表中字符的位置?

1 个答案:

答案 0 :(得分:0)

所以,你想在生成分类器中使用GaussianMixture。您需要为每个标签计算P(Y | X)并根据这些概率估计标签。为此,您需要为每个标签保留GMM并使用相应标签中的数据进行训练。然后得分方法将给出给定数据的可能性P(X | Y)(或者对数似然,你可能想要检查那个)。如果先前有多次可能性,那么你得到后验,P(Y | X)。对于每个标签,您将得到一个后标,例如P(Y = 0 | X),P(Y = 1 | X),...具有最大后验概率的标签可以报告为估计标签。

您可以从下面的代码示例中获得一些提示。 (这里假设先验概率相等,你需要在实现中考虑)

Y_predicted = clf.predict(X_test)

score = np.empty((Y_test.shape[0], 10))
predictor_list = []
for i in range(10):
  predictor = GMM()
  predictor.fit(X[Y==i])
  predictor_list.append(predictor)
  score[:, i] = predictor.score(X_test)

Y_predicted = np.argmax(score, axis=1)