资源简介
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代码
相关资源
- 模式识别K-均值聚类法matlab实现程序
- svm完成聚类功能的小程序
- 系统聚类法及Matlab软件对系统聚类法
- 自适应k均值聚类
- 一个matlab的K均值聚类分割程序
- 模糊k均值聚类算法matlab实现
- 复杂网络聚类系数的matlab编程代码
- MATLAB的有序样品聚类的程序
- MATLAB实现的欧式聚类,多种子点区域
- 关于多元统计中有序聚类的matlab编程
- 模糊C均值聚类图像分割算法的matlab实
- matlab层次聚类算法
- k均值聚类分析matlab代码
- Genetic optimization of C clustering 运用遗传
- 光谱分析中的聚类方法和判别方法
- 计算聚类算法评价指标之一
- 机器学习、人工智能、数据挖掘中经
- 可以用的经典密度聚类算法(DBSCAN)
- matlab编写的蛙跳聚类算法(SFLA)
- k-medoids聚类算法matlab源代码
- Chameleon变色龙层次聚类算法实现
- 针对三维点云的Mean Shift聚类算法(
- matlab kmeans聚类 代码和带图
- 层次聚类分析matlab实现
- 基于K-means聚类算法的图像分割及其
- 用讲明如何利用SOM神经网络进行聚类
- 采用K-means聚类,实现多维矩阵的聚类
- 小波聚类matlab源程序
- 粒子群聚类matlab
- k值聚类分析法matlab代码
评论
共有 条评论