资源简介
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 < 2
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
- 上一篇:matlab制作哈哈镜
- 下一篇:FWM 耦合方程 matlab代码
相关资源
- 基于颜色的聚类分割matlab
- 双聚类(Bi-clustering)Matlab工具箱
- 模糊聚类图像分割FCM/FLICM等
- 重叠聚类数据集
- matlab聚类分析工具箱很好用
- K均值聚类算法,图像处理,GUI,mat
- 谱聚类算法对数据点进行分类
- matlab子空间聚类
- MATLAB聚类分析工具箱
- c均值聚类matlab算法和程序
- DBSCAN算法及Matlab实现
- 近邻传播聚类算法及matlab API
- 聚类数指标matlab工具箱
- Clustering by fast search and find of density
- 蚁群聚类算法
- 四种聚类算法源代码及
- BSAS顺序聚类算法matlab实现代码注释很
- K均值聚类+Matlab实现.rar
- k均值聚类算法的原理与matlab实现
- 路标识别与提取采用聚类方法C-means
- 谱聚类matlab代码
- flower17 数据集,
- MATLAB下的 Superpixel Segmentation using Lin
- 模式识别与智能计算-Matlab技术实现
- 谱聚类以及多个相关聚类的matlab实现
- 基于植物彩色图像的分割技术的研究
- 基于停用词的文本预处理及其聚类(
- 模式识别作业__ISODATA聚类算法 报告
- 动态模糊聚类算法
- 聚类分析Matlab代码[比赛已经用过保真
评论
共有 条评论