64 lines
1.6 KiB
Mathematica
64 lines
1.6 KiB
Mathematica
|
% Cluster 2D pointclouds with spectral clustering and compare with k-means
|
||
|
% USI, ICS, Lugano
|
||
|
% Numerical Computing
|
||
|
|
||
|
clear variables;
|
||
|
close all;
|
||
|
warning OFF;
|
||
|
|
||
|
addpath ../datasets
|
||
|
addpath ../datasets/Meshes
|
||
|
|
||
|
% Specify the number of clusters
|
||
|
K = 2;
|
||
|
|
||
|
%% 1a) Get coordinate list from pointclouds
|
||
|
% Coords used in this script
|
||
|
Pts = getPoints();
|
||
|
figure;
|
||
|
scatter(Pts(:,1),Pts(:,2))
|
||
|
title('Two Spirals')
|
||
|
|
||
|
n = size(Pts, 1);
|
||
|
|
||
|
% Create Gaussian similarity function
|
||
|
[S] = similarityfunc(Pts(:,1:2));
|
||
|
|
||
|
%% 1b) Find the minimal spanning tree of the full graph. Use the information
|
||
|
% to determine a valid value for epsilon
|
||
|
H = minSpanTree(S);
|
||
|
epsilon = max(H(H > 0), [], 'all');
|
||
|
|
||
|
%% 1c) Create the epsilon similarity graph
|
||
|
[G] = epsilonSimGraph(epsilon,Pts, S);
|
||
|
|
||
|
%% 1d) Create the adjacency matrix for the epsilon case
|
||
|
W = S .* G;
|
||
|
figure;
|
||
|
gplotg(W,Pts(:,1:2))
|
||
|
title('Adjacency matrix')
|
||
|
%% 1e) Create the Laplacian matrix and implement spectral clustering
|
||
|
[L,Diag] = CreateLapl(W);
|
||
|
|
||
|
% \----------------------------/
|
||
|
% Your implementation
|
||
|
% \----------------------------/
|
||
|
|
||
|
% Cluster rows of eigenvector matrix of L corresponding to K smallest
|
||
|
% eigennalues. Use kmeans for that.
|
||
|
[D_spec,x_spec] = kmeans_mod(Pts,K,n);
|
||
|
|
||
|
%% 1f) Run K-means on input data
|
||
|
% \----------------------------/
|
||
|
% Your implementation
|
||
|
% \----------------------------/
|
||
|
[D_kmeans,x_kmeans] = kmeans_mod(Pts,K,n);
|
||
|
|
||
|
%% 1g) Visualize spectral and k-means clustering results
|
||
|
figure;
|
||
|
subplot(1,2,1)
|
||
|
gplotmap(W,Pts,dummy_map)
|
||
|
title('TODO: Plot the spectral clusters')
|
||
|
subplot(1,2,2)
|
||
|
gplotmap(W,Pts,dummy_map)
|
||
|
title('TODO: Plot the K-means clusters')
|