Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/cluster/agglomerative.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ impl Default for AgglomerativeClusteringParameters {
pub struct AgglomerativeClustering<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>> {
/// The cluster label assigned to each sample.
pub labels: Vec<usize>,
parameters: Option<AgglomerativeClusteringParameters>,
_phantom_tx: PhantomData<TX>,
_phantom_ty: PhantomData<TY>,
_phantom_x: PhantomData<X>,
Expand Down Expand Up @@ -176,12 +177,22 @@ impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>> AgglomerativeClusteri
}
Ok(AgglomerativeClustering {
labels,
parameters: Some(parameters),
_phantom_tx: PhantomData,
_phantom_ty: PhantomData,
_phantom_x: PhantomData,
_phantom_y: PhantomData,
})
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &AgglomerativeClusteringParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>>
Expand Down
13 changes: 12 additions & 1 deletion src/cluster/dbscan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ pub struct DBSCAN<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>, D: Dista
num_classes: usize,
knn_algorithm: KNNAlgorithm<TX, D>,
eps: f64,
parameters: Option<DBSCANParameters<TX, D>>,
_phantom_ty: PhantomData<TY>,
_phantom_x: PhantomData<X>,
_phantom_y: PhantomData<Y>,
Expand Down Expand Up @@ -295,7 +296,7 @@ impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>, D: Distance<Vec<TX>>>
x.row_iter()
.map(|row| row.iterator(0).cloned().collect())
.collect(),
parameters.distance,
parameters.distance.clone(),
)?;

let mut row = vec![TX::zero(); x.shape().1];
Expand Down Expand Up @@ -353,6 +354,7 @@ impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>, D: Distance<Vec<TX>>>
num_classes: k as usize,
knn_algorithm: algo,
eps: parameters.eps,
parameters: Some(parameters),
_phantom_ty: PhantomData,
_phantom_x: PhantomData,
_phantom_y: PhantomData,
Expand Down Expand Up @@ -392,6 +394,15 @@ impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>, D: Distance<Vec<TX>>>

Ok(result)
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &DBSCANParameters<TX, D> {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
11 changes: 11 additions & 0 deletions src/cluster/kmeans.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ pub struct KMeans<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>> {
size: Vec<usize>,
_distortion: f64,
centroids: Vec<Vec<f64>>,
parameters: Option<KMeansParameters>,
_phantom_tx: PhantomData<TX>,
_phantom_ty: PhantomData<TY>,
_phantom_x: PhantomData<X>,
Expand Down Expand Up @@ -315,6 +316,7 @@ impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>> KMeans<TX, TY, X, Y>
size,
_distortion: distortion,
centroids,
parameters: Some(parameters),
_phantom_tx: PhantomData,
_phantom_ty: PhantomData,
_phantom_x: PhantomData,
Expand Down Expand Up @@ -411,6 +413,15 @@ impl<TX: Number, TY: Number, X: Array2<TX>, Y: Array1<TY>> KMeans<TX, TY, X, Y>

y
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &KMeansParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
11 changes: 11 additions & 0 deletions src/decomposition/pca.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ pub struct PCA<T: Number + RealNumber, X: Array2<T> + SVDDecomposable<T> + EVDDe
eigenvectors: X,
eigenvalues: Vec<T>,
projection: X,
parameters: Option<PCAParameters>,
mu: Vec<T>,
pmu: Vec<T>,
}
Expand Down Expand Up @@ -329,6 +330,7 @@ impl<T: Number + RealNumber, X: Array2<T> + SVDDecomposable<T> + EVDDecomposable
eigenvectors,
eigenvalues,
projection: projection.transpose(),
parameters: Some(parameters),
mu,
pmu,
})
Expand Down Expand Up @@ -360,6 +362,15 @@ impl<T: Number + RealNumber, X: Array2<T> + SVDDecomposable<T> + EVDDecomposable
pub fn components(&self) -> &X {
&self.projection
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &PCAParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
11 changes: 11 additions & 0 deletions src/decomposition/svd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ use crate::numbers::realnum::RealNumber;
#[derive(Debug)]
pub struct SVD<T: Number + RealNumber, X: Array2<T> + SVDDecomposable<T> + EVDDecomposable<T>> {
components: X,
parameters: Option<SVDParameters>,
phantom: PhantomData<T>,
}

Expand Down Expand Up @@ -190,6 +191,7 @@ impl<T: Number + RealNumber, X: Array2<T> + SVDDecomposable<T> + EVDDecomposable

Ok(SVD {
components,
parameters: Some(parameters),
phantom: PhantomData,
})
}
Expand All @@ -212,6 +214,15 @@ impl<T: Number + RealNumber, X: Array2<T> + SVDDecomposable<T> + EVDDecomposable
pub fn components(&self) -> &X {
&self.components
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &SVDParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
12 changes: 12 additions & 0 deletions src/ensemble/extra_trees_regressor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ pub struct ExtraTreesRegressor<
Y: Array1<TY>,
> {
forest_regressor: Option<BaseForestRegressor<TX, TY, X, Y>>,
parameters: Option<ExtraTreesRegressorParameters>
}

impl ExtraTreesRegressorParameters {
Expand Down Expand Up @@ -165,6 +166,7 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number, X: Array2<TX>, Y: Array1
fn new() -> Self {
Self {
forest_regressor: Option::None,
parameters: Option::None
}
}

Expand Down Expand Up @@ -207,6 +209,7 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number, X: Array2<TX>, Y: Array1

Ok(ExtraTreesRegressor {
forest_regressor: Some(forest_regressor),
parameters: Some(parameters)
})
}

Expand All @@ -222,6 +225,15 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number, X: Array2<TX>, Y: Array1
let forest_regressor = self.forest_regressor.as_ref().unwrap();
forest_regressor.predict_oob(x)
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &ExtraTreesRegressorParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
12 changes: 12 additions & 0 deletions src/ensemble/random_forest_classifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ pub struct RandomForestClassifier<
trees: Option<Vec<DecisionTreeClassifier<TX, TY, X, Y>>>,
classes: Option<Vec<TY>>,
samples: Option<Vec<Vec<bool>>>,
parameters: Option<RandomForestClassifierParameters>
}

impl RandomForestClassifierParameters {
Expand Down Expand Up @@ -200,6 +201,7 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number + Ord, X: Array2<TX>, Y:
trees: Option::None,
classes: Option::None,
samples: Option::None,
parameters: Option::None,
}
}
fn fit(x: &X, y: &Y, parameters: RandomForestClassifierParameters) -> Result<Self, Failed> {
Expand Down Expand Up @@ -506,6 +508,7 @@ impl<TX: FloatNumber + PartialOrd, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY
trees: Some(trees),
classes: Some(classes),
samples: maybe_all_samples,
parameters: Some(parameters)
})
}

Expand Down Expand Up @@ -613,6 +616,15 @@ impl<TX: FloatNumber + PartialOrd, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY
}
samples
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &RandomForestClassifierParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
12 changes: 12 additions & 0 deletions src/ensemble/random_forest_regressor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ pub struct RandomForestRegressor<
Y: Array1<TY>,
> {
forest_regressor: Option<BaseForestRegressor<TX, TY, X, Y>>,
parameters: Option<RandomForestRegressorParameters>
}

impl RandomForestRegressorParameters {
Expand Down Expand Up @@ -165,6 +166,7 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number, X: Array2<TX>, Y: Array1
fn new() -> Self {
Self {
forest_regressor: Option::None,
parameters: Option::None,
}
}

Expand Down Expand Up @@ -399,6 +401,7 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number, X: Array2<TX>, Y: Array1

Ok(RandomForestRegressor {
forest_regressor: Some(forest_regressor),
parameters: Some(parameters)
})
}

Expand All @@ -414,6 +417,15 @@ impl<TX: Number + FloatNumber + PartialOrd, TY: Number, X: Array2<TX>, Y: Array1
let forest_regressor = self.forest_regressor.as_ref().unwrap();
forest_regressor.predict_oob(x)
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &RandomForestRegressorParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
12 changes: 12 additions & 0 deletions src/linear/elastic_net.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ pub struct ElasticNetParameters {
pub struct ElasticNet<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>> {
coefficients: Option<X>,
intercept: Option<TX>,
parameters: Option<ElasticNetParameters>,
_phantom_ty: PhantomData<TY>,
_phantom_y: PhantomData<Y>,
}
Expand Down Expand Up @@ -288,6 +289,7 @@ impl<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>>
Self {
coefficients: Option::None,
intercept: Option::None,
parameters: Option::None,
_phantom_ty: PhantomData,
_phantom_y: PhantomData,
}
Expand Down Expand Up @@ -385,6 +387,7 @@ impl<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>>
Ok(ElasticNet {
intercept: Some(b),
coefficients: Some(w),
parameters: Some(parameters),
_phantom_ty: PhantomData,
_phantom_y: PhantomData,
})
Expand Down Expand Up @@ -459,6 +462,15 @@ impl<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>>

(x2, y2, gamma)
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &ElasticNetParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
12 changes: 12 additions & 0 deletions src/linear/lasso.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ pub struct LassoParameters {
pub struct Lasso<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>> {
coefficients: Option<X>,
intercept: Option<TX>,
parameters: Option<LassoParameters>,
_phantom_ty: PhantomData<TY>,
_phantom_y: PhantomData<Y>,
}
Expand Down Expand Up @@ -130,6 +131,7 @@ impl<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>>
Self {
coefficients: None,
intercept: None,
parameters: None,
_phantom_ty: PhantomData,
_phantom_y: PhantomData,
}
Expand Down Expand Up @@ -352,6 +354,7 @@ impl<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>> Las
Ok(Lasso {
intercept: b,
coefficients: Some(w),
parameters: Some(parameters),
_phantom_ty: PhantomData,
_phantom_y: PhantomData,
})
Expand Down Expand Up @@ -402,6 +405,15 @@ impl<TX: FloatNumber + RealNumber, TY: Number, X: Array2<TX>, Y: Array1<TY>> Las
scaled_x.scale_mut(&col_mean, &col_std, 0);
Ok((scaled_x, col_mean, col_std))
}

/// Getter for parameters used in the model
///
/// # Returns
/// Parameters used to setup the model
pub fn parameters(&self) -> &LassoParameters {
assert!(self.parameters.is_some());
&self.parameters.as_ref().unwrap()
}
}

#[cfg(test)]
Expand Down
Loading