📄 aggclust.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"><html><head> <title>Description of aggclust</title> <meta name="keywords" content="aggclust"> <meta name="description" content="aggClust: Hierarchical (agglomerative) clustering"> <meta http-equiv="Content-Type" content="text/html; charset=big5"> <meta name="generator" content="m2html © 2003 Guillaume Flandin"> <meta name="robots" content="index, follow"> <link type="text/css" rel="stylesheet" href="../m2html.css"></head><body><a name="_top"></a><div><a href="../index.html">Home</a> > <a href="index.html">dcpr</a> > aggclust.m</div><!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png"> Master index</a></td><td align="right"><a href="index.html">Index for dcpr <img alt=">" border="0" src="../right.png"></a></td></tr></table>--><h1>aggclust</h1><h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="box"><strong>aggClust: Hierarchical (agglomerative) clustering</strong></div><h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="box"><strong>function level = aggclust(distance, method) </strong></div><h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="fragment"><pre class="comment">aggClust: Hierarchical (agglomerative) clustering
Usage: level = aggclust(distance, method)
distance: 2D distance matrix of data points, with diagonal elements of "INF"
method: "single" for single-linkage, "complete" for complete-linkage
level: data structure for a hierarchical clustering result
level(i).distance: distance matrix at level i
level(i).height: the minimum distance measure to form level i
level(i).merged: the two clusters (of level i-1) being merged to form level i
level(i).cluster{j}: a vector denotes the data points in j-th cluster of level i
Type "aggclust" to see a demo of a hierarchical clustering
(single-linkage) of 50 random patterns of dimensionality 2.
See also <a href="dendro.html" class="code" title="function dendro(level)">DENDRO</a>, <a href="linkclu.html" class="code" title="function hclustdm(pattern_mat, distance, level)">LINKCLU</a>.</pre></div><!-- crossreference --><h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>This function calls:<ul style="list-style-image:url(../matlabicon.gif)"><li><a href="aggclust.html" class="code" title="function level = aggclust(distance, method)">aggclust</a> aggClust: Hierarchical (agglomerative) clustering</li><li><a href="dendro.html" class="code" title="function dendro(level)">dendro</a> DENDRO Dendrogrma plot for the result from hierarchical clustering.</li></ul>This function is called by:<ul style="list-style-image:url(../matlabicon.gif)"><li><a href="aggclust.html" class="code" title="function level = aggclust(distance, method)">aggclust</a> aggClust: Hierarchical (agglomerative) clustering</li><li><a href="dendro.html" class="code" title="function dendro(level)">dendro</a> DENDRO Dendrogrma plot for the result from hierarchical clustering.</li><li><a href="hclusteringDemo.html" class="code" title="function hClusteringDemo(pattern_mat, distance, level)">hclusteringDemo</a> LINKCLU Display the formation of hierarchical clustering step by step</li><li><a href="linkclu.html" class="code" title="function hclustdm(pattern_mat, distance, level)">linkclu</a> LINKCLU Display the formation of hierarchical clustering step by step</li></ul><!-- crossreference --><h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><ul style="list-style-image:url(../matlabicon.gif)"><li><a href="#_sub1" class="code">function levelOutput = merge(level, method)</a></li><li><a href="#_sub2" class="code">function [i, j, minValue] = minxy(A)</a></li><li><a href="#_sub3" class="code">function selfdemo</a></li></ul><h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function level = aggclust(distance, method)</a>0002 <span class="comment">%aggClust: Hierarchical (agglomerative) clustering</span>0003 <span class="comment">% Usage: level = aggclust(distance, method)</span>0004 <span class="comment">% distance: 2D distance matrix of data points, with diagonal elements of "INF"</span>0005 <span class="comment">% method: "single" for single-linkage, "complete" for complete-linkage</span>0006 <span class="comment">% level: data structure for a hierarchical clustering result</span>0007 <span class="comment">% level(i).distance: distance matrix at level i</span>0008 <span class="comment">% level(i).height: the minimum distance measure to form level i</span>0009 <span class="comment">% level(i).merged: the two clusters (of level i-1) being merged to form level i</span>0010 <span class="comment">% level(i).cluster{j}: a vector denotes the data points in j-th cluster of level i</span>0011 <span class="comment">%</span>0012 <span class="comment">% Type "aggclust" to see a demo of a hierarchical clustering</span>0013 <span class="comment">% (single-linkage) of 50 random patterns of dimensionality 2.</span>0014 <span class="comment">%</span>0015 <span class="comment">% See also DENDRO, LINKCLU.</span>0016 0017 <span class="comment">% Roger Jang, 19981027, 20080117</span>0018 0019 <span class="keyword">if</span> nargin<1, <a href="#_sub3" class="code" title="subfunction selfdemo">selfdemo</a>; <span class="keyword">return</span>; <span class="keyword">end</span>0020 <span class="keyword">if</span> nargin<2, method = <span class="string">'single'</span>; <span class="keyword">end</span>0021 0022 dataNum = size(distance, 1);0023 level(1).distance = distance;0024 level(1).height = 0;0025 level(1).merged = [];0026 <span class="keyword">for</span> i = 1:dataNum,0027 level(1).cluster{i} = [i];0028 <span class="keyword">end</span>0029 0030 <span class="keyword">for</span> i = 2:dataNum,0031 level(i) = <a href="#_sub1" class="code" title="subfunction levelOutput = merge(level, method)">merge</a>(level(i-1), method);0032 <span class="keyword">end</span>0033 0034 <span class="comment">% ====== Merge clusters</span>0035 <a name="_sub1" href="#_subfunctions" class="code">function levelOutput = merge(level, method)</a>0036 <span class="comment">% MERGE Merge a level of n clusters into n-1 clusters</span>0037 0038 [minI, minJ, minValue] = <a href="#_sub2" class="code" title="subfunction [i, j, minValue] = minxy(A)">minxy</a>(level.distance);0039 <span class="keyword">if</span> minI>minJ, temp=minI; minI=minJ; minJ=temp; <span class="keyword">end</span> <span class="comment">% Reorder to have minI < minJ</span>0040 levelOutput = level;0041 levelOutput.height = minValue; <span class="comment">% Update height</span>0042 levelOutput.merged = [minI minJ]; <span class="comment">% Update merged cluster</span>0043 <span class="comment">% Update cluster</span>0044 levelOutput.cluster{minI} = [levelOutput.cluster{minI} levelOutput.cluster{minJ}];0045 levelOutput.cluster(minJ) = []; <span class="comment">% delete cluster{minJ}</span>0046 0047 <span class="comment">% New distance matrix</span>0048 distance2 = level.distance;0049 <span class="comment">% "min" for single-linkage; "max" for complete-linkage</span>0050 <span class="keyword">if</span> strcmp(method, <span class="string">'single'</span>),0051 distance2(:, minI) = min(distance2(:, minI), distance2(:, minJ)); 0052 distance2(minI, :) = min(distance2(minI, :), distance2(minJ, :)); 0053 <span class="keyword">elseif</span> strcmp(method, <span class="string">'complete'</span>),0054 distance2(:, minI) = max(distance2(:, minI), distance2(:, minJ)); 0055 distance2(minI, :) = max(distance2(minI, :), distance2(minJ, :)); 0056 <span class="keyword">else</span>0057 error(sprintf(<span class="string">'Unsupported method in %s!'</span>, mfilename));0058 <span class="keyword">end</span>0059 0060 distance2(minJ, :) = [];0061 distance2(:, minJ) = [];0062 distance2(minI, minI) = inf;0063 0064 levelOutput.distance = distance2;0065 0066 <span class="comment">% ====== Find the minimum value in a matrix</span>0067 <a name="_sub2" href="#_subfunctions" class="code">function [i, j, minValue] = minxy(A)</a>0068 [valueRow, indexRow] = min(A);0069 [minValue, j] = min(valueRow);0070 i = indexRow(j);0071 0072 <span class="comment">% ====== Self demo ======</span>0073 <a name="_sub3" href="#_subfunctions" class="code">function selfdemo</a>0074 dataNum = 50;0075 dimension = 2;0076 points = rand(dataNum, dimension);0077 <span class="keyword">for</span> i = 1:dataNum,0078 <span class="keyword">for</span> j = 1:dataNum,0079 distance(i, j) = norm(points(i,:)-points(j,:));0080 <span class="keyword">end</span>0081 <span class="keyword">end</span>0082 0083 <span class="comment">% Diagonal elements should always be inf.</span>0084 <span class="keyword">for</span> i = 1:dataNum, distance(i, i) = inf; <span class="keyword">end</span>0085 0086 level = <a href="aggclust.html" class="code" title="function level = aggclust(distance, method)">aggclust</a>(distance);0087 0088 <span class="comment">% Plot heights w.r.t. levels</span>0089 figure;0090 plot([level.height], <span class="string">'r:o'</span>);0091 xlabel(<span class="string">'Level'</span>);0092 ylabel(<span class="string">'Height'</span>);0093 title(<span class="string">'Height vs. level'</span>);0094 0095 <span class="comment">% Plot the dendrogram</span>0096 figure;0097 <a href="dendro.html" class="code" title="function dendro(level)">dendro</a>(level);0098 0099 <span class="comment">% View the formation of clusters</span>0100 <span class="comment">%figure;</span>0101 <span class="comment">%linkclu(points, distance, level);</span></pre></div><hr><address>Generated on Thu 30-Oct-2008 12:53:56 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> © 2003</address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -