fix: SVC: some more post-review refactoring
This commit is contained in:
+21
-11
@@ -468,7 +468,6 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
|||||||
idx_2: Option<usize>,
|
idx_2: Option<usize>,
|
||||||
cache: &mut Cache<T, M, K>,
|
cache: &mut Cache<T, M, K>,
|
||||||
) -> Option<(usize, usize, T)> {
|
) -> Option<(usize, usize, T)> {
|
||||||
|
|
||||||
match (idx_1, idx_2) {
|
match (idx_1, idx_2) {
|
||||||
(None, None) => {
|
(None, None) => {
|
||||||
if self.gmax > -self.gmin {
|
if self.gmax > -self.gmin {
|
||||||
@@ -476,7 +475,7 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
|||||||
} else {
|
} else {
|
||||||
self.select_pair(Some(self.svmin), None, cache)
|
self.select_pair(Some(self.svmin), None, cache)
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
(Some(idx_1), None) => {
|
(Some(idx_1), None) => {
|
||||||
let sv1 = &self.sv[idx_1];
|
let sv1 = &self.sv[idx_1];
|
||||||
let mut idx_2 = None;
|
let mut idx_2 = None;
|
||||||
@@ -493,7 +492,8 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
|||||||
curv = self.tau;
|
curv = self.tau;
|
||||||
}
|
}
|
||||||
let mu = z / curv;
|
let mu = z / curv;
|
||||||
if (mu > T::zero() && v.alpha < v.cmax) || (mu < T::zero() && v.alpha > v.cmin) {
|
if (mu > T::zero() && v.alpha < v.cmax) || (mu < T::zero() && v.alpha > v.cmin)
|
||||||
|
{
|
||||||
let gain = z * mu;
|
let gain = z * mu;
|
||||||
if gain > best {
|
if gain > best {
|
||||||
best = gain;
|
best = gain;
|
||||||
@@ -504,9 +504,13 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
|||||||
}
|
}
|
||||||
|
|
||||||
idx_2.map(|idx_2| {
|
idx_2.map(|idx_2| {
|
||||||
(idx_1, idx_2, k_v_12.unwrap_or(self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)))
|
(
|
||||||
|
idx_1,
|
||||||
|
idx_2,
|
||||||
|
k_v_12.unwrap_or(self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
},
|
}
|
||||||
(None, Some(idx_2)) => {
|
(None, Some(idx_2)) => {
|
||||||
let mut idx_1 = None;
|
let mut idx_1 = None;
|
||||||
let sv2 = &self.sv[idx_2];
|
let sv2 = &self.sv[idx_2];
|
||||||
@@ -524,7 +528,8 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mu = z / curv;
|
let mu = z / curv;
|
||||||
if (mu > T::zero() && v.alpha > v.cmin) || (mu < T::zero() && v.alpha < v.cmax) {
|
if (mu > T::zero() && v.alpha > v.cmin) || (mu < T::zero() && v.alpha < v.cmax)
|
||||||
|
{
|
||||||
let gain = z * mu;
|
let gain = z * mu;
|
||||||
if gain > best {
|
if gain > best {
|
||||||
best = gain;
|
best = gain;
|
||||||
@@ -535,14 +540,19 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
|||||||
}
|
}
|
||||||
|
|
||||||
idx_1.map(|idx_1| {
|
idx_1.map(|idx_1| {
|
||||||
(idx_1, idx_2, k_v_12.unwrap_or(self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)))
|
(
|
||||||
|
idx_1,
|
||||||
|
idx_2,
|
||||||
|
k_v_12.unwrap_or(self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
},
|
|
||||||
(Some(idx_1), Some(idx_2)) => {
|
|
||||||
Some((idx_1, idx_2, self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)))
|
|
||||||
}
|
}
|
||||||
|
(Some(idx_1), Some(idx_2)) => Some((
|
||||||
|
idx_1,
|
||||||
|
idx_2,
|
||||||
|
self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x),
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn smo(
|
fn smo(
|
||||||
|
|||||||
Reference in New Issue
Block a user