【问题标题】:Evaluating Gaussian Mixture model using a score metric?使用分数度量评估高斯混合模型?
【发布时间】:2020-05-06 16:26:08
【问题描述】:

我有 1D 数据(在列数据上)。我使用高斯混合模型 (GMM) 作为密度估计,在 Python 中使用此实现:https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html。通过依靠 AIC/BIC 标准,我能够确定组件的数量。在我拟合 GMM 之后,我绘制了原始观测值的核密度估计 + 从 GMM 中提取的采样数据的核密度估计。原始和采样密度的情节非常相似(很好)。但是,我想要一些指标来报告拟合模型的好坏。

g = GaussianMixture(n_components = 35)

data= df['x'].values.reshape(-1,1) # data taken from data frame (10,000 data pints)
clf= g.fit(data)# fit model

samples= clf.sample(10000)[0] # generate sample data points (same # as original data points)

我在实现中找到了分数,但不确定如何实现。我做错了吗?或者除了直方图或核密度图之外,还有什么更好的方法可以显示拟合模型的准确性?

print(clf.score(data))
print(clf.score(samples))

【问题讨论】:

    标签: python-3.x scikit-learn gaussian data-fitting mixture-model


    【解决方案1】:

    我最好使用交叉验证,并尝试查看训练模型的准确性。

    使用拟合模型的predict方法预测未见数据的标签(使用交叉验证并报告准确性):https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture.predict

    玩具示例:

    g = GaussianMixture(n_components = 35)
    g.fit(train_data)# fit model
    y_pred = g.predict(test_data)
    

    编辑:

    有多种方法可以衡量您的无监督案例的表现。对于基于真实概率的 GMM,最常见的是 BIC 和 AIC。它们立即包含在 scikit GMM 类中。

    【讨论】:

    • 据我所知,交叉验证仅在我们有 2D 时才有效,例如 X 和 y,我们通过 X,预测 y 并将其与原始 y 进行比较(计算平均绝对误差等)。就我而言,我只有 X,所以当我采样时,我得到的数字可能完全不同。如果我错了,请纠正我!
    • 我明白你的意思。如果您将 GMM 用作无监督模型,则无法使用我的答案。换句话说,如果你没有标签 (y),你就不能使用这个提议的交叉验证方案。查看我的编辑
    • 谢谢。我已经使用 AIC/BIC 来指导我了解组件数量。但我正在寻找评估准确性,我只找到了我不太了解的分数。
    【解决方案2】:

    您可以使用normalized_mutual_info_scoreadjusted_rand_scoresilhouette 分数来评估您的集群。所有这些指标都在sklearn.metrics 部分下实现。

    编辑:您可以查看link 了解更多详细说明。

    总结一下:

    • Adjusted Rand Index:衡量两个分配的相似度。

    • 标准化互信息:衡量两个分配的一致性。

    • 剪影系数:衡量每个点的分配情况。
    gmm.fit(x_vec)
    
    pred = gmm.predict(x_vec)
    
    print ("gmm: silhouttte: ", silhouette_score(x_vec, pred))
    

    【讨论】:

    • 您能否提供一个示例或如何将其应用于我的案例以及如何解释结果。 sklearn 的文档并不总是对我有帮助。谢谢
    • 我认为这些指标用于分类任务。我正在做的是使用高斯混合的密度估计。不过还是谢谢!
    • 您可以将剪影指标用于无监督任务。它计算一个对象与其自己的集群相比与其他集群的相似程度。 @MWH
    • 谢谢。我遇到错误“ValueError:预期的二维数组,而是得到一维数组:”。这应该只处理一列(X)的数据吗?我传递了 x 个“原始数据”和 y 个“采样数据”,它们都有相同的数据点“行”。
    • @MWH 我在回答中添加了一个小示例,您可以如何为集群使用轮廓分数指标。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2015-07-26
    • 1970-01-01
    • 2018-08-08
    • 2016-12-28
    • 2023-03-24
    • 2014-01-09
    • 2012-05-08
    相关资源
    最近更新 更多