<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Integrating Fuzzy c-Means Clustering with PostgreSQL</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>c Ruslan Miniakhmetov ⃝</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>M.Sc. advisor Mikhail Zymbler</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Proceedings of the Spring Researcher's Colloquium on Database and Information Systems</institution>
          ,
          <addr-line>Moscow, Russia, 2011</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>South Ural State University</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>1998</year>
      </pub-date>
      <abstract>
        <p>Many data sets to be clustered are stored in relational databases. Having a clusterization algorithm implemented in SQL provides easier clusterization inside a relational DBMS than outside with some alternative tools. In this paper we propose Fuzzy c-Means clustering algorithm adapted for PostgreSQL open-source relational DBMS.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Integrating clustering algorithms is a topic/xplore/al
issue for database programmers [
        <xref ref-type="bibr" rid="ref10">11</xref>
        ]. Such an approach,
on the one hand, encapsulates DBMS internal details
from application programmer. On the other hand, it
allows to avoid overhead connected with export data
outside a relational DBMS. The Fuzzy c-Means (FCM) [
        <xref ref-type="bibr" rid="ref5 ref8">9,
6, 2</xref>
        ] clustering algorithm provides a fuzzy clustering of
data. Currently this algorithm have many
implementations on a high-level programming languages [
        <xref ref-type="bibr" rid="ref4 ref6">5, 7</xref>
        ]. For
implementation the FCM algorithm in SQL we choose
an open-source PostgreSQL DBMS [
        <xref ref-type="bibr" rid="ref14">15</xref>
        ].
      </p>
      <p>The paper is organized as follows. Section 2
introduces basic definitions and an overview of the FCM
algorithm. Section 3 proposes implementation of the FCM
in SQL called pgFCM. Section 4 briefly discusses related
work. Section 5 contains conclusion remarks and
directions for future work.</p>
      <p>
        The Fuzzy c-Means Algorithm
K-Means [
        <xref ref-type="bibr" rid="ref9">10</xref>
        ] is one of the most popular clustering
algorithms, it is a simple and fairly fast [
        <xref ref-type="bibr" rid="ref2">3</xref>
        ]. The FCM
algorithm generalizes K-Means to provide fuzzy clustering,
where data vectors can belong to several partitions
(clusters) at the same time with a given weight (membership
degree). To describe FCM we use the following notation:
• d ∈ N — dimensionality of a data vectors (or data
items) space;
• i ∈ N : 1 ⩽ i ⩽ n — vector subscript in a training
set;
• xi ∈ X — the i-th vector in the sample;
• k ∈ N — number of clusters;
• j ∈ N : 1 ⩽ j ⩽ k — cluster number;
• C ⊂ Rk d — matrix with clusters’ centers
(centroids);
• cj ∈ Rd — center of cluster j, d-dimensional
vector;
• xil; cjl ∈ R — l-s coordinates of vectors xi and cj
respectively;
• U ⊂ Rn k — matrix with membership degrees,
where uij ∈ R: 0 ⩽ uij ⩽ 1 is a membership
degree between vector xi and cluster j;
•
      </p>
      <p>(xi; cj ) — distance function, defines a
membership degree between vector xi and cluster j;
• m ∈ R : m &gt; 1 — the fuzzyfication degree of
objective function;
• JF CM</p>
      <p>— objective function.</p>
      <p>The FCM is based on minimization of the objective
function JF CM :</p>
      <p>N k
JF CM (X; k; m) = ∑ ∑ uimj 2(xi; cj )</p>
      <p>i=1 j=1</p>
      <p>Fuzzy clusterization is carried out through an iterative
optimization of the objective function (1). Membership
matrix U and centroids cij are updated using the
following formulas:</p>
      <p>∀j; l
uij = ∑k ( (xi; cj ) ) 1 2m
t=1
(xi; ct)
n
∑uimj · xil
cjl = i=1n
∑uimj
i=1
(1)
(2)
(3)
degree of membership vector xi to a cluster cj on step s
degree of membership vector xi to a cluster cj on step s+1
result of computation function
(6) on step s
i; x1; x2; : : : ; xd
i; l; val
j; l; val
i; j; dist
i; j; val
i; j; val
d; k; n; s; delta
n
n·d
k·d
n·k
n·k
n·k
s</p>
      <p>
        Let s is a number of iteration, ui(js) and ui(js+1) are
elements of matrix U on steps s and s+1 respectively, and
" ∈ (0; 1) ⊂ R is a termination criterion. Then the
termination condition can be written as follows:
miajx{|ui(js+1) − ui(js)|} &lt; "
(4)
Objective function (1) converges to a local minimum (or
a saddle point) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>Algorithm 1 The Fuzzy c-Means Algorithm
Input: X; k; m; "
Output: U
1: s := 0; U (0) := (uij ) {initialization}
2: repeat
3: {computation of new centroids’ coordinates}
Compute C(s) := (cj ) using formula (3)
where uij ∈ U (s)
4: {update matrixes values}</p>
      <p>Compute U (s) and U (s+1) using formula (2)
5: s := s + 1
6: until miajx{|ui(js) − ui(js 1)|} ⩾ "</p>
      <p>Algorithm 1 shows the basic FCM. The input
of algorithm receives a set of data vectors X =
(x1; x2; : : : ; xn), number of clusters k, fuzzyfication
degree m, and termination criterion ". The output is a
matrix of membership degrees U .
3</p>
      <p>Implementation of Fuzzy c-Means
Algorithm using PostgreSQL
In this section we suggest pgFCM algorithm as a way to
integrate FCM algorithm with PostgreSQL DBMS.
3.1</p>
    </sec>
    <sec id="sec-2">
      <title>General Definitions</title>
      <p>To integrate FCM algorithm with a relational DBMS it is
necessary to perform matrixes U and X as relational
tables. Subscripts for identification elements of relational
tables are presented in Table 1 (numbers n; k; d a defined
above in a section 2).</p>
      <p>As a function of distance (xi; cj ), without loss of
generality, we use the Euclidean metric:
v
u d
(xi; cj ) = tu∑ (xil − cjl)2
l=1
(5)
= miajx{|ui(js+1) − ui(js)|}
(6)
3.2</p>
    </sec>
    <sec id="sec-3">
      <title>Database Scheme</title>
      <p>Table 2 summarizes database scheme of pgFCM
algorithm (underlined columns are primary keys).</p>
      <p>In order to store sample of a data vectors from set X it
is necessary to define table SH (i; x1; x2; : : : ; xd). Each
row of sample stores vector of data with dimension d and
subscript i. Table SH has n rows and column i as a
primary key.</p>
      <p>FCM steps demand aggregation of vector coordinates
(sum, maximum, etc.) from set X . However, because
of its definition, table SH does not allow using SQL
aggregation functions. To avoid this obstacle we define a
table SV (i; l; val), which contains n·d rows and have
a composite primary key (i; l). Table SV represents a
data sample from table SH ans supports SQL
aggregation functions max and sum.</p>
      <p>Due to store coordinates of cluster centroids
temporary table C(j; l; val) is defined. Table C has k·d rows
and the composite primary key (j; l). Like the table SV ,
structure of table C allows to use aggregation functions.</p>
      <p>In order to store distances (xi; cj )
table SD(i; j; dist) is used. This table has n·k rows
and the composite primary key (i; j).</p>
      <p>Table U (i; j; val) stores membership degrees,
calculated on s-th step. To store membership degrees on
s+1 step similar table U T (i; j; val) is used. Both tables
have n·k rows and the composite primary key (i; j).</p>
      <p>Finally, table P (d; k; n; s; delta) stores iteration
number s and the result of computation function (6) delta for
this iteration number. Number of rows in table P
depends on the number of iterations.
3.3</p>
    </sec>
    <sec id="sec-4">
      <title>The pgFCM Algorithm</title>
      <p>The pgFCM algorithm is implemented by means of a
stored function in PL/pgSQL language. Algorithm 2
shows the main steps of the pgFCM.</p>
      <p>Algorithm 2 The pgFCM Algorithm
Input: SH; k; m; eps
Output: U
1: {initialization}</p>
      <p>Create and initialize temporary tables (U; P; SV ,
etc.)
2: repeat
3: {computations}
4: Compute centroids coordinates. Update table C.
5: Compute distances (xi; cj). Update table SD.
6: Compute membership degrees U T = (utij).</p>
      <p>Update table U T .
7: {update}</p>
      <p>Update tables P and U .
8: {check for termination}
9: until P:delta ⩾ eps</p>
      <p>The input set of data vectors X stored in table SH.
Fuzzyfication degree m, termination criterion ", and
number of clusters k are function parameters. The
table U contains a result of pgFCM work.</p>
    </sec>
    <sec id="sec-5">
      <title>3.4 Initialization</title>
      <p>Initialization of tables SV , U , and P provided by
SQLcode I1, I2, and I3 respectively. Table SV is formed by
sampling records from the table SH.</p>
      <sec id="sec-5-1">
        <title>I1: INSERT INTO SV</title>
      </sec>
      <sec id="sec-5-2">
        <title>SELECT SH.i, 1, x1 FROM SH; ...</title>
      </sec>
      <sec id="sec-5-3">
        <title>INSERT INTO SV</title>
      </sec>
      <sec id="sec-5-4">
        <title>SELECT SH.i, d, xd FROM SH;</title>
        <p>For table U a membership degree between data
vector xi and cluster j takes 1 for all i = j.</p>
      </sec>
      <sec id="sec-5-5">
        <title>I2: INSERT INTO U (i, j, val) VALUES (1, 1, 0); ...</title>
      </sec>
      <sec id="sec-5-6">
        <title>INSERT INTO U (i, j, val) VALUES (j, j, 1); ...</title>
      </sec>
      <sec id="sec-5-7">
        <title>INSERT INTO U (i, j, val) VALUES (n, k, 0);</title>
        <p>In other words, as a start coordinates of centroids,
first d data vectors from sample X are used.</p>
        <p>∀ i = j uij = 1 ⇒ cj = xi</p>
        <p>When initializing the table P , the number of points k
is taken as a parameter of the function pgF CM . A data
vectors space dimensionality d and a cardinal number of
the training set n also provided by function pgF CM
parameters. The iteration number s and delta initializes as
zeros.</p>
      </sec>
      <sec id="sec-5-8">
        <title>I3: INSERT INTO P(d, k, n, s, delta) VALUES (d, k, n, 0, 0);</title>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>3.5 Computations</title>
      <p>According to Algorithm 2, the computation stage is
splitted to the following three sub-steps: computation
coordinates of centroids, computation of distances, and
computation membership degrees, marked as C1, C2, and C3
respectively.</p>
      <sec id="sec-6-1">
        <title>C1: INSERT INTO C</title>
        <p>SELECT R1.j, l, R1.s1 / R2.s2 AS val</p>
      </sec>
      <sec id="sec-6-2">
        <title>FROM (SELECT l, j, sum(U.val^2 * SV.val) AS s1</title>
      </sec>
      <sec id="sec-6-3">
        <title>FROM U, SV</title>
        <p>WHERE U.i = SV.i</p>
      </sec>
      <sec id="sec-6-4">
        <title>GROUP BY l, j) AS R1,</title>
        <p>(SELECT j, sum(U.val^2) AS s2</p>
      </sec>
      <sec id="sec-6-5">
        <title>FROM U</title>
      </sec>
      <sec id="sec-6-6">
        <title>GROUP BY j) AS R2 WHERE R1.j = R2.j;</title>
      </sec>
      <sec id="sec-6-7">
        <title>C2: INSERT INTO SD</title>
      </sec>
      <sec id="sec-6-8">
        <title>SELECT i, j,</title>
        <p>sum((SV.val - C.val)^2)</p>
      </sec>
      <sec id="sec-6-9">
        <title>AS dist</title>
      </sec>
      <sec id="sec-6-10">
        <title>FROM SV, C</title>
        <p>WHERE SV.l = C.l;</p>
      </sec>
      <sec id="sec-6-11">
        <title>GROUP BY i, j;</title>
        <p>Through the FCM, computations of the distances
provide by formula (2). Let us notice that in formula (3) the
fraction’s numerator does not depend on t, and rewrite
this formula as follows:
k
uij = 1 2m (xi; cj) · ∑ m2 1 (xi; ct)
(7)
t=1</p>
        <p>So, the computation of membership degrees can be
written as follows:</p>
      </sec>
      <sec id="sec-6-12">
        <title>C3: INSERT INTO UT</title>
      </sec>
      <sec id="sec-6-13">
        <title>SELECT i, j,</title>
        <p>SD.dist^(2.0^(1.0-m))
* SD1.den AS val</p>
      </sec>
      <sec id="sec-6-14">
        <title>FROM (SELECT i, sum(dist^(2.0^(m-1.0))) AS den</title>
      </sec>
      <sec id="sec-6-15">
        <title>FROM SD</title>
      </sec>
      <sec id="sec-6-16">
        <title>GROUP BY i) AS SD1, SD WHERE SD.i = SD1.i;</title>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>3.6 Update</title>
      <p>Update stage of the pgFCM modifies P and U tables as
shown below in U1 and U2 respectively.</p>
      <sec id="sec-7-1">
        <title>U1: INSERT INTO P</title>
        <p>SELECT L.d, L.k, L.n, L.s + 1 AS s,</p>
      </sec>
      <sec id="sec-7-2">
        <title>E.delta</title>
      </sec>
      <sec id="sec-7-3">
        <title>FROM (SELECT i, j,</title>
        <p>max(UT.val - U.val)</p>
      </sec>
      <sec id="sec-7-4">
        <title>AS delta</title>
      </sec>
      <sec id="sec-7-5">
        <title>FROM U, UT</title>
      </sec>
      <sec id="sec-7-6">
        <title>GROUP BY i, j) AS E,</title>
        <p>(SELECT d, k, n, max(s)</p>
      </sec>
      <sec id="sec-7-7">
        <title>FROM P</title>
      </sec>
      <sec id="sec-7-8">
        <title>GROUP BY d, k, n) AS L) AS R</title>
        <p>Table U T stores temporary membership degrees to be
inserted into table U . To provide the rapid removal all the
table U rows, obtained at the previous iteration, we use
the truncate operator.</p>
      </sec>
      <sec id="sec-7-9">
        <title>U2: TRUNCATE U;</title>
      </sec>
      <sec id="sec-7-10">
        <title>INSERT INTO U</title>
      </sec>
      <sec id="sec-7-11">
        <title>SELECT * FROM UT;</title>
        <p>This stage is the final for the algorithm pgFCM. On each
iteration the termination condition (4) must be checked.</p>
        <p>To implement the check, the result delta of the
function (6) from table P is stored in the temporary
variable tmp.</p>
      </sec>
      <sec id="sec-7-12">
        <title>CH1: SELECT delta INTO tmp</title>
      </sec>
      <sec id="sec-7-13">
        <title>FROM P, (SELECT d, k, n, max(s) AS max_s</title>
      </sec>
      <sec id="sec-7-14">
        <title>FROM P</title>
      </sec>
      <sec id="sec-7-15">
        <title>GROUP BY d, k, n) AS L WHERE P.s = L.max_s AND P.d = L.d AND P.k = L.k AND P.n = L.n;</title>
        <p>After selecting the delta, we need to check the
condition &lt; ". Then if this condition is true we should stop,
otherwise, work will be continued.</p>
      </sec>
      <sec id="sec-7-16">
        <title>CH2: IF (tmp &lt; eps) THEN</title>
      </sec>
      <sec id="sec-7-17">
        <title>RETURN; END IF;</title>
        <p>The final result of the algorithm pgFCM will be stored
in table U .
4</p>
        <sec id="sec-7-17-1">
          <title>Related Work</title>
          <p>
            Research on integrating data mining algorithms with
relational DBMS includes the following. Association rules
mining is explored in [
            <xref ref-type="bibr" rid="ref12">13</xref>
            ]. General data mining
primitives are suggested in [
            <xref ref-type="bibr" rid="ref3">4</xref>
            ]. Primitives for decision trees
mining are proposed in [
            <xref ref-type="bibr" rid="ref7">8</xref>
            ].
          </p>
          <p>
            Our research was inspired by papers [
            <xref ref-type="bibr" rid="ref10 ref11">11, 12</xref>
            ], where
integrating K-Means clustering algorithm with relational
DBMS, was carried out. The way we exploit is similar
to mentioned above. The main contribution of the
paper is an extension of results presented in [
            <xref ref-type="bibr" rid="ref10 ref11">11, 12</xref>
            ] for
the case where data vectors may belong to several
clusters. Such a case is very important in problems connected
with medicine data analysis [
            <xref ref-type="bibr" rid="ref13 ref15">14, 16</xref>
            ]. To the best of our
knowledge there are no papers devoted to implementing
fuzzy clustering with relational DBMS.
5
          </p>
        </sec>
        <sec id="sec-7-17-2">
          <title>Conclusion</title>
          <p>In this paper we have proposed the pgFCM algorithm.
pgFCM implements Fuzzy c-Means clustering algorithm
and processes data stored in relational tables using
PostgreSQL open-source DBMS. There are following issues
to continue our research. Firstly, we plan to investigate
pgFCM scalability using both synthetical and real data
sets. The second direction of our research is
developing a parallel version of pgFCM for distribution memory
multiprocessors.</p>
        </sec>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Bezdek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Hathaway</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Sobin</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Tucker</surname>
          </string-name>
          .
          <article-title>Convergence Theory for Fuzzy c-means: Counterexamples and Repairs</article-title>
          .
          <source>IEEE Trans. Syst. Man Cybern.</source>
          ,
          <volume>17</volume>
          :
          <fpage>873</fpage>
          -
          <lpage>877</lpage>
          ,
          <year>October 1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>P. S.</given-names>
            <surname>Bradley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U. M.</given-names>
            <surname>Fayyad</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Reina</surname>
          </string-name>
          . Scaling Clustering Algorithms to Large Databases.
          <source>In KDD</source>
          , pages
          <fpage>9</fpage>
          -
          <lpage>15</lpage>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>J.</given-names>
            <surname>Clear</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dunn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Harvey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Heytens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lohman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mehta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Melton</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Rohrberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Savasere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Wehrmeister</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Xu</surname>
          </string-name>
          .
          <article-title>NonStop SQL/MX primitives for knowledge discovery</article-title>
          .
          <source>In Proceedings of the fifth ACM SIGKDD international conference on Knowledge discovery and data mining</source>
          ,
          <source>KDD '99</source>
          , pages
          <fpage>425</fpage>
          -
          <lpage>429</lpage>
          , New York, NY, USA,
          <year>1999</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>E.</given-names>
            <surname>Dimitriadou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hornik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Leisch</surname>
          </string-name>
          , D. Meyer, and
          <string-name>
            <surname>Weingessel</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Machine Learning</surname>
          </string-name>
          Open-Source
          <source>Package 'r-cran-e1071'</source>
          ,
          <year>2010</year>
          . http://cran.r-project. org/web/packages/e1071/index.html.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Dunn</surname>
          </string-name>
          .
          <article-title>A Fuzzy Relative of the ISODATA Process and Its Use in Detecting Compact WellSeparated Clusters</article-title>
          .
          <source>Journal of Cybernetics</source>
          ,
          <volume>3</volume>
          :
          <fpage>32</fpage>
          -
          <lpage>57</lpage>
          ,
          <year>1973</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Apache</given-names>
            <surname>Software Foundation</surname>
          </string-name>
          , I. Drost,
          <string-name>
            <given-names>T.</given-names>
            <surname>Dunning</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Eastman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Gospodnetic</surname>
          </string-name>
          , G. Ingersoll,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mannix</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Owen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Wettin. Apache Mahout</surname>
          </string-name>
          ,
          <year>2010</year>
          . https://cwiki.apache.org/confluence/display/ MAHOUT/Fuzzy+K-Means.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>G.</given-names>
            <surname>Graefe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U. M.</given-names>
            <surname>Fayyad</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Chaudhuri</surname>
          </string-name>
          .
          <article-title>On the Efficient Gathering of Sufficient Statistics for Classification from Large SQL Databases</article-title>
          .
          <source>In KDD</source>
          , pages
          <fpage>204</fpage>
          -
          <lpage>208</lpage>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A. K.</given-names>
            <surname>Jain</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. N.</given-names>
            <surname>Murty</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Flynn</surname>
          </string-name>
          .
          <article-title>Data clustering: a review</article-title>
          .
          <source>ACM Comput. Surv.</source>
          ,
          <volume>31</volume>
          :
          <fpage>264</fpage>
          -
          <lpage>323</lpage>
          ,
          <year>September 1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [10]
          <string-name>
            <surname>J. B. MacQueen. Some</surname>
          </string-name>
          <article-title>Methods for Classification and Analysis of MultiVariate Observations</article-title>
          . In L. M.
          <article-title>Le Cam and</article-title>
          J. Neyman, editors,
          <source>Proc. of the fifth Berkeley Symposium on Mathematical Statistics and Probability</source>
          , volume
          <volume>1</volume>
          , pages
          <fpage>281</fpage>
          -
          <lpage>297</lpage>
          . University of California Press,
          <year>1967</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>C.</given-names>
            <surname>Ordonez</surname>
          </string-name>
          .
          <article-title>Programming the K-means clustering algorithm in SQL</article-title>
          . In W. Kim,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kohavi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gehrke</surname>
          </string-name>
          , and W. DuMouchel, editors,
          <source>KDD</source>
          , pages
          <fpage>823</fpage>
          -
          <lpage>828</lpage>
          . ACM,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>C.</given-names>
            <surname>Ordonez</surname>
          </string-name>
          .
          <article-title>Integrating K-Means Clustering with a Relational DBMS Using SQL</article-title>
          .
          <source>IEEE Trans. Knowl</source>
          . Data Eng.,
          <volume>18</volume>
          (
          <issue>2</issue>
          ):
          <fpage>188</fpage>
          -
          <lpage>201</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>S.</given-names>
            <surname>Sarawagi</surname>
          </string-name>
          , S. Thomas, and
          <string-name>
            <given-names>R.</given-names>
            <surname>Agrawal</surname>
          </string-name>
          .
          <article-title>Integrating association rule mining with relational database</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A. I.</given-names>
            <surname>Shihab</surname>
          </string-name>
          .
          <article-title>Fuzzy Clustering Algorithms and their Applications to Medical Image Analysis</article-title>
          .
          <source>PhD thesis</source>
          , University of London,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>M.</given-names>
            <surname>Stonebraker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. A.</given-names>
            <surname>Rowe</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Hirohama</surname>
          </string-name>
          .
          <article-title>The Implementation of POSTGRES</article-title>
          .
          <source>IEEE Trans. on Knowl. and Data Eng</source>
          .,
          <volume>2</volume>
          :
          <fpage>125</fpage>
          -
          <lpage>142</lpage>
          ,
          <year>March 1990</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>D.</given-names>
            <surname>Zhang</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Chen. A Novel Kernelized Fuzzy</surname>
          </string-name>
          c
          <article-title>-Means Algorithm with Application in Medical Image Segmentation</article-title>
          .
          <source>Artificial Intelligence in Medicine</source>
          ,
          <volume>32</volume>
          :
          <fpage>37</fpage>
          -
          <lpage>50</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>