Description
Clustering and Link Prediction Evaluation in R
Description
Tools for evaluating link prediction and clustering algorithms with respect to ground truth. Includes efficient implementations of common performance measures such as pairwise precision/recall, cluster homogeneity/completeness, variation of information, Rand index etc.
README.md
clevr: Clustering and Link Prediction Evaluation in R
clevr implements functions for evaluating link prediction and clustering algorithms in R. It includes efficient implementations of common performance measures, such as:
- pairwise precision, recall, F-measure;
- homogeneity, completeness and V-measure;
- (adjusted) Rand index;
- variation of information; and
- mutual information.
While the current focus is on supervised (a.k.a. external) performance measures, unsupervised (internal) measures are also in scope for future releases.
Installation
You can install the latest release from CRAN by entering:
install.packages("clevr")
The development version can be installed from GitHub using devtools
:
# install.packages("devtools")
devtools::install_github("cleanzr/clevr")
Example
Several functions are included which transform between different clustering representations.
library(clevr)
# A clustering of four records represented as a membership vector
pred_membership <- c("Record1" = 1, "Record2" = 1, "Record3" = 1, "Record4" = 2)
# Represent as a set of record pairs that appear in the same cluster
pred_pairs <- membership_to_pairs(pred_membership)
print(pred_pairs)
#> [,1] [,2]
#> [1,] "Record1" "Record2"
#> [2,] "Record1" "Record3"
#> [3,] "Record2" "Record3"
# Represent as a list of record clusters
pred_clusters <- membership_to_clusters(pred_membership)
print(pred_clusters)
#> $`1`
#> [1] "Record1" "Record2" "Record3"
#>
#> $`2`
#> [1] "Record4"
Performance measures are available for evaluating linked pairs:
true_pairs <- rbind(c("Record1", "Record2"), c("Record3", "Record4"))
pr <- precision_pairs(true_pairs, pred_pairs)
print(pr)
#> [1] 0.3333333
re <- recall_pairs(true_pairs, pred_pairs)
print(re)
#> [1] 0.5
and for evaluating clusterings:
true_membership <- c("Record1" = 1, "Record2" = 1, "Record3" = 2, "Record4" = 2)
ari <- adj_rand_index(true_membership, pred_membership)
print(ari)
#> [1] 0
vi <- variation_info(true_membership, pred_membership)
print(vi)
#> [1] 0.8239592