fix: code and documentation cleanup

This commit is contained in:
Volodymyr Orlov
2020-09-23 16:41:39 -07:00
parent 750015b861
commit a19398fd70
7 changed files with 24 additions and 24 deletions
-1
View File
@@ -287,7 +287,6 @@ mod tests {
let expected = let expected =
DenseMatrix::from_2d_array(&[&[-6.0, 3.6, 1.4], &[5.0, -3.0, -1.0], &[-1.0, 0.8, 0.2]]); DenseMatrix::from_2d_array(&[&[-6.0, 3.6, 1.4], &[5.0, -3.0, -1.0], &[-1.0, 0.8, 0.2]]);
let a_inv = a.lu().and_then(|lu| lu.inverse()).unwrap(); let a_inv = a.lu().and_then(|lu| lu.inverse()).unwrap();
println!("{}", a_inv);
assert!(a_inv.approximate_eq(&expected, 1e-4)); assert!(a_inv.approximate_eq(&expected, 1e-4));
} }
} }
-2
View File
@@ -108,8 +108,6 @@ impl<T: RealNumber, M: Matrix<T>> Distance<Vec<T>, T> for Mahalanobis<T, M> {
); );
} }
println!("{}", self.sigmaInv);
let n = x.len(); let n = x.len();
let mut z = vec![T::zero(); n]; let mut z = vec![T::zero(); n];
for i in 0..n { for i in 0..n {
+4 -4
View File
@@ -5,13 +5,13 @@ use crate::math::num::RealNumber;
use crate::metrics::cluster_helpers::*; use crate::metrics::cluster_helpers::*;
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
/// Mean Absolute Error /// Homogeneity, completeness and V-Measure scores.
pub struct HCVScore {} pub struct HCVScore {}
impl HCVScore { impl HCVScore {
/// Computes mean absolute error /// Computes Homogeneity, completeness and V-Measure scores at once.
/// * `y_true` - Ground truth (correct) target values. /// * `labels_true` - ground truth class labels to be used as a reference.
/// * `y_pred` - Estimated target values. /// * `labels_pred` - cluster labels to evaluate.
pub fn get_score<T: RealNumber, V: BaseVector<T>>( pub fn get_score<T: RealNumber, V: BaseVector<T>>(
&self, &self,
labels_true: &V, labels_true: &V,
+6 -3
View File
@@ -106,14 +106,17 @@ mod tests {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
let v2 = vec![1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]; let v2 = vec![1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0];
println!("{:?}", contingency_matrix(&v1, &v2)); assert_eq!(
vec!(vec!(1, 2), vec!(2, 0), vec!(1, 0), vec!(1, 0)),
contingency_matrix(&v1, &v2)
);
} }
#[test] #[test]
fn entropy_test() { fn entropy_test() {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
println!("{:?}", entropy(&v1)); assert!((1.2770f32 - entropy(&v1).unwrap()).abs() < 1e-4);
} }
#[test] #[test]
@@ -122,6 +125,6 @@ mod tests {
let v2 = vec![1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]; let v2 = vec![1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0];
let s: f32 = mutual_info_score(&contingency_matrix(&v1, &v2)); let s: f32 = mutual_info_score(&contingency_matrix(&v1, &v2));
println!("{}", s); assert!((0.3254 - s).abs() < 1e-4);
} }
} }
-2
View File
@@ -62,8 +62,6 @@ mod tests {
let score1: f64 = MeanAbsoluteError {}.get_score(&y_pred, &y_true); let score1: f64 = MeanAbsoluteError {}.get_score(&y_pred, &y_true);
let score2: f64 = MeanAbsoluteError {}.get_score(&y_true, &y_true); let score2: f64 = MeanAbsoluteError {}.get_score(&y_true, &y_true);
println!("{}", score1);
assert!((score1 - 0.5).abs() < 1e-8); assert!((score1 - 0.5).abs() < 1e-8);
assert!((score2 - 0.0).abs() < 1e-8); assert!((score2 - 0.0).abs() < 1e-8);
} }
-2
View File
@@ -62,8 +62,6 @@ mod tests {
let score1: f64 = MeanSquareError {}.get_score(&y_pred, &y_true); let score1: f64 = MeanSquareError {}.get_score(&y_pred, &y_true);
let score2: f64 = MeanSquareError {}.get_score(&y_true, &y_true); let score2: f64 = MeanSquareError {}.get_score(&y_true, &y_true);
println!("{}", score1);
assert!((score1 - 0.375).abs() < 1e-8); assert!((score1 - 0.375).abs() < 1e-8);
assert!((score2 - 0.0).abs() < 1e-8); assert!((score2 - 0.0).abs() < 1e-8);
} }
+14 -10
View File
@@ -8,6 +8,7 @@
//! //!
//! * [Classification metrics](struct.ClassificationMetrics.html) //! * [Classification metrics](struct.ClassificationMetrics.html)
//! * [Regression metrics](struct.RegressionMetrics.html) //! * [Regression metrics](struct.RegressionMetrics.html)
//! * [Clustering metrics](struct.ClusterMetrics.html)
//! //!
//! Example: //! Example:
//! ``` //! ```
@@ -54,6 +55,7 @@
pub mod accuracy; pub mod accuracy;
/// Computes Area Under the Receiver Operating Characteristic Curve (ROC AUC) from prediction scores. /// Computes Area Under the Receiver Operating Characteristic Curve (ROC AUC) from prediction scores.
pub mod auc; pub mod auc;
/// Compute the homogeneity, completeness and V-Measure scores.
pub mod cluster_hcv; pub mod cluster_hcv;
pub(crate) mod cluster_helpers; pub(crate) mod cluster_helpers;
/// F1 score, also known as balanced F-score or F-measure. /// F1 score, also known as balanced F-score or F-measure.
@@ -126,7 +128,7 @@ impl RegressionMetrics {
} }
impl ClusterMetrics { impl ClusterMetrics {
/// Mean squared error, see [mean squared error](mean_squared_error/index.html). /// Homogeneity and completeness and V-Measure scores at once.
pub fn hcv_score() -> cluster_hcv::HCVScore { pub fn hcv_score() -> cluster_hcv::HCVScore {
cluster_hcv::HCVScore {} cluster_hcv::HCVScore {}
} }
@@ -188,27 +190,29 @@ pub fn r2<T: RealNumber, V: BaseVector<T>>(y_true: &V, y_pred: &V) -> T {
RegressionMetrics::r2().get_score(y_true, y_pred) RegressionMetrics::r2().get_score(y_true, y_pred)
} }
/// Computes R2 score, see [R2](r2/index.html). /// Homogeneity metric of a cluster labeling given a ground truth (range is between 0.0 and 1.0).
/// * `y_true` - Ground truth (correct) target values. /// A cluster result satisfies homogeneity if all of its clusters contain only data points which are members of a single class.
/// * `y_pred` - Estimated target values. /// * `labels_true` - ground truth class labels to be used as a reference.
/// * `labels_pred` - cluster labels to evaluate.
pub fn homogeneity_score<T: RealNumber, V: BaseVector<T>>(labels_true: &V, labels_pred: &V) -> T { pub fn homogeneity_score<T: RealNumber, V: BaseVector<T>>(labels_true: &V, labels_pred: &V) -> T {
ClusterMetrics::hcv_score() ClusterMetrics::hcv_score()
.get_score(labels_true, labels_pred) .get_score(labels_true, labels_pred)
.0 .0
} }
/// Computes R2 score, see [R2](r2/index.html). ///
/// * `y_true` - Ground truth (correct) target values. /// Completeness metric of a cluster labeling given a ground truth (range is between 0.0 and 1.0).
/// * `y_pred` - Estimated target values. /// * `labels_true` - ground truth class labels to be used as a reference.
/// * `labels_pred` - cluster labels to evaluate.
pub fn completeness_score<T: RealNumber, V: BaseVector<T>>(labels_true: &V, labels_pred: &V) -> T { pub fn completeness_score<T: RealNumber, V: BaseVector<T>>(labels_true: &V, labels_pred: &V) -> T {
ClusterMetrics::hcv_score() ClusterMetrics::hcv_score()
.get_score(labels_true, labels_pred) .get_score(labels_true, labels_pred)
.1 .1
} }
/// Computes R2 score, see [R2](r2/index.html). /// The harmonic mean between homogeneity and completeness.
/// * `y_true` - Ground truth (correct) target values. /// * `labels_true` - ground truth class labels to be used as a reference.
/// * `y_pred` - Estimated target values. /// * `labels_pred` - cluster labels to evaluate.
pub fn v_measure_score<T: RealNumber, V: BaseVector<T>>(labels_true: &V, labels_pred: &V) -> T { pub fn v_measure_score<T: RealNumber, V: BaseVector<T>>(labels_true: &V, labels_pred: &V) -> T {
ClusterMetrics::hcv_score() ClusterMetrics::hcv_score()
.get_score(labels_true, labels_pred) .get_score(labels_true, labels_pred)