### Import Rustlearn Prelude Source: https://github.com/maciejkula/rustlearn/blob/master/readme.md Import the prelude for all linear algebra primitives and common traits in rustlearn. ```rust use rustlearn::prelude::*; ``` -------------------------------- ### Configure Factorization Machines Source: https://context7.com/maciejkula/rustlearn/llms.txt Shows how to train factorization machines for classification, including parallel training options and sparse data handling. ```rust use rustlearn::prelude::*; use rustlearn::factorization::factorization_machines::Hyperparameters; use rustlearn::datasets::iris; use rustlearn::metrics::accuracy_score; let (X, y) = iris::load_data(); // Configure factorization machine let mut model = Hyperparameters::new(X.cols(), 10) // (dim, num_components) .learning_rate(0.05) // Initial learning rate (adaptive) .l2_penalty(0.0) // L2 regularization .l1_penalty(0.0) // L1 regularization for sparsity .one_vs_rest(); // Multiclass classification // Train for multiple epochs for _ in 0..20 { model.fit(&X, &y).unwrap(); } let prediction = model.predict(&X).unwrap(); println!("FM accuracy: {}", accuracy_score(&y, &prediction)); // Binary factorization machine with parallel training (Hogwild) let mut binary_model = Hyperparameters::new(X.cols(), 5) .learning_rate(0.05) .build(); for _ in 0..20 { binary_model.fit_parallel(&X, &y, 4).unwrap(); // 4 threads } // Access model parameters let coefficients = binary_model.get_coefficients(); let latent_factors = binary_model.get_latent_factors(); // Works well with sparse data let sparse_X = SparseRowArray::from(&X); model.fit(&sparse_X, &y).unwrap(); ``` -------------------------------- ### Serialize and Deserialize Models with Rustlearn Source: https://context7.com/maciejkula/rustlearn/llms.txt Demonstrates saving and loading trained models using bincode for binary format and serde_json for human-readable JSON format. ```rust use rustlearn::prelude::*; use rustlearn::ensemble::random_forest::Hyperparameters as RFHyperparameters; use rustlearn::trees::decision_tree; use rustlearn::datasets::iris; use rustlearn::multiclass::OneVsRestWrapper; use rustlearn::ensemble::random_forest::RandomForest; // Using bincode for binary serialization extern crate bincode; let (data, target) = iris::load_data(); // Train a model let mut tree_params = decision_tree::Hyperparameters::new(data.cols()); tree_params.min_samples_split(10).max_features(4); let mut model = RFHyperparameters::new(tree_params, 10).one_vs_rest(); model.fit(&data, &target).unwrap(); // Serialize to binary let encoded: Vec = bincode::serialize(&model).unwrap(); // Deserialize let decoded: OneVsRestWrapper = bincode::deserialize(&encoded).unwrap(); // Predictions work on deserialized model let prediction = decoded.predict(&data).unwrap(); // Using JSON for human-readable serialization extern crate serde_json; let json_encoded = serde_json::to_string(&model).unwrap(); let json_decoded: OneVsRestWrapper = serde_json::from_str(&json_encoded).unwrap(); ``` -------------------------------- ### Implement Support Vector Classification (SVC) Source: https://context7.com/maciejkula/rustlearn/llms.txt Demonstrates training SVC models using Linear, RBF, and Polynomial kernels, including support for sparse data structures. ```rust use rustlearn::prelude::*; use rustlearn::datasets::iris; use rustlearn::svm::libsvm::svc::{Hyperparameters, KernelType}; use rustlearn::metrics::accuracy_score; let (X, y) = iris::load_data(); // Linear kernel SVM let mut linear_model = Hyperparameters::new(X.cols(), KernelType::Linear, 3) // (dim, kernel, num_classes) .C(0.3) // Regularization parameter (smaller = more regularization) .build(); linear_model.fit(&X, &y).unwrap(); let prediction = linear_model.predict(&X).unwrap(); println!("Linear SVM accuracy: {}", accuracy_score(&y, &prediction)); // RBF kernel SVM let mut rbf_model = Hyperparameters::new(X.cols(), KernelType::RBF, 3) .C(1.0) .gamma(0.5) // RBF kernel parameter (default: 1/dim) .build(); rbf_model.fit(&X, &y).unwrap(); // Polynomial kernel SVM let mut poly_model = Hyperparameters::new(X.cols(), KernelType::Polynomial, 3) .C(1.0) .degree(3) // Polynomial degree .coef0(0.0) // Constant term in kernel function .cache_size(100.0) // Cache size in MB .build(); poly_model.fit(&X, &y).unwrap(); // With sparse data let sparse_X = SparseRowArray::from(&X); let mut sparse_model = Hyperparameters::new(X.cols(), KernelType::Linear, 3) .build(); sparse_model.fit(&sparse_X, &y).unwrap(); let sparse_prediction = sparse_model.predict(&sparse_X).unwrap(); ``` -------------------------------- ### Load and Inspect Built-in Datasets Source: https://context7.com/maciejkula/rustlearn/llms.txt Shows how to load the Iris dataset and inspect the dimensions of the feature matrix and label vector. ```rust use rustlearn::prelude::*; use rustlearn::datasets::iris; // Load the iris dataset let (X, y) = iris::load_data(); println!("Features shape: {} rows x {} cols", X.rows(), X.cols()); println!("Labels shape: {} rows", y.rows()); // X contains 150 samples with 4 features each: // sepal length, sepal width, petal length, petal width // y contains class labels: 0.0, 1.0, 2.0 for three iris species let unique_classes: Vec = vec![0.0, 1.0, 2.0]; ``` -------------------------------- ### Import Specific Models and Utilities Source: https://github.com/maciejkula/rustlearn/blob/master/readme.md Import individual models and utilities from rustlearn's submodules. ```rust use rustlearn::prelude::*; use rustlearn::linear_models::sgdclassifier::Hyperparameters; // more imports ``` -------------------------------- ### Perform Dense Array Operations in Rustlearn Source: https://context7.com/maciejkula/rustlearn/llms.txt Demonstrates creation, reshaping, element access, iteration, and arithmetic operations for dense arrays. ```rust use rustlearn::prelude::*; // Create arrays of zeros and ones let zeros = Array::zeros(20, 10); let ones = Array::ones(10, 10); // Create from a vector and reshape let mut array = Array::from(vec![0.0, 1.0, 2.0, 3.0]); array.reshape(2, 2); // Create from nested vectors let array = Array::from(&vec![vec![0.0, 1.0], vec![2.0, 3.0]]); // Getting and setting values let mut array = Array::zeros(2, 2); array.set(0, 1, 1.0); *array.get_mut(1, 0) = 2.0; // Iteration over rows and columns for row in array.iter_rows() { for element in row.iter() { // process element } } // Elementwise operations let result = array.add(1.0); // Add scalar let result = array.times(2.0); // Multiply by scalar let result = array.add(&array); // Add arrays array.add_inplace(1.0); // In-place operations // Matrix multiplication and transpose let x = Array::from(vec![1.0, 2.0]); let y = Array::from(vec![3.0, 4.0]); let dot = x.dot(&y.T()); // Row indexing let subset = array.get_rows(&vec![0, 1]); let subset = array.get_rows(&(0..2)); ``` -------------------------------- ### Manage Sparse Array Types in Rustlearn Source: https://context7.com/maciejkula/rustlearn/llms.txt Covers conversion, creation, and iteration for sparse row and column arrays, suitable for high-dimensional data. ```rust use rustlearn::prelude::*; // Convert dense array to sparse row array let dense_data = Array::from(&vec![vec![1.0, 0.0, 2.0], vec![0.0, 3.0, 0.0]]); let sparse = SparseRowArray::from(&dense_data); // Create empty sparse array and set values let mut sparse = SparseRowArray::zeros(100, 1000); sparse.set(0, 5, 1.0); sparse.set(0, 100, 0.5); // Get dimensions and values let rows = sparse.rows(); let cols = sparse.cols(); let value = sparse.get(0, 5); // Iterate over non-zero elements for row in sparse.iter_rows() { for (col_idx, value) in row.iter_nonzero() { println!("Column {}: {}", col_idx, value); } } // SparseColumnArray for column-major access (used by decision trees) let sparse_col = SparseColumnArray::from(&dense_data); ``` -------------------------------- ### Train Random Forest Model Source: https://github.com/maciejkula/rustlearn/blob/master/readme.md Loads the Iris dataset, configures decision tree hyperparameters, trains a Random Forest model using the one-vs-rest strategy, and makes predictions. Ensure you have the 'rustlearn' crate and its 'datasets' feature enabled. ```rust use rustlearn::prelude::*; use rustlearn::ensemble::random_forest::Hyperparameters; use rustlearn::datasets::iris; use rustlearn::trees::decision_tree; let (data, target) = iris::load_data(); let mut tree_params = decision_tree::Hyperparameters::new(data.cols()); tree_params.min_samples_split(10) .max_features(4); let mut model = Hyperparameters::new(tree_params, 10) .one_vs_rest(); model.fit(&data, &target).unwrap(); // Optionally serialize and deserialize the model // let encoded = bincode::serialize(&model).unwrap(); // let decoded: OneVsRestWrapper = bincode::deserialize(&encoded).unwrap(); let prediction = model.predict(&data).unwrap(); ``` -------------------------------- ### Evaluation Metrics in Rustlearn Source: https://context7.com/maciejkula/rustlearn/llms.txt Calculates various performance metrics for classification, ranking, and regression tasks. Some metrics like ROC AUC require probability scores. ```rust use rustlearn::prelude::*; use rustlearn::metrics::{accuracy_score, mean_absolute_error, mean_squared_error}; use rustlearn::metrics::{roc_auc_score, dcg_score, ndcg_score}; // Classification accuracy let y_true = Array::from(vec![1.0, 1.0, 0.0, 0.0]); let y_pred = Array::from(vec![1.0, 0.0, 0.0, 0.0]); let accuracy = accuracy_score(&y_true, &y_pred); println!("Accuracy: {}", accuracy); // 0.75 // ROC AUC for binary classification (requires probability scores) let y_true = Array::from(vec![1.0, 1.0, 0.0, 0.0]); let y_scores = Array::from(vec![0.9, 0.4, 0.3, 0.1]); // Predicted probabilities let auc = roc_auc_score(&y_true, &y_scores).unwrap(); println!("ROC AUC: {}", auc); // Ranking metrics let relevance = Array::from(vec![5.0, 3.0, 2.0]); let scores = Array::from(vec![2.0, 1.0, 0.0]); let dcg = dcg_score(&relevance, &scores, 10); // k=10 let ndcg = ndcg_score(&relevance, &scores, 10); // Normalized DCG println!("DCG: {}, NDCG: {}", dcg, ndcg); // Regression metrics let y_true = Array::from(vec![3.0, -0.5, 2.0, 7.0]); let y_pred = Array::from(vec![2.5, 0.0, 2.0, 8.0]); let mae = mean_absolute_error(&y_true, &y_pred); let mse = mean_squared_error(&y_true, &y_pred); println!("MAE: {}, MSE: {}", mae, mse); ``` -------------------------------- ### Decision Tree Classifier Source: https://context7.com/maciejkula/rustlearn/llms.txt Implements the CART algorithm for classification. Supports configurable tree depth and split criteria for both dense and sparse data. Use `.one_vs_rest()` for multiclass or `.build()` for binary classification. ```rust use rustlearn::prelude::*; use rustlearn::trees::decision_tree::Hyperparameters; use rustlearn::datasets::iris; use rustlearn::metrics::accuracy_score; let (X, y) = iris::load_data(); // Configure decision tree hyperparameters let mut model = Hyperparameters::new(X.cols()) .min_samples_split(5) // Minimum samples required to split a node .max_features(4) // Max features to consider per split (default: sqrt(n_features)) .max_depth(40) // Maximum tree depth .one_vs_rest(); // Multiclass classification model.fit(&X, &y).unwrap(); let prediction = model.predict(&X).unwrap(); let train_accuracy = accuracy_score(&y, &prediction); println!("Training accuracy: {}", train_accuracy); // For sparse data (e.g., text classification) let sparse_X = SparseColumnArray::from(&X); let mut sparse_model = Hyperparameters::new(X.cols()) .min_samples_split(5) .one_vs_rest(); sparse_model.fit(&sparse_X, &y).unwrap(); let sparse_prediction = sparse_model.predict(&sparse_X).unwrap(); // Binary decision tree (without one-vs-rest wrapper) let mut binary_tree = Hyperparameters::new(X.cols()) .min_samples_split(10) .build(); ``` -------------------------------- ### SGDClassifier for Logistic Regression Source: https://context7.com/maciejkula/rustlearn/llms.txt Implements logistic regression using stochastic gradient descent with adaptive learning rates (Adagrad). Supports L1 and L2 regularization and multiclass classification via one-vs-rest. Configure hyperparameters like learning rate and regularization strength. ```rust use rustlearn::prelude::*; use rustlearn::datasets::iris; use rustlearn::cross_validation::CrossValidation; use rustlearn::linear_models::sgdclassifier::Hyperparameters; use rustlearn::metrics::accuracy_score; let (X, y) = iris::load_data(); let num_splits = 10; let num_epochs = 5; let mut accuracy = 0.0; for (train_idx, test_idx) in CrossValidation::new(X.rows(), num_splits) { let X_train = X.get_rows(&train_idx); let y_train = y.get_rows(&train_idx); let X_test = X.get_rows(&test_idx); let y_test = y.get_rows(&test_idx); // Configure model with hyperparameters let mut model = Hyperparameters::new(X.cols()) .learning_rate(0.5) // Initial learning rate (adaptive via Adagrad) .l2_penalty(0.0) // L2 regularization strength .l1_penalty(0.0) // L1 regularization for sparsity .one_vs_rest(); // Multiclass via one-vs-rest // Multiple epochs by calling fit repeatedly for _ in 0..num_epochs { model.fit(&X_train, &y_train).unwrap(); } let prediction = model.predict(&X_test).unwrap(); accuracy += accuracy_score(&y_test, &prediction); } accuracy /= num_splits as f32; println!("Cross-validation accuracy: {}", accuracy); // For binary classification, use .build() instead of .one_vs_rest() let mut binary_model = Hyperparameters::new(X.cols()) .learning_rate(1.0) .l2_penalty(0.5) .build(); // Access coefficients after training binary_model.fit(&X, &y).unwrap(); let coefficients = binary_model.get_coefficients(); ``` -------------------------------- ### Shuffle Split Cross-Validation in Rust Source: https://context7.com/maciejkula/rustlearn/llms.txt Performs repeated random train/test splits for model validation. Ensure reproducibility by setting a random seed. ```rust use rustlearn::prelude::*; use rustlearn::datasets::iris; use rustlearn::cross_validation::ShuffleSplit; use rustlearn::linear_models::sgdclassifier::Hyperparameters; use rustlearn::metrics::accuracy_score; use rand::{SeedableRng, StdRng}; let (X, y) = iris::load_data(); let num_splits = 10; let test_percentage = 0.2; // 20% test, 80% train let mut split = ShuffleSplit::new(X.rows(), num_splits, test_percentage); split.set_rng(StdRng::from_seed(&[1, 2, 3, 4])); // For reproducibility let mut test_accuracy = 0.0; for (train_idx, test_idx) in split { let X_train = X.get_rows(&train_idx); let y_train = y.get_rows(&train_idx); let X_test = X.get_rows(&test_idx); let y_test = y.get_rows(&test_idx); let mut model = Hyperparameters::new(X.cols()) .learning_rate(0.5) .one_vs_rest(); for _ in 0..20 { model.fit(&X_train, &y_train).unwrap(); } let y_hat = model.predict(&X_test).unwrap(); test_accuracy += accuracy_score(&y_test, &y_hat); } test_accuracy /= num_splits as f32; println!("Shuffle split accuracy: {}", test_accuracy); ``` -------------------------------- ### Random Forest Classifier Source: https://context7.com/maciejkula/rustlearn/llms.txt Fits an ensemble of decision trees using bootstrap samples for improved generalization. Supports parallel training and prediction. Configure base decision tree parameters and the number of trees. ```rust use rustlearn::prelude::*; use rustlearn::ensemble::random_forest::Hyperparameters; use rustlearn::trees::decision_tree; use rustlearn::datasets::iris; use rustlearn::metrics::accuracy_score; let (data, target) = iris::load_data(); // First configure the base decision tree parameters let mut tree_params = decision_tree::Hyperparameters::new(data.cols()); tree_params .min_samples_split(10) .max_features(4); // Build the random forest with 10 trees let mut model = Hyperparameters::new(tree_params, 10) // (tree_params, num_trees) .one_vs_rest(); model.fit(&data, &target).unwrap(); let prediction = model.predict(&data).unwrap(); let accuracy = accuracy_score(&target, &prediction); println!("Random Forest accuracy: {}", accuracy); // Parallel training and prediction model.fit_parallel(&data, &target, 4).unwrap(); // 4 threads let parallel_prediction = model.predict_parallel(&data, 4).unwrap(); // Access individual trees let trees = model.trees(); println!("Number of trees: {}", trees.len()); // With sparse data let sparse_data = SparseRowArray::from(&data); let mut sparse_model = Hyperparameters::new(tree_params.clone(), 20) .one_vs_rest(); sparse_model.fit(&sparse_data, &target).unwrap(); ``` -------------------------------- ### Logistic Regression with Cross-Validation Source: https://github.com/maciejkula/rustlearn/blob/master/readme.md Performs k-fold cross-validation for a logistic regression model using the iris dataset. Fits the model multiple times and calculates average accuracy. ```rust use rustlearn::prelude::*; use rustlearn::datasets::iris; use rustlearn::cross_validation::CrossValidation; use rustlearn::linear_models::sgdclassifier::Hyperparameters; use rustlearn::metrics::accuracy_score; let (X, y) = iris::load_data(); let num_splits = 10; let num_epochs = 5; let mut accuracy = 0.0; for (train_idx, test_idx) in CrossValidation::new(X.rows(), num_splits) { let X_train = X.get_rows(&train_idx); let y_train = y.get_rows(&train_idx); let X_test = X.get_rows(&test_idx); let y_test = y.get_rows(&test_idx); let mut model = Hyperparameters::new(X.cols()) .learning_rate(0.5) .l2_penalty(0.0) .l1_penalty(0.0) .one_vs_rest(); for _ in 0..num_epochs { model.fit(&X_train, &y_train).unwrap(); } let prediction = model.predict(&X_test).unwrap(); accuracy += accuracy_score(&y_test, &prediction); } accuracy /= num_splits as f32; ``` -------------------------------- ### Feature Extraction with DictVectorizer in Rust Source: https://context7.com/maciejkula/rustlearn/llms.txt Transforms named features into sparse arrays using one-hot encoding. Useful for categorical and text data. Can handle weighted features. ```rust use rustlearn::prelude::*; use rustlearn::feature_extraction::DictVectorizer; // Example: converting categorical features to sparse matrix let features = vec![ vec!["color:red", "size:large"], vec!["color:blue", "size:small"], vec!["color:red", "size:medium"], ]; let mut vectorizer = DictVectorizer::new(); for (row_idx, row) in features.iter().enumerate() { for feature in row.iter() { vectorizer.partial_fit(row_idx, feature, 1.0); // (row, feature_name, value) } } // Transform to sparse array let X = vectorizer.transform(); println!("Shape: {} rows x {} columns", X.rows(), X.cols()); // Access the feature dictionary let dictionary = vectorizer.dictionary(); for (feature_name, (col_idx, count)) in dictionary { println!("{}: column {}, count {}", feature_name, col_idx, count); } // Use with weighted features let mut weighted_vectorizer = DictVectorizer::new(); weighted_vectorizer.partial_fit(0, "word:hello", 0.5); // TF-IDF weights weighted_vectorizer.partial_fit(0, "word:world", 0.3); weighted_vectorizer.partial_fit(1, "word:hello", 0.2); let weighted_X = weighted_vectorizer.transform(); ``` -------------------------------- ### Perform K-Fold Cross-Validation Source: https://context7.com/maciejkula/rustlearn/llms.txt Uses the CrossValidation iterator to split data and evaluate model performance across multiple folds. ```rust use rustlearn::prelude::*; use rustlearn::datasets::iris; use rustlearn::cross_validation::CrossValidation; use rustlearn::linear_models::sgdclassifier::Hyperparameters; use rustlearn::metrics::accuracy_score; use rand::{SeedableRng, StdRng}; let (X, y) = iris::load_data(); let num_splits = 10; let mut test_accuracy = 0.0; // Create cross-validation iterator let mut cv = CrossValidation::new(X.rows(), num_splits); // Set random seed for reproducibility cv.set_rng(StdRng::from_seed(&[100])); for (train_idx, test_idx) in cv { // train_idx and test_idx are Vec let X_train = X.get_rows(&train_idx); let y_train = y.get_rows(&train_idx); let X_test = X.get_rows(&test_idx); let y_test = y.get_rows(&test_idx); let mut model = Hyperparameters::new(X.cols()) .learning_rate(0.5) .one_vs_rest(); for _ in 0..20 { model.fit(&X_train, &y_train).unwrap(); } let y_hat = model.predict(&X_test).unwrap(); test_accuracy += accuracy_score(&y_test, &y_hat); } test_accuracy /= num_splits as f32; println!("10-fold CV accuracy: {}", test_accuracy); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.