Sklearn 高斯混合
Sklearn GaussianMixture
我通过一个字符识别和手写转录的项目自学了几个月的人工智能。到目前为止,我已经通过实现CNN、CTC神经网络成功地使用了Keras、Theano和Tensorflow。
今天,我尝试使用高斯混合模型,迈向具有高斯发射的隐马尔可夫模型的第一步。为此,我使用了 sklearn 混合与 pca 减少到 select 具有 Akaike 和贝叶斯信息标准的最佳模型。 Aic 的协方差类型为 Full,它提供了一个很好的 U 曲线,而 Bic 的协方差类型为 Tied,因为 Bic 的 Full 协方差只给出了一条线性曲线。通过 12.000 个样本,我得到了 Aic 的 60 个 n 分量和 Bic 的 120 个 n 分量的最佳模型。
我的输入图像有64个像素,仅代表英文字母的大写字母,26个类别,编号从0到25。
Sklearn GaussianMixture 的拟合方法忽略标签和预测方法 returns 分量(0 到 59 或 0 到 119)在 n 个分量中关于概率的位置。
如何使用 sklearn GaussianMixture 检索字符在列表中的位置的原始标签?
因此,您想在生成分类器中使用 GaussianMixture。您需要为每个标签计算 P(Y|X) 并根据这些概率估计标签。为此,您需要为每个标签保留一个 GMM,并使用来自相应标签的数据进行训练。然后 score 方法将为您提供给定数据的可能性 P(X|Y)(或 log-likelihood,您可能需要检查一下)。如果你将可能性与先验相乘,你会得到后验,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)
我通过一个字符识别和手写转录的项目自学了几个月的人工智能。到目前为止,我已经通过实现CNN、CTC神经网络成功地使用了Keras、Theano和Tensorflow。
今天,我尝试使用高斯混合模型,迈向具有高斯发射的隐马尔可夫模型的第一步。为此,我使用了 sklearn 混合与 pca 减少到 select 具有 Akaike 和贝叶斯信息标准的最佳模型。 Aic 的协方差类型为 Full,它提供了一个很好的 U 曲线,而 Bic 的协方差类型为 Tied,因为 Bic 的 Full 协方差只给出了一条线性曲线。通过 12.000 个样本,我得到了 Aic 的 60 个 n 分量和 Bic 的 120 个 n 分量的最佳模型。
我的输入图像有64个像素,仅代表英文字母的大写字母,26个类别,编号从0到25。
Sklearn GaussianMixture 的拟合方法忽略标签和预测方法 returns 分量(0 到 59 或 0 到 119)在 n 个分量中关于概率的位置。
如何使用 sklearn GaussianMixture 检索字符在列表中的位置的原始标签?
因此,您想在生成分类器中使用 GaussianMixture。您需要为每个标签计算 P(Y|X) 并根据这些概率估计标签。为此,您需要为每个标签保留一个 GMM,并使用来自相应标签的数据进行训练。然后 score 方法将为您提供给定数据的可能性 P(X|Y)(或 log-likelihood,您可能需要检查一下)。如果你将可能性与先验相乘,你会得到后验,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)