Algorithm-DBSCAN
view release on metacpan or search on metacpan
lib/Algorithm/DBSCAN.pm view on Meta::CPAN
my $min_distance = 1000000000000;
my $closest_point_id;
foreach my $distance_point_id (sort @{$clusters{$cluster_id}}) {
if ($distance_point_id ne $point_id) {
my $this_point = $self->{dataset_object}->GetPointById($point_id);
my $distance_point = $self->{dataset_object}->GetPointById($distance_point_id);
my $distance = $this_point->Distance($distance_point);
if ($distance < $min_distance) {
$min_distance = $distance;
$closest_point_id = $distance_point_id;
}
}
}
say "\t$point_id : (closest point: $closest_point_id, distance: $min_distance)";
}
}
}
=head2 PrintClustersShort
Will print the contents of the clusters (abreviated version)
=cut
sub PrintClustersShort {
my ($self) = @_;
my %clusters;
foreach my $id (keys %{$self->{dataset}}) {
my $point = $self->{dataset}->{$id};
push(@{$clusters{$point->{cluster_id}}}, $point->{point_id});
}
foreach my $cluster_id (sort keys %clusters) {
say "CLUSTER: $cluster_id, [".scalar(@{$clusters{$cluster_id}})."] points";
my $nb = 0;
foreach my $point_id (sort @{$clusters{$cluster_id}}) {
$nb++;
say "\t$point_id";
last if ($nb >= 100);
}
}
}
=head2 _one_more_point_visited
Simple method used to display progress
=cut
sub _one_more_point_visited {
my ($self) = @_;
$self->{nb_visited_points}++;
$self->{start_time} = time() unless ($self->{start_time});
my $eta = time() + ((time() - $self->{start_time})/$self->{nb_visited_points})*(500000);
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($eta);
say "ETA:".sprintf("%04d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
say "nb visited:".$self->{nb_visited_points};
}
=head1 AUTHOR
Michal TOMA, C<< <mtoma at cpan.org> >>
=head1 BUGS
Please report any bugs or feature requests on github: L<https://github.com/mtoma/Algorithm-DBSCAN>
By e-mail to C<bug-algorithm-dbscan at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Algorithm-DBSCAN>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Algorithm::DBSCAN
You can also look for information at:
=over 5
=item * Github: Issues (report bugs here)
L<https://github.com/mtoma/Algorithm-DBSCAN>
=item * RT: CPAN's request tracker (report bugs here)
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Algorithm-DBSCAN>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/Algorithm-DBSCAN>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/Algorithm-DBSCAN>
=item * Search CPAN
L<http://search.cpan.org/dist/Algorithm-DBSCAN/>
=back
=head1 LICENSE AND COPYRIGHT
Copyright 2016 Michal TOMA.
This program is free software; you can redistribute it and/or modify it
under the terms of the the Artistic License (2.0). You may obtain a
copy of the full license at:
( run in 0.483 second using v1.01-cache-2.11-cpan-39bf76dae61 )