Learn R Programming

e1071 (version 1.3-4)

cmeans: Fuzzy C-Means Clustering

Description

The fuzzy version of the known kmeans clustering algorithm as well as its online update (Unsupervised Fuzzy Competitive learning).

Usage

cmeans (x, centers, iter.max=100, verbose=FALSE, dist="euclidean",
        method="cmeans", m=2, rate.par = NULL)

Arguments

x
The data matrix where columns correspond to variables and rows to observations
centers
Number of clusters or initial values for cluster centers
iter.max
Maximum number of iterations
verbose
If TRUE, make some output during learning
dist
Must be one of the following: If "euclidean", the mean square error, if "manhattan", the mean absolute error is computed. Abbreviations are also accepted.
method
If "cmeans", then we have the cmeans fuzzy clustering method, if "ufcl" we have the On-line Update. Abbreviations in the method names are also accepted.
m
The degree of fuzzification. It is defined for values greater than 1
rate.par
The parameter of the learning rate

Value

  • cmeans returns an object of class "fclust".
  • centersThe final cluster centers.
  • sizeThe number of data points in each cluster.
  • clusterVector containing the indices of the clusters where the data points are assigned to. The maximum membership value of a point is considered for partitioning it to a cluster.
  • iterThe number of iterations performed,
  • and
  • membershipa matrix with the membership values of the data points to the clusters.
  • withinerrorReturns the sum of square distances within the clusters.
  • callReturns a call in which all of the arguments are specified by their names.

Details

The data given by x is clustered by the fuzzy kmeans algorithm. If centers is a matrix, its rows are taken as the initial cluster centers. If centers is an integer, centers rows of x are randomly chosen as initial values. The algorithm stops when the maximum number of iterations (given by iter.max) is reached.

If verbose is TRUE, it displays for each iteration the number the value of the objective function.

If dist is "euclidean", the distance between the cluster center and the data points is the Euclidean distance (ordinary fuzzy kmeans algorithm). If "manhattan", the distance between the cluster center and the data points is the sum of the absolute values of the distances of the coordinates. If method is "cmeans", then we have the kmeans fuzzy clustering method. If "ufcl" we have the On-line Update (Unsupervised Fuzzy Competitive learning) method, which works by performing an update directly after each input signal.

The parameters m defines the degree of fuzzification. It is defined for real values greater than 1 and the bigger it is the more fuzzy the membership values of the clustered data points are. The parameter rate.par of the learning rate for the "ufcl" algorithm which is by default set to rate.par=0.3 and is taking real values in (0 , 1).

References

Nikhil R. Pal, James C. Bezdek, and Richard J. Hathaway. Sequential Competitive Learning and the Fuzzy c-Means Clustering Algorithms. Neural Networks, Vol. 9, No. 5, pp. 787-796, 1996.

Examples

Run this code
# a 2-dimensional example
x<-rbind(matrix(rnorm(100,sd=0.3),ncol=2),
         matrix(rnorm(100,mean=1,sd=0.3),ncol=2))
cl<-cmeans(x,2,20,verbose=TRUE,method="cmeans",m=2)
print(cl)

# a 3-dimensional example
x<-rbind(matrix(rnorm(150,sd=0.3),ncol=3),
         matrix(rnorm(150,mean=1,sd=0.3),ncol=3),
         matrix(rnorm(150,mean=2,sd=0.3),ncol=3))
cl<-cmeans(x,6,20,verbose=TRUE,method="cmeans")
print(cl)

# assign classes to some new data
y<-rbind(matrix(rnorm(33,sd=0.3),ncol=3),
         matrix(rnorm(33,mean=1,sd=0.3),ncol=3),
         matrix(rnorm(3,mean=2,sd=0.3),ncol=3))
#         ycl<-predict(cl, y, type="both")

Run the code above in your browser using DataLab