Classical ML

Reference for the classical machine-learning algorithms in AiDotNet. They train through the same facade — ConfigureModel(...) + ConfigureDataLoader(...) + BuildAsync(). Supervised models (regression, classification) then predict labels/values through result.Predict(...); clustering returns cluster assignments and dimensionality-reduction returns transformed features, so their output shape differs.


Classification

Linear Models

Algorithm Namespace
LogisticRegression<T> AiDotNet.Regression
RidgeClassifier<T> AiDotNet.Classification
SGDClassifier<T> AiDotNet.Classification
PassiveAggressiveClassifier<T> AiDotNet.Classification
PerceptronClassifier<T> AiDotNet.Classification
using AiDotNet.Regression;

var classifier = new LogisticRegression<double>();

Support Vector Machines

Algorithm Namespace
SupportVectorClassifier<T> AiDotNet.Classification.SVM
NuSupportVectorClassifier<T> AiDotNet.Classification.SVM
LinearSupportVectorClassifier<T> AiDotNet.Classification.SVM
using AiDotNet.Classification.SVM;

var svm = new LinearSupportVectorClassifier<double>();

Tree-Based & Ensemble

Algorithm Description
DecisionTreeClassifier<T> Single decision tree
RandomForestClassifier<T> Ensemble of trees
ExtraTreesClassifier<T> Extremely randomized trees
GradientBoostingClassifier<T> Gradient boosting
HistGradientBoostingClassifier<T> Histogram-based boosting
AdaBoostClassifier<T> Adaptive boosting
BaggingClassifier<T> Bootstrap aggregating
VotingClassifier<T> Soft/hard voting
StackingClassifier<T> Stacked generalization
using AiDotNet.Classification.Ensemble;
using AiDotNet.Models.Options;

var forest = new RandomForestClassifier<double>(
    new RandomForestClassifierOptions<double> { NEstimators = 100, MaxDepth = 10 });

Naive Bayes

Algorithm Distribution
GaussianNaiveBayes<T> Gaussian (continuous)
MultinomialNaiveBayes<T> Multinomial (counts)
BernoulliNaiveBayes<T> Bernoulli (binary)
ComplementNaiveBayes<T> Complement (imbalanced)
CategoricalNaiveBayes<T> Categorical

Neighbors & Multiclass

Algorithm Description
KNeighborsClassifier<T> K-Nearest Neighbors
OneVsRestClassifier<T> One-vs-rest wrapper
OneVsOneClassifier<T> One-vs-one wrapper
ClassifierChainClassifier<T> Multi-label chains

Regression

AiDotNet regressors use the Regression suffix (e.g. RidgeRegression, not Ridge).

Linear Models

Algorithm Description
SimpleRegression<T> / MultipleRegression<T> Ordinary least squares
RidgeRegression<T> L2 regularization
LassoRegression<T> L1 regularization
ElasticNetRegression<T> L1 + L2 regularization
PolynomialRegression<T> Polynomial features
BayesianRegression<T> Bayesian regression
RobustRegression<T> Robust to outliers
QuantileRegression<T> Quantile regression
using AiDotNet.Regression;

var model = new ElasticNetRegression<double>();

Tree-Based, Neighbors & Neural

Algorithm Description
DecisionTreeRegression<T> Single decision tree
RandomForestRegression<T> Ensemble of trees
GradientBoostingRegression<T> Gradient boosting
HistGradientBoostingRegression<T> Histogram-based boosting
KNearestNeighborsRegression<T> K-Nearest Neighbors
GaussianProcessRegression<T> Gaussian process
NeuralNetworkRegression<T> Multi-layer perceptron
IsotonicRegression<T> Monotonic regression

Clustering

Family Algorithms
Centroid-based KMeans<T>, MiniBatchKMeans<T>, KMedoids<T>, BisectingKMeans<T>, FuzzyCMeans<T>
Density-based DBSCAN<T>, HDBSCAN<T>, OPTICS<T>, MeanShift<T>, Denclue<T>
Hierarchical AgglomerativeClustering<T>, BIRCH<T>, CURE<T>
Graph / other SpectralClustering<T>, AffinityPropagation<T>, CLARANS<T>
using AiDotNet.Clustering.Options;
using AiDotNet.Clustering.Partitioning;

var kmeans = new KMeans<double>(new KMeansOptions<double> { NumClusters = 5 });

Dimensionality Reduction

Family Algorithms
Linear PCA<T>, IncrementalPCA<T>, KernelPCA<T>, FactorAnalysis<T>, FastICA<T>, LatentDirichletAllocation<T>
Manifold Isomap<T>, LocallyLinearEmbedding<T>, MDS<T>, LaplacianEigenmaps<T>, DiffusionMaps<T>

Usage with AiModelBuilder

Most algorithms above plug into the facade the same way — swap ConfigureModel(...). Supervised models use a labelled loader (FromArrays/FromMatrixVector) and read predictions from result.Predict(...); unsupervised ones (clustering, dimensionality reduction) use the features-only DataLoaders.FromMatrix(...) and return cluster labels / transformed features.

using AiDotNet;
using AiDotNet.Classification.Ensemble;
using AiDotNet.Data.Loaders;
using AiDotNet.Models.Options;
using AiDotNet.Regression;
using AiDotNet.Tensors.LinearAlgebra;

double[][] features =
{
    new[] { 5.1, 3.5, 1.4, 0.2 }, new[] { 7.0, 3.2, 4.7, 1.4 },
    new[] { 6.3, 3.3, 6.0, 2.5 }, new[] { 4.9, 3.0, 1.4, 0.2 }
};
double[] labels = { 0, 1, 2, 0 };

// Classification
var classification = await new AiModelBuilder<double, Matrix<double>, Vector<double>>()
    .ConfigureModel(new RandomForestClassifier<double>(
        new RandomForestClassifierOptions<double> { NEstimators = 100 }))
    .ConfigureDataLoader(DataLoaders.FromArrays(features, labels))
    .BuildAsync();

// Regression — same shape, different model + targets.
double[] targets = { 1.2, 3.4, 5.6, 1.1 };
var regression = await new AiModelBuilder<double, Matrix<double>, Vector<double>>()
    .ConfigureModel(new GradientBoostingRegression<double>())
    .ConfigureDataLoader(DataLoaders.FromArrays(features, targets))
    .BuildAsync();

Console.WriteLine($"Trained classifier + regressor on {features.Length} samples.");
using AiDotNet;
using AiDotNet.Clustering.Options;
using AiDotNet.Clustering.Partitioning;
using AiDotNet.Data.Loaders;
using AiDotNet.Tensors.LinearAlgebra;

// Clustering uses the features-only loader.
var data = new Matrix<double>(4, 2);
double[][] rows = { new[] { 1.0, 1.0 }, new[] { 1.2, 0.9 }, new[] { 8.0, 8.0 }, new[] { 8.1, 7.9 } };
for (int i = 0; i < 4; i++) { data[i, 0] = rows[i][0]; data[i, 1] = rows[i][1]; }

var clustering = await new AiModelBuilder<double, Matrix<double>, Vector<double>>()
    .ConfigureModel(new KMeans<double>(new KMeansOptions<double> { NumClusters = 2 }))
    .ConfigureDataLoader(DataLoaders.FromMatrix(data))
    .BuildAsync();

Console.WriteLine($"Silhouette: {clustering.Evaluation.ClusteringMetrics?.Silhouette:F4}");