91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 23KB
    文件類型: .m
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-12
  • 語言: Matlab
  • 標簽: 聚類??

資源簡介

function [idx, C, sumD, D] = kmeans(X, k, varargin) % varargin:實際輸入參量 if nargin 1 % 大于1剛至少有一種距離 error(sprintf('Ambiguous ''distance'' parameter value: %s.', distance)); elseif isempty(i) % 如果是空的,則表明沒有合適的距離 error(sprintf('Unknown ''distance'' parameter value: %s.', distance)); end % 針對不同的距離,處理不同 distance = distNames{i}; switch distance case 'cityblock' % sort 列元素按升序排列,Xord中存的是元素在原始矩陣中的列中對應的大小位置 [Xsort,Xord] = sort(X,1); case 'cosine' % 余弦 % 計算每一行的和的平方根 Xnorm = sqrt(sum(X.^2, 2)); if any(min(Xnorm) <= eps * max(Xnorm)) error(['Some points have small relative magnitudes, making them ', ... 'effectively zero.\nEither remove those points, or choose a ', ... 'distance other than ''cosine''.'], []); end % 標量化 Xnorm(:,ones(1,p))得到n*p的矩陣 X = X ./ Xnorm(:,ones(1,p)); case 'correlation' % 線性化 X = X - repmat(mean(X,2),1,p); % 計算每一行的和的平方根 Xnorm = sqrt(sum(X.^2, 2)); if any(min(Xnorm) <= eps * max(Xnorm)) error(['Some points have small relative standard deviations, ma

資源截圖

代碼片段和文件信息

function?[idx?C?sumD?D]?=?kmeans(X?k?varargin)
%?varargin:實際輸入參量

if?nargin?????error(‘At?least?two?input?arguments?required.‘);
end

%?n?points?in?p?dimensional?space
[n?p]?=?size(X);
Xsort?=?[];?Xord?=?[];

%?變量名稱
pnames?=?{???‘distance‘??‘start‘?‘replicates‘?‘maxiter‘?‘emptyaction‘?‘display‘};
%?變量對應的值
dflts?=??{‘sqeuclidean‘?‘sample‘??????????[]???????100????????‘error‘??‘notify‘};
%?使參數名稱與參數值對應
[errmsgdistancestartrepsmaxitemptyactdisplay]?...
???????????????????????=?statgetargs(pnames?dflts?varargin{:});
error(errmsg);

%?------------------------------------------------------------------
%?判數距離名稱是否為字符數組?對數組X中的元素進行進應的處理
if?ischar(distance)
????distNames?=?{‘sqeuclidean‘‘cityblock‘‘cosine‘‘correlation‘‘hamming‘};
????%?lower?把字符串變為小號字母?strmatch?為字符串找到一個合適的匹配,并返回對應的索引
????i?=?strmatch(lower(distance)?distNames);
????if?length(i)?>?1
????????%?大于1剛至少有一種距離
????????error(sprintf(‘Ambiguous?‘‘distance‘‘?parameter?value:??%s.‘?distance));
????elseif?isempty(i)
????????%?如果是空的,則表明沒有合適的距離
????????error(sprintf(‘Unknown?‘‘distance‘‘?parameter?value:??%s.‘?distance));
????end
????%?針對不同的距離,處理不同
????distance?=?distNames{i};
????switch?distance?
????case?‘cityblock‘
????????%?sort?列元素按升序排列,Xord中存的是元素在原始矩陣中的列中對應的大小位置
????????[XsortXord]?=?sort(X1);
????case?‘cosine‘?
????????%?余弦
????????%?計算每一行的和的平方根
????????Xnorm?=?sqrt(sum(X.^2?2));
????????if?any(min(Xnorm)?<=?eps?*?max(Xnorm))
????????????error([‘Some?points?have?small?relative?magnitudes?making?them?‘?...
???????????????????‘effectively?zero.\nEither?remove?those?points?or?choose?a?‘?...
???????????????????‘distance?other?than?‘‘cosine‘‘.‘]?[]);
????????end
????????%?標量化?Xnorm(:ones(1p))得到n*p的矩陣
????????X?=?X?./?Xnorm(:ones(1p));
????case?‘correlation‘
????????%?線性化
????????X?=?X?-?repmat(mean(X2)1p);
????????%?計算每一行的和的平方根
????????Xnorm?=?sqrt(sum(X.^2?2));
????????if?any(min(Xnorm)?<=?eps?*?max(Xnorm))
????????????error([‘Some?points?have?small?relative?standard?deviations?making?them?‘?...
???????????????????‘effectively?constant.\nEither?remove?those?points?or?choose?a?‘?...
???????????????????‘distance?other?than?‘‘correlation‘‘.‘]?[]);
????????end
????????%?標量化
????????X?=?X?./?Xnorm(:ones(1p));
????case?‘hamming‘
????????%?加權平均?針對二元元素進行處理
????????if?~all(ismember(X(:)[0?1]))
????????????error(‘Non-binary?data?cannot?be?clustered?using?Hamming?distance.‘);
????????end
????end
else
????error(‘The?‘‘distance‘‘?parameter?value?must?be?a?string.‘);
end

%?------------------------------------------------------------------
%??不同的初始聚類中心的選擇方法?
if?ischar(start)
????startNames?=?{‘uniform‘‘sample‘‘cluster‘};
????i?=?strmatch(lower(start)?startNames);
????if?length(i)?>?1
????????error(sprintf(‘Ambiguous?‘‘start‘‘?parameter?value:??%s.‘?start));
????elseif?isempty(i)
????????error(sprintf(‘Unknown?‘‘start‘‘?parameter?value:??%s.‘?start));
????elseif?isempty(k)
????????er

評論

共有 條評論