【问题标题】:BIC score graph for GMM clustering looks very oddGMM 聚类的 BIC 分数图看起来很奇怪
【发布时间】:2021-12-02 22:51:39
【问题描述】:

我想使用 BIC 标准来找到 GMM 聚类的最佳聚类数。我绘制了集群编号 2 到 41 的 BIC 分数,并获得了附加曲线。我不知道如何解释,有人可以帮忙吗?

作为参考,这是我用来做 GMM 聚类的代码。它应用于一个地区的每日风矢量数据,总计约 5,500 列和 13,880 行。

def gmm_clusters(df_std, dates):
    ks = range(2, 44, 3)
    bic_scores = []
    csv_files = []
    for k in ks:
        model = GaussianMixture(n_components=k,
                                n_init=1,
                                init_params='random',
                                covariance_type='full',
                                verbose=0,
                                random_state=123)
        fitted_model = model.fit(df_std)
        bic_score = fitted_model.bic(df_std)
        bic_scores.append(bic_score)
        labels = fitted_model.predict(df_std)
        print("Labels counts")
        print(np.bincount(labels))
        df_label = pandas.DataFrame(df_std)
        print("############ dataframe AFTER CLUSTERING ###############")
        df_dates = pandas.DataFrame(dates)
        df_dates.columns = ['Date']
        df_dates = df_dates.reset_index(drop=True)
        df_label = df_label.join(df_dates)
        df_label["Cluster"] = labels
        print(df_label)
        csv_file = "{0}_GMM_2_Countries_850hPa.csv".format(k)
        df_label.to_csv(csv_file)
        csv_files.append(csv_file)

    return ks, bic_scores, csv_files

谢谢!!

编辑: 在相同数据上使用 K-means,我得到了这个肘部图(SSE 图): 这很容易解释,表明 11 个集群是最佳的。

【问题讨论】:

    标签: python scikit-learn cluster-analysis gmm


    【解决方案1】:

    首先想到的是检查低于 10 的集群数量,步长为 1,而不是 3。也许你在那里缺少 BIC 的下降。

    第二件事可能是检查aicbic。见这里:https://stats.stackexchange.com/questions/577/is-there-any-reason-to-prefer-the-aic-or-bic-over-the-other

    第三件事是您的数据集有 5,500 个维度,但只有 13,880 个点。每个维度少于 3 个点。我会惊讶地发现任何聚类(这就是 BIC 图表所指示的)。您需要详细说明数据以及每列的含义以及您正在寻找的聚类。

    【讨论】:

    • 谢谢,我也会尝试使用 10 个以下的集群,步长为 1。我也尝试过使用 K-means 进行聚类并得到上述结果(参见编辑),有聚类的证据。不幸的是,不可能减少数据集的维度,因为每一列都对应于我域中的一个经纬度位置,我必须将它们全部包含在内。
    • 另外,有没有办法使用 GMM 找到 SSE,就像我使用 K-means 所做的那样?谢谢!
    • 对于 SSE,您可以手动计算 GMM 的惯性,定义如下:scikit-learn.org/stable/modules/clustering.html#inertia
    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多