• 大小: 3KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-07-13
  • 语言: Matlab
  • 标签: meanshift  matlab  

资源简介

文档为均值漂移算法的matlab代码,可以用于数据聚类分析

资源截图

代码片段和文件信息

function [clustCentdata2clustercluster2dataCell] = MeanShiftCluster(dataPtsbandWidthplotFlag);
%perform MeanShift Clustering of data using a flat kernel
%
% ---INPUT---
% dataPts           - input data (numDim x numPts)
% bandWidth         - is bandwidth parameter (scalar)
% plotFlag          - display output if 2 or 3 D    (logical)
% ---OUTPUT---
% clustCent         - is locations of cluster centers (numDim x numClust)
% data2cluster      - for every data point which cluster it belongs to (numPts)
% cluster2dataCell  - for every cluster which points are in it (numClust)

% Bryan Feldman 02/24/06
% MeanShift first appears in
% K. Funkunaga and L.D. Hosteler “The Estimation of the Gradient of a
% Density Function with Applications in Pattern Recognition“


%*** Check input ****
if nargin < 2
    error(‘no bandwidth specified‘)
end

if nargin < 3
    plotFlag = true;
    plotFlag = false;
end

%**** Initialize stuff ***
[numDimnumPts] = size(dataPts);
numClust        = 0;
bandSq          = bandWidth^2;
initPtInds      = 1:numPts;
maxPos          = max(dataPts[]2);                          %biggest size in each dimension
minPos          = min(dataPts[]2);                          %smallest size in each dimension
boundBox        = maxPos-minPos;                        %bounding box size
sizeSpace       = norm(boundBox);                       %indicator of size of data space
stopThresh      = 1e-3*bandWidth;                       %when mean has converged
clustCent       = [];                                   %center of clust
% beenVisitedFlag = zeros(1numPts‘uint8‘);              %track if a points been seen already
beenVisitedFlag = zeros(1numPts); 
beenVisitedFlag=uint8(beenVisitedFlag);

numInitPts      = numPts;                               %number of points to posibaly use as initilization points
% clusterVotes    = zeros(1numPts‘uint16‘);             %used to resolve conflicts on cluster membership
clusterVotes    = zeros(1numPts); 
clusterVotes   =uint16(clusterVotes);


while numInitPts
    
    tempInd         = ceil( (numInitPts-1e-6)*rand);        %pick a random seed point
    stInd           = initPtInds(tempInd);                  %use this point as start of mean
    myMean          = dataPts(:stInd);                           % intilize mean to this points location
    myMembers       = [];                                   % points that will get added to this cluster                          
    %thisClusterVotes    = zeros(1numPts‘uint16‘);         %used to resolve conflicts on cluster membership
    thisClusterVotes    = zeros(1numPts); 
    thisClusterVotes   =uint16(thisClusterVotes);
    
    while 1     %loop untill convergence
        
        sqDistToAll = sum((repmat(myMean1numPts) - dataPts).^2);    %dist squared from mean to all points still active
        inInds      = find(sqDistToAll < bandSq);               %points within bandWidth

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        6302  2017-05-24 21:14  均值漂移聚类算法\MeanShiftCluster.m
     文件        1001  2017-05-24 21:14  均值漂移聚类算法\testMeanShift.m
     目录           0  2017-12-10 22:14  均值漂移聚类算法\

评论

共有 条评论