Algorithm-KMeans
view release on metacpan or search on metacpan
lib/Algorithm/KMeans.pm view on Meta::CPAN
next if (($cluster_size_zero_condition) && ($iteration_index < 100));
last if $iteration_index == 100;
# Now do a deep copy of new_clusters into clusters
$clusters = deep_copy_AoA( $new_clusters );
last if $assignment_changed_flag == 0;
}
$final_cluster_centers = $self->update_cluster_centers( $clusters );
return ($clusters, $final_cluster_centers);
}
sub update_cluster_centers_and_covariances_mahalanobis {
my $self = shift;
my @clusters = @{ shift @_ };
my @new_cluster_centers;
my @new_cluster_covariances;
# During clustering for a fixed K, should a cluster inadvertently become empty,
# steal a member from the largest cluster to hopefully spawn a new cluster:
my $largest_cluster;
foreach my $cluster (@clusters) {
next if !defined $cluster;
$largest_cluster = $cluster if !defined $largest_cluster;
lib/Algorithm/KMeans.pm view on Meta::CPAN
display_matrix( $covariance );
}
push @new_cluster_covariances, $covariance;
}
return [\@new_cluster_centers, \@new_cluster_covariances];
}
# After each new assignment of the data points to the clusters on the basis of the
# current values for the cluster centers, we call the routine shown here for updating
# the values of the cluster centers.
sub update_cluster_centers {
my $self = shift;
my @clusters = @{ shift @_ };
my @new_cluster_centers;
# During clustering for a fixed K, should a cluster inadvertently become empty,
# steal a member from the largest cluster to hopefully spawn a new cluster:
my $largest_cluster;
foreach my $cluster (@clusters) {
next if !defined $cluster;
$largest_cluster = $cluster if !defined $largest_cluster;
if (@$cluster > @$largest_cluster) {
( run in 0.323 second using v1.01-cache-2.11-cpan-95122f20152 )