亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? kmeans.m

?? Matlab的kmeans算法實現(xiàn)
?? M
?? 第 1 頁 / 共 2 頁
字號:

function converged = batchUpdate

% Every point moved, every cluster will need an update
moved = 1:n;
changed = 1:k;
previdx = zeros(n,1);
prevtotsumD = Inf;

if display > 2 % 'iter'
    disp(sprintf('  iter\t phase\t     num\t         sum'));
end

%
% Begin phase one:  batch reassignments
%

iter = 0;
converged = false;
while true
    iter = iter + 1;

    % Calculate the new cluster centroids and counts, and update the
    % distance from every point to those new cluster centroids
    [C(changed,:), m(changed)] = gcentroids(X, idx, changed, distance);
    D(:,changed) = distfun(X, C(changed,:), distance, iter);

    % Deal with clusters that have just lost all their members
    empties = changed(m(changed) == 0);
    if ~isempty(empties)
        switch emptyact
        case 'error'
            error('stats:kmeans:EmptyCluster', ...
                  'Empty cluster created at iteration %d%s.',iter,repsMsg(rep,reps));
        case 'drop'
            % Remove the empty cluster from any further processing
            D(:,empties) = NaN;
            changed = changed(m(changed) > 0);
            warning('stats:kmeans:EmptyCluster', ...
                    'Empty cluster created at iteration %d%s.',iter,repsMsg(rep,reps));
        case 'singleton'
            warning('stats:kmeans:EmptyCluster', ...
                    'Empty cluster created at iteration %d%s.',iter,repsMsg(rep,reps));

            for i = empties
                d = D((idx-1)*n + (1:n)'); % use newly updated distances

                % Find the point furthest away from its current cluster.
                % Take that point out of its cluster and use it to create
                % a new singleton cluster to replace the empty one.
                [dlarge, lonely] = max(d);
                from = idx(lonely); % taking from this cluster
                if m(from) < 2
                    % In the very unusual event that the cluster had only
                    % one member, pick any other non-singleton point.
                    from = find(m>1,1,'first');
                    lonely = find(idx==from,1,'first');
                end
                C(i,:) = X(lonely,:);
                m(i) = 1;
                idx(lonely) = i;
                D(:,i) = distfun(X, C(i,:), distance, iter);

                % Update clusters from which points are taken
                [C(from,:), m(from)] = gcentroids(X, idx, from, distance);
                D(:,from) = distfun(X, C(from,:), distance, iter);
                changed = unique([changed from]);
            end
        end
    end

    % Compute the total sum of distances for the current configuration.
    totsumD = sum(D((idx-1)*n + (1:n)'));
    % Test for a cycle: if objective is not decreased, back out
    % the last step and move on to the single update phase
    if prevtotsumD <= totsumD
        idx = previdx;
        [C(changed,:), m(changed)] = gcentroids(X, idx, changed, distance);
        iter = iter - 1;
        break;
    end
    if display > 2 % 'iter'
        disp(sprintf(dispfmt,iter,1,length(moved),totsumD));
    end
    if iter >= maxit
        break;
    end

    % Determine closest cluster for each point and reassign points to clusters
    previdx = idx;
    prevtotsumD = totsumD;
    [d, nidx] = min(D, [], 2);

    % Determine which points moved
    moved = find(nidx ~= previdx);
    if ~isempty(moved)
        % Resolve ties in favor of not moving
        moved = moved(D((previdx(moved)-1)*n + moved) > d(moved));
    end
    if isempty(moved)
        converged = true;
        break;
    end
    idx(moved) = nidx(moved);

    % Find clusters that gained or lost members
    changed = unique([idx(moved); previdx(moved)])';

end % phase one

end % nested function

%------------------------------------------------------------------

function converged = onlineUpdate

% Initialize some cluster information prior to phase two
switch distance
case 'cityblock'
    Xmid = zeros([k,p,2]);
    for i = 1:k
        if m(i) > 0
            % Separate out sorted coords for points in i'th cluster,
            % and save values above and below median, component-wise
            Xsorted = sort(X(idx==i,:),1);
            nn = floor(.5*m(i));
            if mod(m(i),2) == 0
                Xmid(i,:,1:2) = Xsorted([nn, nn+1],:)';
            elseif m(i) > 1
                Xmid(i,:,1:2) = Xsorted([nn, nn+2],:)';
            else
                Xmid(i,:,1:2) = Xsorted([1, 1],:)';
            end
        end
    end
case 'hamming'
    Xsum = zeros(k,p);
    for i = 1:k
        if m(i) > 0
            % Sum coords for points in i'th cluster, component-wise
            Xsum(i,:) = sum(X(idx==i,:), 1);
        end
    end
end

%
% Begin phase two:  single reassignments
%
changed = find(m' > 0);
lastmoved = 0;
nummoved = 0;
iter1 = iter;
converged = false;
while iter < maxit
    % Calculate distances to each cluster from each point, and the
    % potential change in total sum of errors for adding or removing
    % each point from each cluster.  Clusters that have not changed
    % membership need not be updated.
    %
    % Singleton clusters are a special case for the sum of dists
    % calculation.  Removing their only point is never best, so the
    % reassignment criterion had better guarantee that a singleton
    % point will stay in its own cluster.  Happily, we get
    % Del(i,idx(i)) == 0 automatically for them.
    switch distance
    case 'sqeuclidean'
        for i = changed
            mbrs = (idx == i);
            sgn = 1 - 2*mbrs; % -1 for members, 1 for nonmembers
            if m(i) == 1
                sgn(mbrs) = 0; % prevent divide-by-zero for singleton mbrs
            end
            Del(:,i) = (m(i) ./ (m(i) + sgn)) .* sum((X - C(repmat(i,n,1),:)).^2, 2);
        end
    case 'cityblock'
        for i = changed
            if mod(m(i),2) == 0 % this will never catch singleton clusters
                ldist = Xmid(repmat(i,n,1),:,1) - X;
                rdist = X - Xmid(repmat(i,n,1),:,2);
                mbrs = (idx == i);
                sgn = repmat(1-2*mbrs, 1, p); % -1 for members, 1 for nonmembers
                Del(:,i) = sum(max(0, max(sgn.*rdist, sgn.*ldist)), 2);
            else
                Del(:,i) = sum(abs(X - C(repmat(i,n,1),:)), 2);
            end
        end
    case {'cosine','correlation'}
        % The points are normalized, centroids are not, so normalize them
        normC = sqrt(sum(C.^2, 2));
        if any(normC < eps(class(normC))) % small relative to unit-length data points
            error('stats:kmeans:ZeroCentroid', ...
                  'Zero cluster centroid created at iteration %d%s.',iter,repsMsg(rep,reps));
        end
        % This can be done without a loop, but the loop saves memory allocations
        for i = changed
            XCi = X * C(i,:)';
            mbrs = (idx == i);
            sgn = 1 - 2*mbrs; % -1 for members, 1 for nonmembers
            Del(:,i) = 1 + sgn .*...
                  (m(i).*normC(i) - sqrt((m(i).*normC(i)).^2 + 2.*sgn.*m(i).*XCi + 1));
        end
    case 'hamming'
        for i = changed
            if mod(m(i),2) == 0 % this will never catch singleton clusters
                % coords with an unequal number of 0s and 1s have a
                % different contribution than coords with an equal
                % number
                unequal01 = find(2*Xsum(i,:) ~= m(i));
                numequal01 = p - length(unequal01);
                mbrs = (idx == i);
                Di = abs(X(:,unequal01) - C(repmat(i,n,1),unequal01));
                Del(:,i) = (sum(Di, 2) + mbrs*numequal01) / p;
            else
                Del(:,i) = sum(abs(X - C(repmat(i,n,1),:)), 2) / p;
            end
        end
    end

    % Determine best possible move, if any, for each point.  Next we
    % will pick one from those that actually did move.
    previdx = idx;
    prevtotsumD = totsumD;
    [minDel, nidx] = min(Del, [], 2);
    moved = find(previdx ~= nidx);
    if ~isempty(moved)
        % Resolve ties in favor of not moving
        moved = moved(Del((previdx(moved)-1)*n + moved) > minDel(moved));
    end
    if isempty(moved)
        % Count an iteration if phase 2 did nothing at all, or if we're
        % in the middle of a pass through all the points
        if (iter == iter1) || nummoved > 0
            iter = iter + 1;
            if display > 2 % 'iter'
                disp(sprintf(dispfmt,iter,2,nummoved,totsumD));
            end
        end
        converged = true;
        break;
    end

    % Pick the next move in cyclic order
    moved = mod(min(mod(moved - lastmoved - 1, n) + lastmoved), n) + 1;

    % If we've gone once through all the points, that's an iteration
    if moved <= lastmoved
        iter = iter + 1;
        if display > 2 % 'iter'
            disp(sprintf(dispfmt,iter,2,nummoved,totsumD));
        end
        if iter >= maxit, break; end
        nummoved = 0;
    end
    nummoved = nummoved + 1;
    lastmoved = moved;

    oidx = idx(moved);
    nidx = nidx(moved);
    totsumD = totsumD + Del(moved,nidx) - Del(moved,oidx);

    % Update the cluster index vector, and the old and new cluster
    % counts and centroids
    idx(moved) = nidx;
    m(nidx) = m(nidx) + 1;
    m(oidx) = m(oidx) - 1;
    switch distance
    case 'sqeuclidean'
        C(nidx,:) = C(nidx,:) + (X(moved,:) - C(nidx,:)) / m(nidx);
        C(oidx,:) = C(oidx,:) - (X(moved,:) - C(oidx,:)) / m(oidx);
    case 'cityblock'
        for i = [oidx nidx]
            % Separate out sorted coords for points in each cluster.
            % New centroid is the coord median, save values above and
            % below median.  All done component-wise.
            Xsorted = sort(X(idx==i,:),1);
            nn = floor(.5*m(i));
            if mod(m(i),2) == 0
                C(i,:) = .5 * (Xsorted(nn,:) + Xsorted(nn+1,:));
                Xmid(i,:,1:2) = Xsorted([nn, nn+1],:)';
            else
                C(i,:) = Xsorted(nn+1,:);
                if m(i) > 1
                    Xmid(i,:,1:2) = Xsorted([nn, nn+2],:)';
                else
                    Xmid(i,:,1:2) = Xsorted([1, 1],:)';
                end
            end
        end
    case {'cosine','correlation'}
        C(nidx,:) = C(nidx,:) + (X(moved,:) - C(nidx,:)) / m(nidx);
        C(oidx,:) = C(oidx,:) - (X(moved,:) - C(oidx,:)) / m(oidx);
    case 'hamming'
        % Update summed coords for points in each cluster.  New
        % centroid is the coord median.  All done component-wise.
        Xsum(nidx,:) = Xsum(nidx,:) + X(moved,:);
        Xsum(oidx,:) = Xsum(oidx,:) - X(moved,:);
        C(nidx,:) = .5*sign(2*Xsum(nidx,:) - m(nidx)) + .5;
        C(oidx,:) = .5*sign(2*Xsum(oidx,:) - m(oidx)) + .5;
    end
    changed = sort([oidx nidx]);
end % phase two

end % nested function

end % main function

%------------------------------------------------------------------

function D = distfun(X, C, dist, iter)
%DISTFUN Calculate point to cluster centroid distances.
[n,p] = size(X);
D = zeros(n,size(C,1));
nclusts = size(C,1);

switch dist
case 'sqeuclidean'
    for i = 1:nclusts
        D(:,i) = (X(:,1) - C(i,1)).^2;
        for j = 2:p
            D(:,i) = D(:,i) + (X(:,j) - C(i,j)).^2;
        end
        % D(:,i) = sum((X - C(repmat(i,n,1),:)).^2, 2);
    end
case 'cityblock'
    for i = 1:nclusts
        D(:,i) = abs(X(:,1) - C(i,1));
        for j = 2:p
            D(:,i) = D(:,i) + abs(X(:,j) - C(i,j));
        end
        % D(:,i) = sum(abs(X - C(repmat(i,n,1),:)), 2);
    end
case {'cosine','correlation'}
    % The points are normalized, centroids are not, so normalize them
    normC = sqrt(sum(C.^2, 2));
    if any(normC < eps(class(normC))) % small relative to unit-length data points
        error('stats:kmeans:ZeroCentroid', ...
              'Zero cluster centroid created at iteration %d.',iter);
    end
    
    for i = 1:nclusts
        D(:,i) = max(1 - X * (C(i,:)./normC(i))', 0);
    end
case 'hamming'
    for i = 1:nclusts
        D(:,i) = abs(X(:,1) - C(i,1));
        for j = 2:p
            D(:,i) = D(:,i) + abs(X(:,j) - C(i,j));
        end
        D(:,i) = D(:,i) / p;
        % D(:,i) = sum(abs(X - C(repmat(i,n,1),:)), 2) / p;
    end
end
end % function

%------------------------------------------------------------------

function [centroids, counts] = gcentroids(X, index, clusts, dist)
%GCENTROIDS Centroids and counts stratified by group.
[n,p] = size(X);
num = length(clusts);
centroids = NaN(num,p);
counts = zeros(num,1);

for i = 1:num
    members = (index == clusts(i));
    if any(members)
        counts(i) = sum(members);
        switch dist
        case 'sqeuclidean'
            centroids(i,:) = sum(X(members,:),1) / counts(i);
        case 'cityblock'
            % Separate out sorted coords for points in i'th cluster,
            % and use to compute a fast median, component-wise
            Xsorted = sort(X(members,:),1);
            nn = floor(.5*counts(i));
            if mod(counts(i),2) == 0
                centroids(i,:) = .5 * (Xsorted(nn,:) + Xsorted(nn+1,:));
            else
                centroids(i,:) = Xsorted(nn+1,:);
            end
        case {'cosine','correlation'}
            centroids(i,:) = sum(X(members,:),1) / counts(i); % unnormalized
        case 'hamming'
            % Compute a fast median for binary data, component-wise
            centroids(i,:) = .5*sign(2*sum(X(members,:), 1) - counts(i)) + .5;
        end
    end
end
end % function

%------------------------------------------------------------------

function s = repsMsg(rep,reps)
% Utility for warning and error messages.
if reps == 1
    s = '';
else
    s = sprintf(' during replicate %d',rep);
end
end % function

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区国产| 91免费国产在线| 精品第一国产综合精品aⅴ| 日韩精品1区2区3区| 91精品午夜视频| 狠狠色狠狠色综合| 久久久精品天堂| 94色蜜桃网一区二区三区| 亚洲女与黑人做爰| 欧美一卡在线观看| 国产在线精品一区在线观看麻豆| 精品国产一二三| 99国产欧美另类久久久精品| 亚洲影视在线观看| 欧美mv和日韩mv国产网站| 成人黄色在线网站| 亚洲一区在线免费观看| 欧美电视剧免费观看| 成人免费的视频| 性做久久久久久久免费看| 欧美大尺度电影在线| 国产91露脸合集magnet| 亚洲国产成人高清精品| 久久久精品国产免费观看同学| 91丨porny丨蝌蚪视频| 青青草成人在线观看| 国产欧美视频在线观看| 欧美日韩午夜精品| 国产高清无密码一区二区三区| 玉米视频成人免费看| 精品国产伦一区二区三区免费| 波多野结衣在线一区| 日韩国产精品91| 亚洲色图制服诱惑 | 亚洲色欲色欲www在线观看| 欧美电影在哪看比较好| 成人激情免费电影网址| 美女视频一区二区| 一区二区国产视频| 久久天堂av综合合色蜜桃网| 欧美日韩国产首页| 成人av动漫网站| 久久国产精品露脸对白| 午夜欧美大尺度福利影院在线看| 国产精品美女久久久久aⅴ国产馆| 欧美老肥妇做.爰bbww| 一本久道久久综合中文字幕| 国产福利一区二区三区视频| 蜜桃av一区二区三区| 亚洲综合小说图片| ...av二区三区久久精品| 精品欧美黑人一区二区三区| 欧美精品第一页| 在线观看国产一区二区| 成人动漫在线一区| 国产精品1区2区| 久久精品国产亚洲高清剧情介绍| 亚洲国产美国国产综合一区二区 | 国产一区二区免费在线| 午夜激情综合网| 亚洲一区二区在线播放相泽| 日韩美女久久久| 亚洲欧洲av一区二区三区久久| 久久综合国产精品| 欧美大尺度电影在线| 欧美一区二区播放| 日韩欧美在线网站| 欧美一区二区三级| 欧美一区二区三区日韩| 6080日韩午夜伦伦午夜伦| 欧美手机在线视频| 欧美日韩国产高清一区二区三区| 色天使色偷偷av一区二区| 99久久精品国产观看| 92国产精品观看| 色视频一区二区| 欧美性猛交xxxx黑人交| 欧美综合在线视频| 欧美日韩精品免费| 欧美丰满美乳xxx高潮www| 欧美精品123区| 欧美tk丨vk视频| 久久久精品国产免大香伊| 久久久久久久久久美女| 国产午夜精品美女毛片视频| 久久久99久久精品欧美| 国产三级三级三级精品8ⅰ区| 欧美激情自拍偷拍| 亚洲色图视频免费播放| 一区二区三区色| 丝袜美腿亚洲一区二区图片| 日本不卡免费在线视频| 精品在线播放免费| 成人18视频日本| 日本福利一区二区| 4438x成人网最大色成网站| 欧美一区二区三区不卡| 国产午夜精品一区二区三区四区| 国产精品夫妻自拍| 亚洲高清久久久| 激情欧美一区二区| 成人性视频网站| 在线观看91视频| 26uuu国产一区二区三区| 亚洲国产精品精华液2区45| 一级中文字幕一区二区| 日韩av成人高清| 成人毛片在线观看| 欧美区在线观看| 国产亚洲1区2区3区| 樱花影视一区二区| 蜜桃av一区二区| 一本色道**综合亚洲精品蜜桃冫| 欧美日韩另类国产亚洲欧美一级| 久久综合一区二区| 洋洋av久久久久久久一区| 麻豆91精品91久久久的内涵| 波多野结衣在线一区| 日韩欧美一二区| 亚洲人成7777| 国产激情精品久久久第一区二区 | 精品理论电影在线观看| 亚洲欧洲成人精品av97| 精久久久久久久久久久| 91网站最新网址| 亚洲综合视频在线观看| 黄色日韩三级电影| 欧美三级三级三级| 欧美激情一区不卡| 麻豆高清免费国产一区| 色综合天天综合在线视频| 精品日韩一区二区三区免费视频| 亚洲日本欧美天堂| 国产aⅴ综合色| 日韩写真欧美这视频| 亚洲人成精品久久久久| 国产成人av电影在线播放| 欧美久久一区二区| 一个色综合av| 99久久夜色精品国产网站| www激情久久| 午夜久久久久久久久| 色综合天天天天做夜夜夜夜做| ww亚洲ww在线观看国产| 日本aⅴ精品一区二区三区| 在线观看日韩毛片| 中文字幕中文在线不卡住| 国产美女精品在线| 日韩欧美久久久| 免费在线观看一区| 欧美久久高跟鞋激| 亚洲一区二区精品视频| 97久久久精品综合88久久| 国产精品久久久一本精品 | 大尺度一区二区| 久久久91精品国产一区二区精品 | 国产精品一区一区三区| 欧美成人精精品一区二区频| 人人爽香蕉精品| 91精品国产综合久久香蕉麻豆| 一区二区高清免费观看影视大全| 99精品国产热久久91蜜凸| 国产精品每日更新在线播放网址| 粉嫩aⅴ一区二区三区四区| 国产精品五月天| av电影在线观看不卡| 一区在线播放视频| av不卡在线播放| 亚洲精品v日韩精品| 一本色道亚洲精品aⅴ| 亚洲精品五月天| 欧美日韩综合不卡| 日韩高清不卡一区| 精品福利av导航| 国产福利精品导航| 欧美国产乱子伦| 日本久久电影网| 亚洲国产另类精品专区| 欧美日韩国产欧美日美国产精品| 亚洲va天堂va国产va久| 日韩欧美高清在线| 丁香一区二区三区| 亚洲人成影院在线观看| 欧美日韩一二区| 国内外成人在线| 最新日韩av在线| 欧美日韩高清影院| 久久99国产精品久久99| 欧美极品美女视频| 在线观看亚洲一区| 蜜臀a∨国产成人精品| 国产日韩高清在线| 色婷婷综合久久久| 青娱乐精品视频在线| 国产日韩高清在线| 欧美日韩在线播放三区| 国产综合色在线| 亚洲蜜臀av乱码久久精品蜜桃| 欧美电影在线免费观看| 国产成人精品亚洲777人妖|