机器学习三-xmeans

能力有限,只是表面上理解了公式和图所表达的内容

论文参见:点击打开链接

已有文章分析参见:点击打开链接

具体java代码实现:点击打开链接

核心应该是

 分割前BIC分数 >分割后BIC分数     结论是 原簇可分割为两个新簇

图示如下


公式如下


公式含义参见代码具体内容 

代码分析如下:

 * 计算给定中心的BIC。
 *      * @参数k是簇的数量。
 *      * @参数n样本总数。
 *      * @参数d数据的维度。
 *      * @distortion集群的失真。
 *      * @clusterSize每个集群中采样的数量。
 *      * @返回BIC得分。
 */
private double bic(int k, int n, int d, double distortion, int[] clusterSize) {
    double variance = distortion / (n - k);//平均损失度,可以理解为点与中心点距离的平均方差

    double L = 0.0;
    for (int i = 0; i < k; i++) {
        L += logLikelihood(k, n, clusterSize[i], d, variance);
    }

    int numParameters = k + k * d;
    return L - 0.5 * numParameters * Math.log(n);
}

对数似然函数

 *      *
 *       * @参数k是簇的数量。
 *       * @参数n样本总数。
 *       * @参数ni属于此群集的样本数。
 *       * @参数d数据的维度。
 *       * @variance 群集的估计方差。
 *       * @返回可能性估计
 */
private static double logLikelihood(int k, int n, int ni, int d, double variance) {
    double p1 = -ni * LOG2PI;
    double p2 = -ni * d * Math.log(variance);
    double p3 = -(ni - k);
    double p4 = ni * Math.log(ni);
    double p5 = -ni * Math.log(n);
    double loglike = (p1 + p2 + p3) / 2 + p4 + p5;
    return loglike;
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值