Skip to content

Commit

Permalink
add
Browse files Browse the repository at this point in the history
add demo for kernel kmeans
  • Loading branch information
sth4nth committed Jul 25, 2019
1 parent 314f475 commit 11e81d3
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
10 changes: 3 additions & 7 deletions chapter06/knKmeans.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
function [label, model, energy] = knKmeans(X, init, kn)
function [label, model, energy] = knKmeans(K, init)
% Perform kernel kmeans clustering.
% Input:
% K: n x n kernel matrix
% K: n x n data matrix
% init: either number of clusters (k) or initial label (1xn)
% Output:
% label: 1 x n sample labels
Expand All @@ -10,17 +10,13 @@
% Reference: Kernel Methods for Pattern Analysis
% by John Shawe-Taylor, Nello Cristianini
% Written by Mo Chen (sth4nth@gmail.com).
n = size(X,2);
n = size(K,2);
if numel(init)==1
k = init;
label = ceil(k*rand(1,n));
elseif numel(init)==n
label = init;
end
if nargin < 3
kn = @knGauss;
end
K = kn(X,X);
last = zeros(1,n);
while any(label ~= last)
[~,~,last(:)] = unique(label); % remove empty clusters
Expand Down
23 changes: 23 additions & 0 deletions demo/ch06/knKmeans_demo.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
%% Kernel kmeans with linear kernel is equivalent to kmeans
close all; clear;
d = 2;
k = 3;
n = 200;
[X, y] = kmeansRnd(d,k,n);
init = ceil(k*rand(1,n));
K = knLin(X,X);
label = knKmeans(K,init);

label0 = kmeans(X,init);
maxdiff(label,label0)
plotClass(X,label);
%% Kernel kmeans with Gaussian Kernel for nonlinear data
x1 = linspace(0,pi,n/2);
x2 = sin(x1);
X = [x1,x1+pi/2;
x2,-x2];

K = knGauss(X,X,0.4);
label = knKmeans(K,2);
figure;
plotClass(X,label);

0 comments on commit 11e81d3

Please sign in to comment.