【问题标题】:Assign descriptors to cluster centers after creating clusters using VLFeat使用 VLFeat 创建集群后将描述符分配给集群中心
【发布时间】:2014-07-29 03:32:28
【问题描述】:

我正在使用 k-means 对数据进行聚类,但我没有使用标准算法,而是使用近似最近邻 (ANN) 算法来加速样本到中心的比较。这可以通过以下方式轻松完成:

[clusterCenters, trainAssignments] = vl_kmeans(trainDescriptors, clusterCount, 'Algorithm', 'ANN', 'MaxNumComparisons', ceil(clusterCount / 50));

现在,当我运行此代码时,变量“trainDescriptors”被聚类,并且每个描述符都使用 ANN 分配给“clusterCenters”。

我还有另一个变量,'testDescriptors'。我也想将它们分配给集群中心。并且必须使用与“trainDescriptors”相同的方法来完成此分配,但 AFAIK vl_kmeans 函数不会返回它为快速构建的树任务。

所以,我的问题是,是否可以将 'testDescriptors' 分配给 'clustersCenters' 作为 'trainDescriptors' 分配给 'vl_kmeans 函数中的 em>clusterCenters',如果是,我该怎么做?

【问题讨论】:

    标签: matlab k-means nearest-neighbor vlfeat


    【解决方案1】:

    嗯,我想通了。可以这样做:

    clusterCount = 1024;
    datasetTrain = single(rand(128, 100000)); 
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 1 - cluster train data and get train assignments
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    [clusterCenters, trainAssignments_actual] = vl_kmeans(datasetTrain, clusterCount, ...
        'Algorithm', 'ANN', ...
        'Distance', 'l2', ...
        'NumRepetitions', 1, ...
        'NumTrees', 3, ...
        'MaxNumComparisons', ceil(clusterCount / 50) ...
    );
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 2 - assign train data to clusters centers
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    forest = vl_kdtreebuild(clusterCenters, ...
        'Distance', 'l2', ...
        'NumTrees', 3 ...
    );
    
    trainAssignments_expected = vl_kdtreequery(forest, clusterCenters, datasetTrain);
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 3 - validate second assignment
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    validation = isequal(trainAssignments_actual, trainAssignments_expected);
    

    在第 2 步中,我正在使用集群中心创建一个新树,然后再次将数据分配给中心。它给出了一个有效的结果。

    【讨论】:

      猜你喜欢
      • 2016-06-07
      • 2017-04-21
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多