diff --git a/src/svm/search/mod.rs b/src/svm/search/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/svm/svc_gridsearch.rs b/src/svm/search/svc_params.rs similarity index 100% rename from src/svm/svc_gridsearch.rs rename to src/svm/search/svc_params.rs diff --git a/src/svm/search/svr_params.rs b/src/svm/search/svr_params.rs new file mode 100644 index 0000000..48d18ae --- /dev/null +++ b/src/svm/search/svr_params.rs @@ -0,0 +1,112 @@ +// /// SVR grid search parameters +// #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +// #[derive(Debug, Clone)] +// pub struct SVRSearchParameters, K: Kernel> { +// /// Epsilon in the epsilon-SVR model. +// pub eps: Vec, +// /// Regularization parameter. +// pub c: Vec, +// /// Tolerance for stopping eps. +// pub tol: Vec, +// /// The kernel function. +// pub kernel: Vec, +// /// Unused parameter. +// m: PhantomData, +// } + +// /// SVR grid search iterator +// pub struct SVRSearchParametersIterator, K: Kernel> { +// svr_search_parameters: SVRSearchParameters, +// current_eps: usize, +// current_c: usize, +// current_tol: usize, +// current_kernel: usize, +// } + +// impl, K: Kernel> IntoIterator +// for SVRSearchParameters +// { +// type Item = SVRParameters; +// type IntoIter = SVRSearchParametersIterator; + +// fn into_iter(self) -> Self::IntoIter { +// SVRSearchParametersIterator { +// svr_search_parameters: self, +// current_eps: 0, +// current_c: 0, +// current_tol: 0, +// current_kernel: 0, +// } +// } +// } + +// impl, K: Kernel> Iterator +// for SVRSearchParametersIterator +// { +// type Item = SVRParameters; + +// fn next(&mut self) -> Option { +// if self.current_eps == self.svr_search_parameters.eps.len() +// && self.current_c == self.svr_search_parameters.c.len() +// && self.current_tol == self.svr_search_parameters.tol.len() +// && self.current_kernel == self.svr_search_parameters.kernel.len() +// { +// return None; +// } + +// let next = SVRParameters:: { +// eps: self.svr_search_parameters.eps[self.current_eps], +// c: self.svr_search_parameters.c[self.current_c], +// tol: self.svr_search_parameters.tol[self.current_tol], +// kernel: self.svr_search_parameters.kernel[self.current_kernel].clone(), +// m: PhantomData, +// }; + +// if self.current_eps + 1 < self.svr_search_parameters.eps.len() { +// self.current_eps += 1; +// } else if self.current_c + 1 < self.svr_search_parameters.c.len() { +// self.current_eps = 0; +// self.current_c += 1; +// } else if self.current_tol + 1 < self.svr_search_parameters.tol.len() { +// self.current_eps = 0; +// self.current_c = 0; +// self.current_tol += 1; +// } else if self.current_kernel + 1 < self.svr_search_parameters.kernel.len() { +// self.current_eps = 0; +// self.current_c = 0; +// self.current_tol = 0; +// self.current_kernel += 1; +// } else { +// self.current_eps += 1; +// self.current_c += 1; +// self.current_tol += 1; +// self.current_kernel += 1; +// } + +// Some(next) +// } +// } + +// impl> Default for SVRSearchParameters { +// fn default() -> Self { +// let default_params: SVRParameters = SVRParameters::default(); + +// SVRSearchParameters { +// eps: vec![default_params.eps], +// c: vec![default_params.c], +// tol: vec![default_params.tol], +// kernel: vec![default_params.kernel], +// m: PhantomData, +// } +// } +// } + +// #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +// #[derive(Debug)] +// #[cfg_attr( +// feature = "serde", +// serde(bound( +// serialize = "M::RowVector: Serialize, K: Serialize, T: Serialize", +// deserialize = "M::RowVector: Deserialize<'de>, K: Deserialize<'de>, T: Deserialize<'de>", +// )) +// )] \ No newline at end of file diff --git a/src/svm/svr.rs b/src/svm/svr.rs index 14180e4..bbd813b 100644 --- a/src/svm/svr.rs +++ b/src/svm/svr.rs @@ -97,119 +97,6 @@ pub struct SVRParameters<'a, T: Number + RealNumber> { pub kernel: Option<&'a dyn Kernel<'a>>, } -// /// SVR grid search parameters -// #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -// #[derive(Debug, Clone)] -// pub struct SVRSearchParameters, K: Kernel> { -// /// Epsilon in the epsilon-SVR model. -// pub eps: Vec, -// /// Regularization parameter. -// pub c: Vec, -// /// Tolerance for stopping eps. -// pub tol: Vec, -// /// The kernel function. -// pub kernel: Vec, -// /// Unused parameter. -// m: PhantomData, -// } - -// /// SVR grid search iterator -// pub struct SVRSearchParametersIterator, K: Kernel> { -// svr_search_parameters: SVRSearchParameters, -// current_eps: usize, -// current_c: usize, -// current_tol: usize, -// current_kernel: usize, -// } - -// impl, K: Kernel> IntoIterator -// for SVRSearchParameters -// { -// type Item = SVRParameters; -// type IntoIter = SVRSearchParametersIterator; - -// fn into_iter(self) -> Self::IntoIter { -// SVRSearchParametersIterator { -// svr_search_parameters: self, -// current_eps: 0, -// current_c: 0, -// current_tol: 0, -// current_kernel: 0, -// } -// } -// } - -// impl, K: Kernel> Iterator -// for SVRSearchParametersIterator -// { -// type Item = SVRParameters; - -// fn next(&mut self) -> Option { -// if self.current_eps == self.svr_search_parameters.eps.len() -// && self.current_c == self.svr_search_parameters.c.len() -// && self.current_tol == self.svr_search_parameters.tol.len() -// && self.current_kernel == self.svr_search_parameters.kernel.len() -// { -// return None; -// } - -// let next = SVRParameters:: { -// eps: self.svr_search_parameters.eps[self.current_eps], -// c: self.svr_search_parameters.c[self.current_c], -// tol: self.svr_search_parameters.tol[self.current_tol], -// kernel: self.svr_search_parameters.kernel[self.current_kernel].clone(), -// m: PhantomData, -// }; - -// if self.current_eps + 1 < self.svr_search_parameters.eps.len() { -// self.current_eps += 1; -// } else if self.current_c + 1 < self.svr_search_parameters.c.len() { -// self.current_eps = 0; -// self.current_c += 1; -// } else if self.current_tol + 1 < self.svr_search_parameters.tol.len() { -// self.current_eps = 0; -// self.current_c = 0; -// self.current_tol += 1; -// } else if self.current_kernel + 1 < self.svr_search_parameters.kernel.len() { -// self.current_eps = 0; -// self.current_c = 0; -// self.current_tol = 0; -// self.current_kernel += 1; -// } else { -// self.current_eps += 1; -// self.current_c += 1; -// self.current_tol += 1; -// self.current_kernel += 1; -// } - -// Some(next) -// } -// } - -// impl> Default for SVRSearchParameters { -// fn default() -> Self { -// let default_params: SVRParameters = SVRParameters::default(); - -// SVRSearchParameters { -// eps: vec![default_params.eps], -// c: vec![default_params.c], -// tol: vec![default_params.tol], -// kernel: vec![default_params.kernel], -// m: PhantomData, -// } -// } -// } - -// #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -// #[derive(Debug)] -// #[cfg_attr( -// feature = "serde", -// serde(bound( -// serialize = "M::RowVector: Serialize, K: Serialize, T: Serialize", -// deserialize = "M::RowVector: Deserialize<'de>, K: Deserialize<'de>, T: Deserialize<'de>", -// )) -// )] - /// Epsilon-Support Vector Regression pub struct SVR<'a, T: Number + RealNumber, X: Array2, Y: Array1> { instances: Option>>,