<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">OJS</journal-id><journal-title-group><journal-title>Open Journal of Statistics</journal-title></journal-title-group><issn pub-type="epub">2161-718X</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/ojs.2014.410078</article-id><article-id pub-id-type="publisher-id">OJS-51471</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Physics&amp;Mathematics</subject></subj-group></article-categories><title-group><article-title>
 
 
  Parallel and Hierarchical Mode Association Clustering with an R Package &lt;i&gt;Modalclust&lt;/i&gt;
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>ansong</surname><given-names>Cheng</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Surajit</surname><given-names>Ray</given-names></name><xref ref-type="aff" rid="aff2"><sup>2</sup></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib></contrib-group><aff id="aff2"><addr-line>School of Mathematics and Statistics, Glasgow University, Glasgow, UK</addr-line></aff><aff id="aff1"><addr-line>Quantitative Science, Glaxo Smith Kline, King of Prussia, King of Prussia, Pennsylvania, USA</addr-line></aff><author-notes><corresp id="cor1">* E-mail:<email>yansong.x.cheng@gsk.com(AC)</email>;<email>surajit.ray@glasgow.ac.uk(SR)</email>;</corresp></author-notes><pub-date pub-type="epub"><day>18</day><month>11</month><year>2014</year></pub-date><volume>04</volume><issue>10</issue><fpage>826</fpage><lpage>836</lpage><history><date date-type="received"><day>24</day>	<month>September</month>	<year>2014</year></date><date date-type="rev-recd"><day>20</day>	<month>October</month>	<year>2014</year>	</date><date date-type="accepted"><day>5</day>	<month>November</month>	<year>2014</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  <em>Modalclust</em> is an R package which performs Hierarchical Mode Association Clustering (HMAC) along with its parallel implementation over several processors. Modal clustering techniques are especially designed to efficiently extract clusters in high dimensions with arbitrary density shapes. Further, clustering is performed over several resolutions and the results are summarized as a hierarchical tree, thus providing a model based multi resolution cluster analysis. Finally we implement a novel parallel implementation of HMAC which performs the clustering job over several processors thereby dramatically increasing the speed of clustering procedure especially for large data sets. This package also provides a number of functions for visualizing clusters in high dimensions, which can also be used with other clustering softwares.
 
</p></abstract><kwd-group><kwd>Modality</kwd><kwd> Kernel Density Estimate</kwd><kwd> Mode</kwd><kwd> Clustering</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>Cluster analysis is a ubiquitous technique in statistical analysis that has been widely used in multiple disciplines for many years. Historically cluster analysis techniques have been approached from either a fully parametric view, e.g. mixture model based clustering, or a distribution free approach, e.g. linkage based hierarchical clustering. While the parametric paradigm provides the inferential framework and accounts for the sampling variability, it often lacks the flexibility to accommodate complex clusters and are often not scalable to high dimensional data. On the other hand, the distribution free approaches are usually fast and capable of uncovering complex clusters by making use of different distance measures. However, the inferential framework is distinctly missing in the distribution free clustering techniques. Accordingly most clustering packages in R also fall under the two above mentioned groups of clustering techniques.</p><p>This paper describes a software program for cluster analysis that can knead the strengths of these two seemingly different approaches and develop a framework of parallel implementation for clustering techniques. For most model based approaches to clustering, the following limitations are well recognized in the literature: 1) the number of clusters has to be specified; 2) the mixing densities have to be specified, and as estimating the parameters of the mixture models is often computationally very expensive, we are often forced to limit our choices to simple distributions such as Gaussian; 3) computational speed is inadequate especially in high dimensions and this coupled with the complexity of the proposed model often limits the use of model-based techniques either theoretically or computationally; 4) it is not straightforward to extend model-based clustering to uncover heterogeneity at multiple resolutions, similar to the one offered by to the model free linkage based hierarchical clustering.</p><p>Influential work towards resolving the first three issues has been carried out in [<xref ref-type="bibr" rid="scirp.51471-ref1">1</xref>] -[<xref ref-type="bibr" rid="scirp.51471-ref7">7</xref>] . Many previous approaches have focused on model selection of mixtures by choosing the number of components, merging existing components or by determining the covariance structure of the mixture density under consideration, see [<xref ref-type="bibr" rid="scirp.51471-ref8">8</xref>] - [<xref ref-type="bibr" rid="scirp.51471-ref10">10</xref>] . They work efficiently if the underlying distribution is chosen correctly, but none of these model based approaches is designed to handle a completely arbitrary underlying distribution (see <xref ref-type="fig" rid="fig5">Figure 5</xref> for one such example). That is, we think that limitations due to issues (3) and (4), above often necessitate the use of model- free techniques.</p><p>This paper describes a software program for cluster analysis that can knead the strengths of these two seemingly different approaches and develop a framework of parallel implementation for clustering techniques. The hierarchical mode association clustering—HMAC [<xref ref-type="bibr" rid="scirp.51471-ref11">11</xref>] , which is constructed by first determining modes of the high-dimensional density and then associating sample points to those modes, is the first multivariate model based clustering approach resolving many of the drawbacks of standard model-based clustering. Specifically, it can accommodate flexible subpopulation structures at multiple resolutions while retaining the desired natural inferential framework of parametric mixtures. [<xref ref-type="bibr" rid="scirp.51471-ref12">12</xref>] developed the inference procedure to the number of clusters of this approach. Modalclust is the package implemented in R (R Development Core Team, 2010) for carrying out HMAC along with its parallel implementation (PHMAC) over several processors. Though mode-counting or mode hunting has been extensively used as a clustering technique, most implementation are limited to univariate data. Generalization to higher dimensions was limited both due to the computational complexity of finding modes in higher dimension and the lack of any natural framework to study the inferential properties of modes in higher dimensions. The HMAC provides a computationally fast iterative algorithm for calculating the modes and thereby providing a clustering approach which is scalable to high dimensions. This article provides the description of the R package that implements HMAC and additionally provides an wide array visualization tools for representing clusters in high dimensions. Further, we propose a novel parallel implementation of the approach which dramatically reduces the computational time especially for large data sets, both in data dimen- sions and the number of observations.</p><p>This paper is organized as follows: Section 2 briefly introduces the algorithm of Modal Expectation Maximi- zation (MEM) and builds the notion of mode association clustering technique. Section 3 describes a parallel computing framework of HMAC along with computing time comparisons. Section 4 illustrates the implemen- tation of clustering functions in the R package Modalclust along with examples of the plotting functions especially designed for objects of class hmac. Section 5 provides the conclusion and discussion. Comparison of Modal clustering with other popular model based and model free techniques are provided in the supplementary document.</p></sec><sec id="s2"><title>2. Modal EM and HMAC</title><p>The main challenge for using mode-based clustering in high dimensions is the cost of computing modes, which are mathematically evaluated as local maximas of the density function with support on<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x5.png" xlink:type="simple"/></inline-formula>, <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x6.png" xlink:type="simple"/></inline-formula>being the data dimension. Traditional techniques of finding local maxima, such as “hill climbing” works well for univariate data. But multivariate hill climbing is computationally expensive thereby limiting its use in high dimensions. [<xref ref-type="bibr" rid="scirp.51471-ref9">9</xref>] proposed an algorithm that solves a local maximum of a kernel density by ascending iterations starting from the data points. Since the algorithm is very similar to Expectation Maximization (EM) algorithm, it is named as</p><p>Modal Expectation Maximization (MEM). Define the mixture density as<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x7.png" xlink:type="simple"/></inline-formula>. Now, given any</p><p>initial value<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x8.png" xlink:type="simple"/></inline-formula>, the MEM solves a local maximum of the mixture density by alternating the following two steps until it meets some user defined stopping criterion.</p><p>1. Let <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x9.png" xlink:type="simple"/></inline-formula></p><p>2. Update <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x10.png" xlink:type="simple"/></inline-formula></p><p>Details of convergence of the MEM approach can be found in [<xref ref-type="bibr" rid="scirp.51471-ref11">11</xref>] . The above iterative steps provide a computationally simpler approach than grid search method for “hillclimbing” from any starting point <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x11.png" xlink:type="simple"/></inline-formula> by exploiting the properties of density functions.Given a multivariate kernel<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x12.png" xlink:type="simple"/></inline-formula>, let the density of the data be given by</p><disp-formula id="scirp.51471-formula767"><graphic  xlink:href="http://html.scirp.org/file/3-1240419x13.png"  xlink:type="simple"/></disp-formula><p>where <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x14.png" xlink:type="simple"/></inline-formula> is the matrix of smoothing parameters. Further, in the special case of Gaussian kernels, i.e.,</p><disp-formula id="scirp.51471-formula768"><graphic  xlink:href="http://html.scirp.org/file/3-1240419x15.png"  xlink:type="simple"/></disp-formula><p>where <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x16.png" xlink:type="simple"/></inline-formula> is the pdf of a Gaussian distribution, the update of <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x17.png" xlink:type="simple"/></inline-formula> is simply</p><disp-formula id="scirp.51471-formula769"><graphic  xlink:href="http://html.scirp.org/file/3-1240419x18.png"  xlink:type="simple"/></disp-formula><p>allowing us to avoid the numerical optimization of Step 2.</p><p>Now we present the HMAC algorithm. First we scale the data and use a kernel density estimator, with a normal kernel to estimate the density of the data. The variance of the kernel, <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x19.png" xlink:type="simple"/></inline-formula>is a diagonal matrix with all entries <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x20.png" xlink:type="simple"/></inline-formula> denoted by<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x20.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x21.png" xlink:type="simple"/></inline-formula>, thus <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x20.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x21.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x22.png" xlink:type="simple"/></inline-formula> is the single smoothing parameter for all the dimensions. The choice of the smoothing parameter is an area of research in itself. In the present version of the program we incorporate the strategy of using pseudo degrees of freedom, proposed in [<xref ref-type="bibr" rid="scirp.51471-ref13">13</xref>] . Their strategy provides us with a range of smoothing parameters and exploring them from finest to coarsest resolution provides the user with the desired hierarchical clustering. First we describe the steps of Mode Association Clustering (MAC) for a single band- width<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x20.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x21.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x22.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x23.png" xlink:type="simple"/></inline-formula>.</p><p>1. Given a set of data<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x24.png" xlink:type="simple"/></inline-formula>, <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x24.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x25.png" xlink:type="simple"/></inline-formula>form kernel density</p><disp-formula id="scirp.51471-formula770"><label>(1.1)</label><graphic position="anchor" xlink:href="http://html.scirp.org/file/3-1240419x26.png"  xlink:type="simple"/></disp-formula><p>2. Use <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula> as the density function. Use each<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x28.png" xlink:type="simple"/></inline-formula>, <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x28.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x29.png" xlink:type="simple"/></inline-formula>, as the initial value in the MEM algorithm and find one mode of <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x28.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x29.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x30.png" xlink:type="simple"/></inline-formula> for each<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x28.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x29.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x30.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x31.png" xlink:type="simple"/></inline-formula>. Let the mode identified by starting from <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x28.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x29.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x30.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x31.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x32.png" xlink:type="simple"/></inline-formula> be<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x27.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x28.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x29.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x30.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x31.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x32.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x33.png" xlink:type="simple"/></inline-formula>.</p><p>3. Extract distinctive values from the set <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x34.png" xlink:type="simple"/></inline-formula> to form a set<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x34.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x35.png" xlink:type="simple"/></inline-formula>. Label the elements in <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x34.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x35.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x36.png" xlink:type="simple"/></inline-formula> from 1 to<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x34.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x35.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x36.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x37.png" xlink:type="simple"/></inline-formula>. In practice, due to finite precision, two modes are regarded equal if their distance is below a threshold<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x34.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x35.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x36.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x37.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x38.png" xlink:type="simple"/></inline-formula>. In our package, we use<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x34.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x35.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x36.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x37.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x38.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x39.png" xlink:type="simple"/></inline-formula>.</p><p>4. If <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x40.png" xlink:type="simple"/></inline-formula> equals the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x40.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x41.png" xlink:type="simple"/></inline-formula> element in<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x40.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x41.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x42.png" xlink:type="simple"/></inline-formula>, <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x40.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x41.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x42.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x43.png" xlink:type="simple"/></inline-formula>is put in the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x40.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x41.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x42.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x43.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x44.png" xlink:type="simple"/></inline-formula> cluster.</p><p>We note that when the bandwidth <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula> increases, the kernel density estimator <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula> in (1.1) becomes smoother, and thus more points tend to climb to the same mode. This suggests a natural approach for hierar- chical organization (or “nesting”) of our MAC clusters. Thus, given a range of bandwidths<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula>, The clustering can be performed in the following bottom-up manner. Define the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula> as the collection of all the distinct modes obtained by MAC using the<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula>. First we perform MAC at the smallest bandwidth<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x50.png" xlink:type="simple"/></inline-formula>. At any bandwidth<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x50.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x51.png" xlink:type="simple"/></inline-formula>, the elements in <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x50.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x51.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x52.png" xlink:type="simple"/></inline-formula> obtained from the preceding bandwidth are fed into MAC using the density<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x50.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x51.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x52.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x53.png" xlink:type="simple"/></inline-formula>. The modes identified at this level form a new set of cluster is<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x50.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x51.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x52.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x53.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x54.png" xlink:type="simple"/></inline-formula>. This procedure is repeated across all<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x45.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x46.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x47.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x48.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x49.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x50.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x51.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x52.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x53.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x54.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x55.png" xlink:type="simple"/></inline-formula>’s. This preserves the hierarchy of clusters and thus the name Hierarchical Mode Association Clustering (HMAC). To summarize we present the HMAC procedure in the following box.</p><p>1. Start with the data <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x56.png" xlink:type="simple"/></inline-formula> and set level <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x56.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x57.png" xlink:type="simple"/></inline-formula> and initialize the mode association of the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x56.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x57.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x58.png" xlink:type="simple"/></inline-formula> data point as<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x56.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x57.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x58.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x59.png" xlink:type="simple"/></inline-formula>.</p><p>2.<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x60.png" xlink:type="simple"/></inline-formula>.</p><p>3. Form kernel density as in (1.1) using<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x61.png" xlink:type="simple"/></inline-formula>.</p><p>4. Cluster the elements in <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x62.png" xlink:type="simple"/></inline-formula> by using density<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x62.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x63.png" xlink:type="simple"/></inline-formula>. Let the set of distinct modes obtained be<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x62.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x63.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x64.png" xlink:type="simple"/></inline-formula>.</p><p>5. If <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula> and the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula> element in <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula> is clustered to the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x68.png" xlink:type="simple"/></inline-formula> mode in<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x68.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x69.png" xlink:type="simple"/></inline-formula>, then<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x68.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x69.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x70.png" xlink:type="simple"/></inline-formula>. In another word, the cluster of <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x68.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x69.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x70.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x71.png" xlink:type="simple"/></inline-formula> at level <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x68.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x69.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x70.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x71.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x72.png" xlink:type="simple"/></inline-formula> is determined by its cluster representative in<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x65.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x66.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x67.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x68.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x69.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x70.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x71.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x72.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x73.png" xlink:type="simple"/></inline-formula>.</p><p>6. Stop if<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x74.png" xlink:type="simple"/></inline-formula>, otherwise go to Step 2.</p></sec><sec id="s3"><title>3. Parallel HMAC</title><p>In this section we develop the method of parallel computing of HMAC (PHMAC) and its application together with some comparisons of performance of the parallel and non-parallel approach. The MAC approach is computationally expensive when the number of objects <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x75.png" xlink:type="simple"/></inline-formula> becomes large. It requires that we use the MEM for each data point to find its local mamximum of the density. Note that for the HMAC, the steps for the level <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x75.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x76.png" xlink:type="simple"/></inline-formula> onwards only need to start the MEM from the modes of the previous level<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x75.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x76.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x77.png" xlink:type="simple"/></inline-formula>, and hence the computational cost does not increase at the rate of<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x75.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x76.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x77.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x78.png" xlink:type="simple"/></inline-formula>. Fortunately the MAC approach provides a natural framework for a “divide and conquer” clustering algorithm. One can simply divide the data into <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x75.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x76.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x77.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x78.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x79.png" xlink:type="simple"/></inline-formula> partitions, perform modal clustering on each of those partitions, and pool the modes obtained from each of these partitions to form a collection <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x75.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x76.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x77.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x78.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x79.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x80.png" xlink:type="simple"/></inline-formula> and apply the HMAC onward. If the user has access to several computing cores of the same machine or several processors of a shared memory computing cluster, the “divide and conquer” algorithm can be seamlessly parallelized. The PHMAC procedure is summarized as follows:</p><p>Step 1. Sphering transform the data <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x81.png" xlink:type="simple"/></inline-formula> to form a new data set<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x81.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x82.png" xlink:type="simple"/></inline-formula>.</p><p>Step 2. Let<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x83.png" xlink:type="simple"/></inline-formula>. Divide the data (<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x83.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x84.png" xlink:type="simple"/></inline-formula>objects) into <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x83.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x84.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x85.png" xlink:type="simple"/></inline-formula> partitions <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x83.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x84.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x85.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x86.png" xlink:type="simple"/></inline-formula> randomly,<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x83.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x84.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x85.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x86.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x87.png" xlink:type="simple"/></inline-formula>.</p><p>Step 3. Perform HMAC on each of these subsets at the lowest resolution, i.e., using <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x88.png" xlink:type="simple"/></inline-formula> and get the modes<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x88.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x89.png" xlink:type="simple"/></inline-formula>,<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x88.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x89.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x90.png" xlink:type="simple"/></inline-formula>.</p><p>Step 4. Pool the modes from each subset of data to form<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x91.png" xlink:type="simple"/></inline-formula>.</p><p>Step 5. Perform HMAC starting from Step 2 and obtain the final hierarchical clustering.</p><p>Step 6. Transform <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x92.png" xlink:type="simple"/></inline-formula> back to<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x92.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x93.png" xlink:type="simple"/></inline-formula>.</p><p><xref ref-type="fig" rid="fig1">Figure 1</xref> shows one PHMAC example on the graph. In this figure, (a) shows the simulated data with four clusters along with the contour plot, where the color indicates the final clustering using PHMAC; (b) shows the four random partitions of the unlabeled data along with the modes (red asterisks) at each partition; (c) shows the mode obtained from the four partitions; (d) shows the final modes (green triangles) starting from the modes of the partitioned data. A demonstration of different steps of parallel clustering with four random partitions is given in <xref ref-type="fig" rid="fig1">Figure 1</xref>. The original data set is partitioned into 4 random subsets, and initial modal clustering is performed within the partitions. In the next step, the modes of each of these partitions are merged to form the overall modal clusters in <xref ref-type="fig" rid="fig1">Figure 1</xref>(c).</p><p>Modes have a natural hierarchy and it is computationally easy to merge modes from different partitions. In practice, we need to decide the best choice of the partition and how many partitions to use. In this section, we provide some guidelines regarding the choices, without exploring their quality in details. In the absence of any other knowledge, one should randomly partition the data. Other choices include partitioning data based on certain coordinates which form a natural clustering, and then taking products of a few of those coordinates to build the overall partition. This strategy might increase the computational speed by restricting the modes within a relatively homogeneous set of observations. Another choice might be to sample the data and build partitions based on the modes of the sampled data.</p><p>The PHMAC we proposed uses parallel computing at the first level of HMAC and then use non-parallel computing from the second level onwards. Therefore, the number of partitions to minimize the computational time is a complex function of the number of available processors, the number of observations and the bandwidth parameter of the KDE. If one uses too many partitions, one might speed up the first step, but would have the risk of ending up with too many modes for the next level, where the hill climbing is done from the collection of modes from each partition with respect to the overall density. In contrast, for a large<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x94.png" xlink:type="simple"/></inline-formula>, if one chooses too few partitions or no partitions, this would lead to a huge computational cost at the first step. Moverover, the choice of the smoothing parameter will also determine how many modes one needs to start from at the merged level.</p><p>We compare the computing speed of parallel versus serial clustering using 1, 2, 4, 8 and 12 multi-core processors. Tests were performed on a 64 bits 4 Quad Core AMD 8384 (2.7 Ghz each core), with 16 GB RAM</p><fig id="fig1"  position="float"><label><xref ref-type="fig" rid="fig1">Figure 1</xref></label><caption><title> Steps in parallel HMAC procedure for a simulated data set</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x95.png"/></fig><p>running Linux Centos 5 and R version 2.11.0 From <xref ref-type="table" rid="table1">Table 1</xref>, it is clear to observe that parallel computing significantly increases the computing speed. Because the KDE is a sum of kernels centered at every data point, the amount of computation needed to identify the mode associated with a single point grows linearly with<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula>. The computational complexity of clustering all the data by MAC is thus quadratic in<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula>. Suppose we have <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x98.png" xlink:type="simple"/></inline-formula> processors, then the computing complexity for the MAC is <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x98.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x99.png" xlink:type="simple"/></inline-formula> and for parallel computing of MAC is thus<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x98.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x99.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x100.png" xlink:type="simple"/></inline-formula>. However, as discussed before, we can see that the computational speed is not a monotone decreasing function of the number of processors. Theoretically, it is true that more processors can reduce the computing complexity at the initial step. However, in practice, if the data set is not sufficiently large, using more processors may not save time, as it may produce a large number of modes for the next level of HMAC. When the <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x98.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x99.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x100.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x101.png" xlink:type="simple"/></inline-formula> or<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x98.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x99.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x100.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x101.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x102.png" xlink:type="simple"/></inline-formula>, including more processors provides a dramatic decrease in computing time, whereas for<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x96.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x97.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x98.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x99.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x100.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x101.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x102.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x103.png" xlink:type="simple"/></inline-formula>, there is no clear decrease in time elapsed when using 4 or 8 processors instead of the</p><table-wrap id="table1" ><label><xref ref-type="table" rid="table1">Table 1</xref></label><caption><title> Comparison of computing time (elapsed time in seconds) using different number of processors</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" ></th><th align="center" valign="middle"  colspan="5"  >Number of processors</th></tr></thead><tr><td align="center" valign="middle"  colspan="2"  >Data dimensions</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >8</td><td align="center" valign="middle" >12</td></tr><tr><td align="center" valign="middle" >n = 2000</td><td align="center" valign="middle" >d = 2</td><td align="center" valign="middle" >56.58</td><td align="center" valign="middle" >17.01</td><td align="center" valign="middle" >7.84</td><td align="center" valign="middle" >6.91</td><td align="center" valign="middle" >8.02</td></tr><tr><td align="center" valign="middle" >n = 2000</td><td align="center" valign="middle" >d = 20</td><td align="center" valign="middle" >323.16</td><td align="center" valign="middle" >128.13</td><td align="center" valign="middle" >112.42</td><td align="center" valign="middle" >190.11</td><td align="center" valign="middle" >250.22</td></tr><tr><td align="center" valign="middle" >n = 2000</td><td align="center" valign="middle" >d = 40</td><td align="center" valign="middle" >730.18</td><td align="center" valign="middle" >560.16</td><td align="center" valign="middle" >687.79</td><td align="center" valign="middle" >764.29</td><td align="center" valign="middle" >753.36</td></tr><tr><td align="center" valign="middle" >n = 10,000</td><td align="center" valign="middle" >d = 2</td><td align="center" valign="middle" >3849.83</td><td align="center" valign="middle" >871.33</td><td align="center" valign="middle" >276.88</td><td align="center" valign="middle" >145.61</td><td align="center" valign="middle" >131.22</td></tr><tr><td align="center" valign="middle" >n = 10,000</td><td align="center" valign="middle" >d = 20</td><td align="center" valign="middle" >8410.96</td><td align="center" valign="middle" >1694.82</td><td align="center" valign="middle" >585.33</td><td align="center" valign="middle" >536.32</td><td align="center" valign="middle" >459.88</td></tr><tr><td align="center" valign="middle" >n = 50,000</td><td align="center" valign="middle" >d = 2</td><td align="center" valign="middle" >210295.29</td><td align="center" valign="middle" >71152.82</td><td align="center" valign="middle" >23383.61</td><td align="center" valign="middle" >11959.24</td><td align="center" valign="middle" >4875.64</td></tr></tbody></table></table-wrap><p>maximum 12 processors. For<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x104.png" xlink:type="simple"/></inline-formula>, the decrease in computing time from 1 processor to using 12 processors is more than 40 fold (see <xref ref-type="fig" rid="fig2">Figure 2</xref>), but even if the user is able to use just two processors, the computing time is reduced to 1/3 of how long a single processor would take. Even for<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x104.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x105.png" xlink:type="simple"/></inline-formula>, the advantage of using 12 processors is almost 30 fold, whereas for<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x104.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x105.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x106.png" xlink:type="simple"/></inline-formula>, the advantage is only 8 folds. In fact, the lowest time is actually clocked by 8 processors for<inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x104.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x105.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x106.png" xlink:type="simple"/></inline-formula><inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x107.png" xlink:type="simple"/></inline-formula>, but using all 12 processors does not increase the time significantly. These comparisons show the potential for parallelizing the modal clustering algorithm and its inherent use for clustering high throughput data.</p><p>The R package Modalclust was created to implement the HMAC and PHMAC. There are also some plotting tools that give the user a comprehensive visual and understanding of the clustering result. Sources, binaries and documentation of Modalclust are available for download from the Comprehensive R Archive Network http://cran.r-project.org/ under the GNU Public License.</p></sec><sec id="s4"><title>4. Example of Using R Package Modalclust</title><p>In this section, we demonstrate the usage of the functions and plotting tools that are available in the Modalclust package.</p><sec id="s4_1"><title>4.1. Modal Clustering</title><p>First, we provide an example of performing modal clustering to extract the subpopulations in the logcta20 data. The description of the dataset is given in the package. The scatter plot, along with its smooth density, is provided in <xref ref-type="fig" rid="fig3">Figure 3</xref>. First, we use the following command to download and install the package:</p><p>R &gt; install.packages (“Modalclust”)</p><p>R &gt; library (“Modalclust”)</p><p>Using the following command, we can get the standard (serial) HMAC and parallel HMAC using two pro- cessors for logctA20 data.</p><p>R &gt; logcta20.hmac &lt; −phmac(logcta20,npart=1,parallel=FALSE)</p><p>R &gt; logcta20p2.hmac &lt; −phmac(logcta20,npart=2,parallel=TRUE)</p><p>Both implementation results are given in <xref ref-type="fig" rid="fig4">Figure 4</xref>, which clearly identifies the three distinct subpopulations. Other model-based clustering methods, such as EM-clustering or K-means, could not capture the subpopulation structure, as the individual subpopulation is not a normal density. Distance based clustering method e.g., hierarchical clustering, with a range of linkage functions performed even worse.</p><p>By default, the function selects an interesting range of smoothing parameters with ten <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x108.png" xlink:type="simple"/></inline-formula> values, and the final clustering only shows the results from the levels which produced merging from the previous level. For example, for the logcta20, the smoothing parameters chosen automatically are</p><p>R &gt; logcta20.hmac$sigma</p><p>[<xref ref-type="bibr" rid="scirp.51471-ref1">1</xref>] 0.26 0.29 0.31 0.34 0.38 0.43 0.49 0.58 0.72 0.94,</p><p>which are chosen using the spectral degrees of freedom criterion introduced in [<xref ref-type="bibr" rid="scirp.51471-ref10">10</xref>] . Though we started with 10 different smoothing levels, the final clustering shows only 6 different levels along with a decreasing number of hierarchical cluster.</p><fig id="fig2"  position="float"><label><xref ref-type="fig" rid="fig2">Figure 2</xref></label><caption><title> Comparison of fold increase in time for clustering two dimensional data of different sample sizes with respect to using 12 processors</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x109.png"/></fig><fig id="fig3"  position="float"><label><xref ref-type="fig" rid="fig3">Figure 3</xref></label><caption><title> Smoothing scatter plot of logctA20 data</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x110.png"/></fig><fig id="fig4"  position="float"><label><xref ref-type="fig" rid="fig4">Figure 4</xref></label><caption><title> HMAC output of logctA20 data</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x111.png"/></fig><p>R &gt; logcta20.hmac$level</p><p>[<xref ref-type="bibr" rid="scirp.51471-ref1">1</xref>] 1 2 3 3 3 4 4 4 5 6</p><p>R &gt; logcta20.hmac$n.cluster</p><p>[<xref ref-type="bibr" rid="scirp.51471-ref1">1</xref>] 11 7 5 5 5 3 3 3 2 1</p><p>The user can also provide smoothing levels using the option sigmaselect in phmac. There is also the option of starting the algorithm from user defined modes instead of the original data points. This option becomes handy if the user wishes to merge clusters obtained from other clustering methods, e.g., EM-clustering or K-means.</p></sec><sec id="s4_2"><title>4.2. Some Examples of Plotting</title><p>There are several plotting functions in Modalclust, which can be used to visualize the output from the function phmac. The plotting functions are defined on object class hmac, which is the default class of a phmac output. These plot functions will be illustrated through a data set named disc2d, which has 400 observations displaying the shape of two half discs. The scatter plot of disc2d along with its contour plot are given in <xref ref-type="fig" rid="fig5">Figure 5</xref>.</p><p>First, we introduce the standard plot function for an object of class “hmac”. This unique and informative plot shows the hierarchical tree obtained from modal clustering. It can be obtained by</p><p>R &gt; data (“disc2d.hmac”)</p><p>R &gt; plot (disc2d.hmac)</p><p>The dendrogram obtained from the disc2d data is given in <xref ref-type="fig" rid="fig6">Figure 6</xref>. The <inline-formula><inline-graphic xlink:href="http://html.scirp.org/file/3-1240419x112.png" xlink:type="simple"/></inline-formula>-axis gives the different levels, and the tree displays the merging at different levels. There are several options available for drawing the tree,</p><fig id="fig5"  position="float"><label><xref ref-type="fig" rid="fig5">Figure 5</xref></label><caption><title> The scatter plot of disc2d data along with its probability contours</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x113.png"/></fig><fig id="fig6"  position="float"><label><xref ref-type="fig" rid="fig6">Figure 6</xref></label><caption><title> Hierarchical tree (Dendrogram) of disc2d data showing the clustering at four levels of smoothing</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x114.png"/></fig><p>including starting the tree from a specific level, drawing the tree only up to a desired number of clusters, and comparing the clustering results with user defined clusters.</p><p>There are some other plotting functions that are designed mainly for visualizing clustering results for two dimensional data, although one can provide multivariate extensions of the functions by considering all possible pairwise dimensions. One can obtain the hard clustering of the data for each level using the command</p><p>R &gt; hard.hmac(disc2d.hmac)</p><p>Alternatively, the user can specify the hierarchical level or the number of desired clusters, and obtain the corresponding cluster membership (hard clustering) of the data. For example, the plot in <xref ref-type="fig" rid="fig7">Figure 7</xref> can be obtained by either of the following two commands:</p><p>R &gt; hard.hmac (disc2d.hmac, n.cluster=2)</p><p>R &gt; hard.hmac (disc2d.hmac, level=3)</p><p>Another function, which allows the user to visualize the soft clustering of the data, is based on the posterior probabilities of each observation belonging to the clusters at a specified level. For example, the plot in <xref ref-type="fig" rid="fig8">Figure 8</xref> can be obtained using</p><p>R &gt; soft.hmac (disc2d.hmac, n.cluster=3)</p><fig id="fig7"  position="float"><label><xref ref-type="fig" rid="fig7">Figure 7</xref></label><caption><title> Hard clustering for disc2d data at level 3</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x115.png"/></fig><fig id="fig8"  position="float"><label><xref ref-type="fig" rid="fig8">Figure 8</xref></label><caption><title> Soft clustering for disc2d data at level 2</title></caption><graphic mimetype="image"   position="float"  xlink:type="simple"  xlink:href="http://html.scirp.org/file/3-1240419x116.png"/></fig><p>The plot enables us to visualize the probabilistic clustering of the three cluster model. A user can specify a probability threshold for assigning observations which clearly belong to a cluster or lie in the “boundary” of more than one cluster. Points having posterior probability below the user specified boundlevel (default value 0.4) are assigned as boundary points and colored in gray. In <xref ref-type="fig" rid="fig8">Figure 8</xref>, we have five boundary points among the 400 original observations. Additionally, at any specified level or cluster size, the plot=FALSE option in hard.hmac returns the cluster membership. Similarly, plot=FALSE option in soft.hmac returns a list that contains the posterior probability of each observation and boundary points.</p><p>R &gt; disc2d.2clust &lt; −hard.hmac (disc2d.hmac,n.cluster=2, plot=FALSE)</p><p>R &gt; disc2d.2clust.soft &lt; −soft.hmac (disc2d.hmac,n.cluster=2, plot=FALSE)</p></sec></sec><sec id="s5"><title>5. Discussion</title><p>Modalclust performs a hierarchical model based clustering allowing for arbitrary density shapes. Parallel computing can dramatically increase the computing speed by splitting the data and running the HMAC simul- taneously on multi-core processors. Plotting functions give the user a comprehensive visualizing and under- standing of the clustering result. One future work from this stage would be to increase computing speed, especially for large data set. From the discussion in Section 3, it is clear to see, parallel computing increases the computing speed a lot. That relies on the computing equipment. If one user has no multicore or a few multicore processors available, it will take a lot of the computing resources when clustering large data sets. One potential way to solve the computing speed problem is using k-means or other faster clustering techniques initially, and using the HMAC from the centers of each cluster of initial clustering results. For example, if we have a data set with 20,000 observations, we can use k-means clustering and choose a certain number of centers, like 200 centers and run k-means clustering first. And then we start from the centers of 200 clusters and clustering by HMAC. Theoretically it is a sub-optimal way compared with running HMAC for all points. In practice, it is very useful to reduce the computing costs and still obtain the right clustering.</p><p>In addition, we are currently working on an implementation of modal clustering for online or streaming data, where the goal would be to update an existing cluster with the new data without storing all the original data points and allowing for creation of new clusters and merging of existing clusters.</p><p>Sources, binaries and documentation of Modalclust are available for download from the Comprehensive R Archive Network http://cran.r-project.org/ under the GNU Public License.</p></sec></body><back><ref-list><title>References</title><ref id="scirp.51471-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Fraley, C. (1998) Algorithms for Model-Based Gaussian Hierarchical Clustering. SIAM Journal on Scientific Computing, 20, 270-281. http://dx.doi.org/10.1137/S1064827596311451</mixed-citation></ref><ref id="scirp.51471-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Fraley, C. and Raftery, A. (1998) How Many Clusters? Which clustering method? Answers via Model-Based Cluster Analysis. The Computer Journal, 41, 578-588. http://dx.doi.org/10.1093/comjnl/41.8.578</mixed-citation></ref><ref id="scirp.51471-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">Fraley, C. and Raftery, A. (1999) Mclust: Software for Model-Based Cluster Analysis. Journal of Classification, 16, 297-306. http://dx.doi.org/10.1007/s003579900058</mixed-citation></ref><ref id="scirp.51471-ref4"><label>4</label><mixed-citation publication-type="other" xlink:type="simple">Fraley, C. and Raftery, A. (2002) Model-Based Clustering, Discriminant Analysis, and Density Estimation. Journal of the American Statistical Association, 97, 611-631. http://dx.doi.org/10.1198/016214502760047131</mixed-citation></ref><ref id="scirp.51471-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">Fraley, C. and Raftery, A. (2002) Mclust: Software for Model-Based Clustering, Density Estimation and Discriminant Analysis. Tech. Rep., DTIC Document.</mixed-citation></ref><ref id="scirp.51471-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">Ray, S. and Lindsay, B. (2005) The Topography of Multivariate Normal Mixtures. The Annals of Statistics, 33, 2042-2065. http://dx.doi.org/10.1214/009053605000000417</mixed-citation></ref><ref id="scirp.51471-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Ray, S. and Lindsay, B. (2007) Model Selection in High Dimensions: A Quadratic-Risk-Based Approach. Journal of the Royal Statistical Society: Series B (Statistical Methodology), 70, 95-118.</mixed-citation></ref><ref id="scirp.51471-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">Baudry, J., Raftery, A., Celeux, G., Lo, K. and Gottardo, R. (2010) Combining Mixture Components for Clustering. Journal of Computational and Graphical Statistics, 19, 332-353. http://dx.doi.org/10.1198/jcgs.2010.08111</mixed-citation></ref><ref id="scirp.51471-ref9"><label>9</label><mixed-citation publication-type="other" xlink:type="simple">Hennig, C. (2010) Methods for Merging Gaussian Mixture Components. Advances in Data Analysis and Classification, 4, 3-34. http://dx.doi.org/10.1007/s11634-010-0058-3</mixed-citation></ref><ref id="scirp.51471-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Tantrum, J., Murua, A. and Stuetzle, W. (2003) Assessment and Pruning of Hierarchical Model Based Clustering. Proceedings of the 9th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 197-205.  
http://dx.doi.org/10.1145/956750.956775</mixed-citation></ref><ref id="scirp.51471-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">Li, J., Ray, S. and Lindsay, B. (2007) A Nonparametric Statistical Approach to Clustering via Mode Identification. Journal of Machine Learning Research, 8, 1687-1723.</mixed-citation></ref><ref id="scirp.51471-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">Cheng, Y. and Ray, S. (2014) Multivariate Modality Inference Using Gaussian Kernel. Open Journal of Statistics, 4, 419-434. http://dx.doi.org/10.4236/ojs.2014.45041</mixed-citation></ref><ref id="scirp.51471-ref13"><label>13</label><mixed-citation publication-type="other" xlink:type="simple">Lindsay, B., Markatou, M., Ray, S., Yang, K. and Chen, S. (2008) Quadratic Distances on Probabilities: A Unified Foundation. The Annals of Statistics, 36, 983-1006. http://dx.doi.org/10.1214/009053607000000956</mixed-citation></ref></ref-list></back></article>