Deterministic kernel SVM training and evaluation toolkit for MoonBit
pub struct BinaryModel {
support_rows : Array[Array[Double]]
support_class_labels : Array[Int]
support_alpha_values : Array[Double]
signed_coefficients : Array[Double]
bias_value : Double
input_columns : Int
model_kernel : Kernel
lower_class : Int
upper_class : Int
convergence_data : ConvergenceReport
} derive(Eq, Debug)fn BinaryModel::predict_batch(self : BinaryModel, rows : Array[Array[Double]]) -> Result[Array[Int], SvmError]pub struct BinaryPredictionExplanation {
output_class : Int
signed_decision_value : Double
model_bias : Double
ordered_contributions : Array[SupportContribution]
} derive(Eq, Debug)fn BinaryPredictionExplanation::contributions(self : BinaryPredictionExplanation) -> Array[SupportContribution]pub struct BinaryThresholdAnalysis {
threshold_points : Array[ThresholdPoint]
observed_positive_count : Int
observed_negative_count : Int
roc_area : Double
average_precision_value : Double
} derive(Eq, Debug)pub struct CandidateEvaluation {
original_index : Int
evaluated_name : String
metric_score : Double
validation_report : ValidationReport
} derive(Eq, Debug)pub struct ClassScoreProfile {
profiled_class : Int
positive_observations : Int
negative_observations : Int
positive_score_minimum : Double
positive_score_maximum : Double
positive_score_mean : Double
negative_score_minimum : Double
negative_score_maximum : Double
negative_score_mean : Double
mean_score_separation : Double
} derive(Eq, Debug)pub struct ClassificationMetrics {
ordered_classes : Array[Int]
confusion_counts : Array[Array[Int]]
class_metrics : Array[ClassMetric]
total_observations : Int
accuracy_value : Double
error_rate_value : Double
balanced_accuracy_value : Double
macro_precision_value : Double
macro_recall_value : Double
macro_f1_value : Double
micro_precision_value : Double
micro_recall_value : Double
micro_f1_value : Double
weighted_precision_value : Double
weighted_recall_value : Double
weighted_f1_value : Double
} derive(Eq, Debug)pub struct DatasetProfile {
source_name : String
source_row_count : Int
source_feature_count : Int
source_class_count : Int
feature_profiles : Array[FeatureProfile]
class_profiles : Array[ClassProfile]
feature_centroid : Array[Double]
smallest_squared_row_norm : Double
largest_squared_row_norm : Double
average_squared_row_norm : Double
} derive(Eq, Debug)fn FeatureScaler::inverse_row(self : FeatureScaler, row : Array[Double]) -> Result[Array[Double], SvmError]fn FeatureScaler::transform_dataset(self : FeatureScaler, data : Dataset, name : String) -> Result[Dataset, SvmError]fn FeatureScaler::transform_row(self : FeatureScaler, row : Array[Double]) -> Result[Array[Double], SvmError]pub struct FoldEvaluation {
fold_number : Int
training_rows : Array[Int]
testing_rows : Array[Int]
actual_labels : Array[Int]
predicted_labels : Array[Int]
fold_metrics : ClassificationMetrics
fitted_scaler : FeatureScaler?
} derive(Eq, Debug)pub struct MulticlassModel {
ordered_classes : Array[Int]
class_models : Array[BinaryModel]
input_columns : Int
} derive(Eq, Debug)fn MulticlassModel::decision_values(self : MulticlassModel, row : Array[Double]) -> Result[Array[Double], SvmError]fn MulticlassModel::predict_batch(self : MulticlassModel, rows : Array[Array[Double]]) -> Result[Array[Int], SvmError]pub struct MulticlassModelDiagnostics {
fitted_class_count : Int
retained_support_counts : Array[Int]
fitted_convergence_reports : Array[ConvergenceReport]
retained_support_total : Int
every_model_converged : Bool
} derive(Eq, Debug)fn MulticlassModelDiagnostics::convergence_reports(self : MulticlassModelDiagnostics) -> Array[ConvergenceReport]pub struct PermutationImportance {
original_accuracy : Double
ordered_importances : Array[FeatureImportance]
} derive(Eq, Debug)pub struct PredictionAudit {
audited_observations : Array[PredictionObservation]
audited_class_profiles : Array[ClassScoreProfile]
audit_metrics : ClassificationMetrics
correct_prediction_count : Int
incorrect_prediction_count : Int
smallest_winning_margin : Double
largest_winning_margin : Double
average_winning_margin : Double
} derive(Eq, Debug)fn PredictionAudit::misclassified_observations(self : PredictionAudit) -> Array[PredictionObservation]pub struct RepeatedValidationReport {
round_reports : Array[ValidationReport]
folds_per_round : Int
accuracy_mean : Double
accuracy_minimum : Double
accuracy_maximum : Double
accuracy_deviation : Double
macro_f1_mean : Double
macro_f1_minimum : Double
macro_f1_maximum : Double
macro_f1_deviation : Double
} derive(Eq, Debug)pub struct SearchResult {
successful_candidates : Array[CandidateEvaluation]
failed_candidates : Array[CandidateFailure]
selected_original_index : Int
selected_name : String
selected_score : Double
selected_metric : SelectionMetric
selected_validation : ValidationReport
selected_model : MulticlassModel
selected_scaler : FeatureScaler?
} derive(Eq, Debug)pub struct SvmCandidate {
candidate_name : String
binary_configuration : BinaryConfig
candidate_scaling : ScalingPlan
} derive(Eq, Debug)pub(all) enum SvmError {
EmptyDataset
EmptyFeatureSet
RaggedRow(Int, Int, Int)
LabelLengthMismatch(Int, Int)
NonFiniteFeature(Int, Int)
SingleClassDataset
InvalidSubsetIndex(Int, Int)
DuplicateSubsetIndex(Int)
InvalidKernelParameter(String, Double)
KernelDimensionMismatch(Int, Int)
InvalidConfiguration(String, Double)
InvalidIterationCount(Int)
InvalidWeight(Int, Double)
WeightLengthMismatch(Int, Int)
InvalidClassWeight(Int, Double)
DuplicateClassWeight(Int)
ZeroEffectiveWeight
InvalidBinaryClassCount(Int)
PredictionDimensionMismatch(Int, Int)
TrainingDidNotConverge(Int)
NumericFailure(String)
InvalidFoldCount(Int)
InsufficientClassSamples(Int, Int, Int)
EmptyMetricInput
MetricLengthMismatch(Int, Int)
UnknownClassLabel(Int)
InvalidCandidateCount(Int)
NoValidCandidate
NonFiniteReportValue(String)
} derive(Eq, Debug)pub struct ThresholdPoint {
score_threshold : Double
accepted_true_positives : Int
accepted_false_positives : Int
rejected_true_negatives : Int
rejected_false_negatives : Int
true_positive_rate_value : Double
false_positive_rate_value : Double
precision_value : Double
recall_value : Double
} derive(Eq, Debug)pub struct ValidationReport {
fold_evaluations : Array[FoldEvaluation]
aggregate_metrics : ClassificationMetrics
evaluated_observations : Int
scaling_plan : ScalingPlan
} derive(Eq, Debug)fn binary_config(c : Double, kernel : Kernel, max_iterations : Int, max_passes : Int, tolerance : Double, alpha_epsilon : Double) -> Result[BinaryConfig, SvmError]fn binary_diagnostics_json(diagnostics : BinaryModelDiagnostics, convergence : ConvergenceReport) -> Stringfn binary_diagnostics_text(diagnostics : BinaryModelDiagnostics, convergence : ConvergenceReport) -> Stringfn binary_permutation_importance(model : BinaryModel, data : Dataset) -> Result[PermutationImportance, SvmError]fn binary_threshold_analysis(labels : Array[Int], scores : Array[Double], positive_class : Int) -> Result[BinaryThresholdAnalysis, SvmError]fn classification_metrics(actual : Array[Int], predicted : Array[Int]) -> Result[ClassificationMetrics, SvmError]fn cross_validate(data : Dataset, config : BinaryConfig, fold_count : Int, scaling : ScalingPlan) -> Result[ValidationReport, SvmError]fn explain_binary_prediction(model : BinaryModel, row : Array[Double]) -> Result[BinaryPredictionExplanation, SvmError]fn explain_multiclass_prediction(model : MulticlassModel, row : Array[Double]) -> Result[MulticlassPredictionExplanation, SvmError]fn multiclass_permutation_importance(model : MulticlassModel, data : Dataset) -> Result[PermutationImportance, SvmError]fn multiclass_prediction_audit(model : MulticlassModel, data : Dataset) -> Result[PredictionAudit, SvmError]fn repeated_cross_validate(data : Dataset, config : BinaryConfig, fold_count : Int, repetitions : Int, scaling : ScalingPlan) -> Result[RepeatedValidationReport, SvmError]fn select_svm(data : Dataset, candidates : Array[SvmCandidate], fold_count : Int, metric : SelectionMetric) -> Result[SearchResult, SvmError]fn train_binary_weighted(data : Dataset, sample_weights : Array[Double], class_weights : Array[ClassWeight], config : BinaryConfig) -> Result[BinaryModel, SvmError]fn train_multiclass_weighted(data : Dataset, sample_weights : Array[Double], class_weights : Array[ClassWeight], config : BinaryConfig) -> Result[MulticlassModel, SvmError]fn training_margin_diagnostics(model : BinaryModel, data : Dataset) -> Result[MarginDiagnostics, SvmError]Deterministic kernel SVM training and evaluation toolkit for MoonBit