function [center]=searchcenter(X,kratio)
[n,~]=size(X);
isleft=true(n,1);
count=zeros(n,1);
center=[];
kind=0;
dist=0;
for i=1:n
for j=i+1:n
dist=dist+weightdist(X(i,:),X(j,:));
end
end
dist=dist/((n-1)*(n-1)/2);
radius1=dist*kratio(1);
radius2=dist*kratio(2);
while any(isleft)
for i=1:n
count(i)=0;
if isleft(i)
for j=1:n
if isleft(j)
dist=weightdist(X(i,:),X(j,:));
count(i)=count(i) + dist<=radius1;
end
end
end
end
[~,locs]=max(count);
iscenter=true;
for i=1:kind
dist=weightdist(X(locs,:),center(i,:));
iscenter=iscenter && dist>=radius2;
if ~iscenter
break;
end
end
if iscenter
kind=kind+1;
center(end+1,:)=X(locs,:);
for i=1:n
if isleft(i)
dist=weightdist(X(i,:),X(locs,:));
if dist <= radius1
isleft(i)=false;
end
end
end
else
isleft(locs)=false;
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.2、K-Means算法 K-Means算法是基于距离相似性的聚类算法,通过比较样本之间的相似性,将形式的样本划分到同一个类别中,K-Means算法的基本过程为: 初始化常数 ,随机初始化k个聚类中心 重复计算以下过程,直到聚类中心不再改变 计算每个样本与每个聚类中心之间的相似度,将样本划分到最相似的类别中 计算划分到每个类别中的所有样本特征的均值,并将该均值作为每个类新的聚类中心 输出最终的聚类中心以及每个样本所属的类别 在K-Means算法中,需要随机初始化k个聚类中心,而K-Means算法对初始聚类中心的选取较为敏感,若选择的聚类中心不好,则得到的聚类结果会非常差,因此,对K-Means算法提出了很多的改进的方法,如K-Means++算法,在K-Means++算法中,希望初始化的k个聚类中心之间的距离尽可能的大,其具体过程为: 在数据集中随机选择一个样本点作为第一个初始化的聚类中心 选择出其余的聚类中心: 计算样本中的每一个样本点与已经初始化的聚类中心之间的距离,并选择其中最短的距离 以概率选择距离最大的样本作为新的聚类中心,重复上述过程,直到 个聚类中心都被确定 对k个初
资源推荐
资源详情
资源评论
收起资源包目录
基于 K-means 聚类算法的图像区域分割.zip (7个子文件)
基于 K-means 聚类算法的图像区域分割
searchcenter.m 1KB
exactvecotr.m 249B
football.jpg 26KB
imkmeans.m 572B
searchintial.m 307B
main.m 220B
sampledist.m 479B
共 7 条
- 1
资源评论
小黑码蚁
- 粉丝: 2414
- 资源: 2082
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功