当前位置:首页 > 代码 > 正文

聚类算法matlab代码(matlab聚类分析的代码案例)

admin 发布:2022-12-19 16:06 111


本篇文章给大家谈谈聚类算法matlab代码,以及matlab聚类分析的代码案例对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

matlab如何代码实现分裂层次聚类?

近需要用到层次聚类,发现在Matlab上很容易实现,下面是代码加详细注释

[plain] view plain copy

clear all

clc

close all

mdist=input('输入坐标文件名字\n');

disp('读取数据坐标')

%获取坐标

%文件为二维的坐标,第一列为x轴坐标,第二列为y轴坐标

xx=load(mdist);

%获取数据的个数存至number

[number, row]=size(xx);

%获取距离矩阵,第二参数指定距离计算方法

%可选参数有'euclidean':欧氏距离(默认);'seuclidean':标准化欧氏距离;

%'mahalanobis':马氏距离;'cityblock':布洛克距离;'minkowski':明可夫斯基距离;

%'cosine':余弦距离 'correlation':相关性 'hamming':汉明距离 'jaccard':Jaccard相似度

%'chebychev':Chebychev距离。

yy=pdist(xx,'euclidean');

%获取聚类,第二参数指定层次聚类方式

%'single':单连通,最短距离法(默认);'complete':全连通,最长距离法;'average':未加权平均距离法;

%'weighted': 加权平均法;'centroid': 质心距离法;'median':加权质心距离法;'ward':内平方距离法(最小方差算法)

zz=linkage(yy,'single');

%指定获取簇类个数

Ncluster=input('输入类个数\n');

%获取指定Ncluster个数的聚类结果

c = cluster( zz,'maxclust', Ncluster );

%获取绘图所需颜色

%需要用到linspecer.m文件

%下载地址

%

if(Ncluster12)

Color = linspecer( Ncluster );

else

Color = linspecer( Ncluster, 'qualitative' );

end

for i=1:Ncluster

for j = 1:number

if(c(j) == i)

hold on

plot(xx(j,1),xx(j,2),'o','MarkerFaceColor',Color(i,:),'MarkerEdgeColor',Color(i,:))

end

end

end

OPTICS聚类算法的matlab实现

OPTICS聚类算法代码,从

该处下载。

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

% Function:

% [RD,CD,order]=optics(x,k)

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

% Aim:

% Ordering objects of a data set to obtain the clustering structure

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

% Input:

% x - data set (m,n); m-objects, n-variables

% k - number of objects in a neighborhood of the selected object

% (minimal number of objects considered as a cluster)

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

% Output:

% RD - vector with reachability distances (m,1)

% CD - vector with core distances (m,1)

% order - vector specifying the order of objects (1,m)

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

% Example of use:

% x=[randn(30,2)*.4;randn(40,2)*.5+ones(40,1)*[4 4]];

% [RD,CD,order]=optics(x,4)

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

%

function [RD,CD,order]=optics(x,k)

[m,n]=size(x);

CD=zeros(1,m);

RD=ones(1,m)*10^10;

% Calculate Core Distances

for i=1:m

D=sort(dist(x(i,:),x));

CD(i)=D(k+1);

end

order=[];

seeds=[1:m];

ind=1;

while ~isempty(seeds)

ob=seeds(ind);

seeds(ind)=[];

order=[order ob];

mm=max([ones(1,length(seeds))*CD(ob);dist(x(ob,:),x(seeds,:))]);

ii=(RD(seeds))mm;

RD(seeds(ii))=mm(ii);

[i1 ind]=min(RD(seeds));

end

RD(1)=max(RD(2:m))+.1*max(RD(2:m));

function [D]=dist(i,x)

% function: [D]=dist(i,x)

%

% Aim:

% Calculates the Euclidean distances between the i-th object and all objects in x

% Input:

% i - an object (1,n)

% x - data matrix (m,n); m-objects, n-variables

%

% Output:

% D - Euclidean distance (m,1)

[m,n]=size(x);

D=(sum((((ones(m,1)*i)-x).^2)'));

if n==1

D=abs((ones(m,1)*i-x))';

end

如何对图像做分类器训练matlab代码

对图像做分类器训练要建立视觉词袋来进行图像分类。该过程生成用来表示图像视觉词的直方图,通过这些直方图来训练图像分类器。下面的步骤描述如何建立图像集,建立视觉词袋,以及训练和运用图像分类器。

第一步:建立图像类别集合

将图像分割成训练子集和测试子集。利用imageDatastore函数来存储训练分类器的图像。可以利用splitEachLabel函数将图像分割成训练数据和测试数据。

读取类别图像和创建图像子集

setDir = fullfile(toolboxdir('vision'),'visiondata','imageSets');

imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource','foldernames');

分割图集成训练和测试子集。下例中,30%作为训练数据,余下的作为测试数据。

[trainingSet,testSet] = splitEachLabel(imds,0.3,'randomize');

第二步:建立特征词袋

通过从每个类别的有代表性的图像中提取特征描述符,创建视觉词汇表或特征包。

通过在训练集合中提取出的特征描述符上利用k-means聚类算法,bagOfFeatures对象定义特征,视觉词汇。该算法迭代地将描述符分成k个互斥簇。由此产生的簇是紧密的,并具有相似的特性。每个集群中心代表一个特征,或一个可视词。可以基于特征检测器提取特征,也可以定义一个网格来提取特征描述符。网格方法可能丢失细节信息。因此,对不包含明显特征的图像使用网格,例如海滩等景物的图像。使用Speed up robust features(或SURF)检测器提供更大的尺度不变性。默认情况下,该算法运行“网格”方法。

该算法工作流对图像进行整体分析。图像必须有适当的标签来描述它们所代表的类。例如,一组汽车图像可以被标记为汽车。工作流不依赖于空间信息,也不依赖于标记图像中的特定对象。视觉词袋技术依赖于非局部化的检测技术。

第三步:通过视觉词袋训练图像分类器

trainImageCategoryClassifier函数返回一个图像分类器。该方法使用基于2分类支持向量机(SVM)的error-correcting output codes(ECOC)框架来训练一个多分类器。

该方法利用bagOfFeatures对象返回的视觉词袋将图像集中的图像编码成视觉词直方图。然后将视觉词直方图作为训练分类器的正负样本。

1、将训练集中的每幅图像利用bagOfFeature的encode方法进行编码。该函数检测和提取图像中的特征,然后利用最近邻算法构造每个图像的特征直方图。函数将描述符逼近聚类中心来增加直方图各bin的数值。直方图的长度取决于bagOfFeatures对象构造的出来的视觉词的数量。最终将直方图作为图像的特征向量。

2、对训练集中的每幅图像重复步骤1,建立训练数据

3、评价分类器。在测试图像集上使用imagecategoryclassifier的evaluate方法测试分类器。输出混淆矩阵可以分析预测结果。理想的分类结果是对角线上包含一个标准矩阵。不正确的分类导致出现分数值。

第四步:对图像或图像集进行分类

最后使用imageCategoryClassifier 的predeict方法对新图像进行分类来确定其类型。

聚类算法matlab代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于matlab聚类分析的代码案例、聚类算法matlab代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/11961.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载