Fuzzy C-Means Clustering - MATLAB & Simulink Example.

Fuzzy C­Means Clustering
This example shows how to perform fuzzy c­means clustering on 2­dimensional data.

Open This Example

What Is Fuzzy C­Means Clustering?
Interactive Fuzzy C­Means Clustering Example
Performing Fuzzy C­Means Clustering on Your Own Data

What Is Fuzzy C­Means Clustering?
Clustering of numerical data forms the basis of many classification and system modeling algorithms. The purpose of
clustering is to identify natural groupings of data from a large data set to produce a concise representation of a system's
behavior.
Fuzzy c­means (FCM) is a data clustering technique in which a dataset is grouped into n clusters with every datapoint in the
dataset belonging to every cluster to a certain degree. For example, a certain datapoint that lies close to the center of a
cluster will have a high degree of belonging or membership to that cluster and another datapoint that lies far away from the
center of a cluster will have a low degree of belonging or membership to that cluster.
The Fuzzy Logic Toolbox™ function fcm performs FCM clustering. It starts with an initial guess for the cluster centers, which
are intended to mark the mean location of each cluster. The initial guess for these cluster centers is most likely incorrect.
Next, fcm assigns every data point a membership grade for each cluster. By iteratively updating the cluster centers and the
membership grades for each data point, fcm iteratively moves the cluster centers to the right location within a data set. This

iteration is based on minimizing an objective function that represents the distance from any given data point to a cluster
center weighted by that data point's membership grade.

Interactive Fuzzy C­Means Clustering Example
Using the fcmdemo command, you can launch a GUI that lets you try out various parameter settings for the fuzzy c­means
algorithm and observe the effect on the resulting 2­D clustering. You can choose a sample data set and an arbitrary number
of clusters from the drop down menus on the right, and then click "Start" to start the fuzzy c­means clustering process. The
clustering itself is performed by the fcm function.

Figure 1: GUI for Fuzzy C­Means Clustering.
Once the clustering is done, you can select one of the clusters by clicking on it, and view the membership function surface by
clicking the "Plot MF" button. To get a better viewing angle, click and drag inside the figure to rotate the MF surface.
You can also tune the 3 optional parameters for the FCM algorithm (exponent, maximum number of iterations and minimum
amount of improvement) from the GUI and observe how the clustering process is consequently altered.

Performing Fuzzy C­Means Clustering on Your Own Data
The function fcm takes a data set and a desired number of clusters and returns optimal cluster centers and membership
grades for each data point. You can use this information to build a fuzzy inference system by creating membership functions

that represent the fuzzy qualities of each cluster.

Here is the underlying code that performs the clustering.
data = load 'fcmdata.dat' ;  % load some sample data
n_clusters =  ;              % number of clusters
[center,U,obj_fcn] = fcm data, n_clusters ;

Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 

Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 
Iteration count = 

, obj. fcn =  .
, obj. fcn =  . 0 0
, obj. fcn =  .
, obj. fcn =  .

, obj. fcn =  . 0
, obj. fcn =  .
, obj. fcn =  . 0 0
, obj. fcn =  . 0
, obj. fcn =  .0
0, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
0
, obj. fcn =  .0
0
, obj. fcn =  .0 0
, obj. fcn =  .0
0
0, obj. fcn =  .0
, obj. fcn =  .0

, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
0
, obj. fcn =  .0
, obj. fcn =  .0
, obj. fcn =  .0
0, obj. fcn =  .0