Algorithm-KernelKMeans
view release on metacpan or search on metacpan
t/02_pp_impl.t view on Meta::CPAN
lives_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel => generate_polynominal_kernel(1, 2)
);
} 'Kernel function can be set';
lives_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel_matrix => \@kernel_matrix
);
} 'Kernel matrix can be speficied manually';
dies_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel_matrix => [ @kernel_matrix[0 .. 31] ]
);
} 'Kernel matrix must be bigger than NxN (N is number of vertices)';
sub sort_cluster {
[ sort {
$a->{0} <=> $b->{0} or $a->{1} <=> $b->{1} or $a->{2} <=> $b->{2}
} @{ +shift } ]
}
{
my $kkm = Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel => generate_polynominal_kernel(0, 1) # just inner product
);
my $kkm_clusters = $kkm->run(k => 6, shuffle => 0);
my @kkm_clusters = map { sort_cluster $_ } @$kkm_clusters;
my $nkm = Algorithm::NaiveKMeans->new(vertices => \@vertices);
my $nkm_clusters = $nkm->run(k => 6, shuffle => 0);
my @nkm_clusters = map { sort_cluster $_ } @$nkm_clusters;
is_deeply \@kkm_clusters, \@nkm_clusters,
'WKKM with uniform weights and identity kernel is equivalant to naive KM';
}
{
my $kkm = Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel => generate_polynominal_kernel(1, 2)
);
dies_ok {
$kkm->run;
} '"k" is required';
dies_ok {
$kkm->run(k => 6, k_min => 10);
} '"k_min" must be less than or equal to "k"';
dies_ok {
$kkm->run(k => 6, foo => 'bar');
} 'Unkown parameter should be error';
my @clusters1 = map { sort_cluster $_ } @{ $kkm->run(k => 6, shuffle => 0) };
my @clusters2 = map { sort_cluster $_ } @{ $kkm->run(k => 6, shuffle => 0) };
is_deeply \@clusters1, \@clusters2,
'WKKM with same initial cluster is deterministic';
}
done_testing;
( run in 0.458 second using v1.01-cache-2.11-cpan-adec679a428 )