faiss 聚类算法详解(聚类算法源码解析)

 聚类的步骤

  • 初始化中心点(因为聚类效果和初始中心点相关,容易出现局部最优,所以可以多初始化几次)。
  • 根据中心点,计算每个向量到中心点的距离。
  • 根据距离,把向量归属于不同的中心点
  • 然后对中心点周围的向量,累加取平均形成新的中心点。
  • 然后开始新一轮的聚类。
  • 从多次聚类中,选择最优的中心点,训练完成。

代码详解

    for (int redo = 0; redo < nredo; redo++) { ///切换初始的中心点(避免局部最优),

        if (verbose && nredo > 1) {
            printf("Outer iteration %d / %d\n", redo, nredo);
        }   

        // initialize remaining centroids with random points from the dataset
        centroids.resize (d * k); 
        std::vector<int> perm (nx);

        rand_perm (perm.data(), nx, seed + 1 + redo * 15486557L);
        for (int i = n_input_centroids; i < k ; i++) ///n_input_centroids:已有中心点的个数
            memcpy (&centroids[i * d], x + perm[i] * d,
                    d * sizeof (float)); ///初始化中心点

        po
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值