From 77203123544faa2765e2e9a841176c8fb7cc476d Mon Sep 17 00:00:00 2001 From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com> Date: Sat, 2 Aug 2025 21:59:22 +0100 Subject: [PATCH] Improve comments for clarity in logistic regression, stats overview, PCA, correlation, descriptive statistics, and matrix tests --- examples/logistic_regression.rs | 2 +- examples/stats_overview.rs | 6 ++--- src/compute/models/pca.rs | 16 ++------------ src/compute/stats/correlation.rs | 38 +++++++------------------------- src/compute/stats/descriptive.rs | 6 +---- src/matrix/mat.rs | 21 +++++------------- src/matrix/seriesops.rs | 11 ++------- 7 files changed, 22 insertions(+), 78 deletions(-) diff --git a/examples/logistic_regression.rs b/examples/logistic_regression.rs index 652f811..0d20e42 100644 --- a/examples/logistic_regression.rs +++ b/examples/logistic_regression.rs @@ -16,7 +16,7 @@ fn student_passing_example() { // Hours studied for each student let hours = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; - // 0 = fail, 1 = pass + // Label: 0 denotes failure and 1 denotes success let passed = vec![0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0]; let x = Matrix::from_vec(hours.clone(), hours.len(), 1); diff --git a/examples/stats_overview.rs b/examples/stats_overview.rs index fe25ba7..c25f619 100644 --- a/examples/stats_overview.rs +++ b/examples/stats_overview.rs @@ -6,9 +6,9 @@ use rustframe::matrix::{Axis, Matrix}; /// Demonstrates some of the statistics utilities in Rustframe. /// /// The example is split into three parts: -/// 1. Basic descriptive statistics on a small data set. -/// 2. Covariance and correlation calculations. -/// 3. Simple inferential tests (t-test and chi-square). +/// - Basic descriptive statistics on a small data set +/// - Covariance and correlation calculations +/// - Simple inferential tests (t-test and chi-square) fn main() { descriptive_demo(); println!("\n-----\n"); diff --git a/src/compute/models/pca.rs b/src/compute/models/pca.rs index f75231d..a517bd7 100644 --- a/src/compute/models/pca.rs +++ b/src/compute/models/pca.rs @@ -44,11 +44,7 @@ mod tests { #[test] fn test_pca_basic() { - // Simple 2D data, points along y=x line - // Data: - // 1.0, 1.0 - // 2.0, 2.0 - // 3.0, 3.0 + // Simple 2D data with points along the y = x line let data = Matrix::from_rows_vec(vec![1.0, 1.0, 2.0, 2.0, 3.0, 3.0], 3, 2); let (_n_samples, _n_features) = data.shape(); @@ -71,15 +67,7 @@ mod tests { assert!((pca.components.get(0, 0) - 1.0).abs() < EPSILON); assert!((pca.components.get(0, 1) - 1.0).abs() < EPSILON); - // Test transform - // Centered data: - // -1.0, -1.0 - // 0.0, 0.0 - // 1.0, 1.0 - // Projected: (centered_data * components.transpose()) - // (-1.0 * 1.0 + -1.0 * 1.0) = -2.0 - // ( 0.0 * 1.0 + 0.0 * 1.0) = 0.0 - // ( 1.0 * 1.0 + 1.0 * 1.0) = 2.0 + // Test transform: centered data projects to [-2.0, 0.0, 2.0] let transformed_data = pca.transform(&data); assert_eq!(transformed_data.rows(), 3); assert_eq!(transformed_data.cols(), 1); diff --git a/src/compute/stats/correlation.rs b/src/compute/stats/correlation.rs index 22667f9..ac9ee19 100644 --- a/src/compute/stats/correlation.rs +++ b/src/compute/stats/correlation.rs @@ -137,10 +137,7 @@ mod tests { #[test] fn test_covariance_scalar_same_matrix() { - // M = - // 1,2 - // 3,4 - // mean = 2.5 + // Matrix with rows [1, 2] and [3, 4]; mean is 2.5 let data = vec![1.0, 2.0, 3.0, 4.0]; let m = Matrix::from_vec(data.clone(), 2, 2); @@ -152,10 +149,7 @@ mod tests { #[test] fn test_covariance_scalar_diff_matrix() { - // x = - // 1,2 - // 3,4 - // y = 2*x + // Matrix x has rows [1, 2] and [3, 4]; y is two times x let x = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let y = Matrix::from_vec(vec![2.0, 4.0, 6.0, 8.0], 2, 2); @@ -167,10 +161,7 @@ mod tests { #[test] fn test_covariance_vertical() { - // M = - // 1,2 - // 3,4 - // cols are [1,3] and [2,4], each var=1, cov=1 + // Matrix with rows [1, 2] and [3, 4]; columns are [1,3] and [2,4], each var=1, cov=1 let m = Matrix::from_rows_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let cov_mat = covariance_vertical(&m); @@ -184,10 +175,7 @@ mod tests { #[test] fn test_covariance_horizontal() { - // M = - // 1,2 - // 3,4 - // rows are [1,2] and [3,4], each var=0.25, cov=0.25 + // Matrix with rows [1,2] and [3,4], each var=0.25, cov=0.25 let m = Matrix::from_rows_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let cov_mat = covariance_horizontal(&m); @@ -201,10 +189,7 @@ mod tests { #[test] fn test_covariance_matrix_vertical() { - // Test with a simple 2x2 matrix - // M = - // 1, 2 - // 3, 4 + // Test with a simple 2x2 matrix with rows [1, 2] and [3, 4] // Expected covariance matrix (vertical, i.e., between columns): // Col1: [1, 3], mean = 2 // Col2: [2, 4], mean = 3 @@ -212,9 +197,7 @@ mod tests { // Cov(Col2, Col2) = ((2-3)^2 + (4-3)^2) / (2-1) = (1+1)/1 = 2 // Cov(Col1, Col2) = ((1-2)*(2-3) + (3-2)*(4-3)) / (2-1) = ((-1)*(-1) + (1)*(1))/1 = (1+1)/1 = 2 // Cov(Col2, Col1) = 2 - // Expected: - // 2, 2 - // 2, 2 + // Expected matrix filled with 2 let m = Matrix::from_rows_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let cov_mat = covariance_matrix(&m, Axis::Col); @@ -226,10 +209,7 @@ mod tests { #[test] fn test_covariance_matrix_horizontal() { - // Test with a simple 2x2 matrix - // M = - // 1, 2 - // 3, 4 + // Test with a simple 2x2 matrix with rows [1, 2] and [3, 4] // Expected covariance matrix (horizontal, i.e., between rows): // Row1: [1, 2], mean = 1.5 // Row2: [3, 4], mean = 3.5 @@ -237,9 +217,7 @@ mod tests { // Cov(Row2, Row2) = ((3-3.5)^2 + (4-3.5)^2) / (2-1) = (0.25+0.25)/1 = 0.5 // Cov(Row1, Row2) = ((1-1.5)*(3-3.5) + (2-1.5)*(4-3.5)) / (2-1) = ((-0.5)*(-0.5) + (0.5)*(0.5))/1 = (0.25+0.25)/1 = 0.5 // Cov(Row2, Row1) = 0.5 - // Expected: - // 0.5, -0.5 - // -0.5, 0.5 + // Expected matrix: [[0.5, -0.5], [-0.5, 0.5]] let m = Matrix::from_rows_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let cov_mat = covariance_matrix(&m, Axis::Row); diff --git a/src/compute/stats/descriptive.rs b/src/compute/stats/descriptive.rs index 126904e..71510ff 100644 --- a/src/compute/stats/descriptive.rs +++ b/src/compute/stats/descriptive.rs @@ -350,11 +350,7 @@ mod tests { let data: Vec = (1..=24).map(|x| x as f64).collect(); let x = Matrix::from_vec(data, 4, 6); - // columns: - // 1, 5, 9, 13, 17, 21 - // 2, 6, 10, 14, 18, 22 - // 3, 7, 11, 15, 19, 23 - // 4, 8, 12, 16, 20, 24 + // columns contain sequences increasing by four starting at 1 through 4 let er0 = vec![1., 5., 9., 13., 17., 21.]; let er50 = vec![3., 7., 11., 15., 19., 23.]; diff --git a/src/matrix/mat.rs b/src/matrix/mat.rs index 6709f07..79e344b 100644 --- a/src/matrix/mat.rs +++ b/src/matrix/mat.rs @@ -1028,9 +1028,7 @@ mod tests { #[test] fn test_from_rows_vec() { - // Representing: - // 1 2 3 - // 4 5 6 + // Matrix with rows [1, 2, 3] and [4, 5, 6] let rows_data = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0]; let matrix = Matrix::from_rows_vec(rows_data, 2, 3); @@ -1042,19 +1040,14 @@ mod tests { // Helper function to create a basic Matrix for testing fn static_test_matrix() -> Matrix { - // Column-major data: - // 1 4 7 - // 2 5 8 - // 3 6 9 + // Column-major data representing a 3x3 matrix of sequential integers let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; Matrix::from_vec(data, 3, 3) } // Another helper for a different size fn static_test_matrix_2x4() -> Matrix { - // Column-major data: - // 1 3 5 7 - // 2 4 6 8 + // Column-major data representing a 2x4 matrix of sequential integers let data = vec![1, 2, 3, 4, 5, 6, 7, 8]; Matrix::from_vec(data, 2, 4) } @@ -1132,10 +1125,7 @@ mod tests { #[test] fn test_from_cols_basic() { - // Representing: - // 1 4 7 - // 2 5 8 - // 3 6 9 + // Matrix with columns forming a 3x3 sequence let cols_data = vec![vec![1, 2, 3], vec![4, 5, 6], vec![7, 8, 9]]; let matrix = Matrix::from_cols(cols_data); @@ -1512,8 +1502,7 @@ mod tests { // Delete the first row matrix.delete_row(0); - // Should be: - // 3 6 9 + // Resulting data should be [3, 6, 9] assert_eq!(matrix.rows(), 1); assert_eq!(matrix.cols(), 3); assert_eq!(matrix.data(), &[3, 6, 9]); diff --git a/src/matrix/seriesops.rs b/src/matrix/seriesops.rs index 7072130..99f89d3 100644 --- a/src/matrix/seriesops.rs +++ b/src/matrix/seriesops.rs @@ -215,20 +215,13 @@ mod tests { // Helper function to create a FloatMatrix for SeriesOps testing fn create_float_test_matrix() -> FloatMatrix { - // 3x3 matrix (column-major) with some NaNs - // 1.0 4.0 7.0 - // 2.0 NaN 8.0 - // 3.0 6.0 NaN + // 3x3 column-major matrix containing a few NaN values let data = vec![1.0, 2.0, 3.0, 4.0, f64::NAN, 6.0, 7.0, 8.0, f64::NAN]; FloatMatrix::from_vec(data, 3, 3) } fn create_float_test_matrix_4x4() -> FloatMatrix { - // 4x4 matrix (column-major) with some NaNs - // 1.0 5.0 9.0 13.0 - // 2.0 NaN 10.0 NaN - // 3.0 6.0 NaN 14.0 - // NaN 7.0 11.0 NaN + // 4x4 column-major matrix with NaNs inserted at positions where index % 5 == 0 // first make array with 16 elements FloatMatrix::from_vec( (0..16)