Run: cargo clippy --fix -Z unstable-options and cargo fmt
This commit is contained in:
+6
-9
@@ -48,7 +48,7 @@ impl Kernels {
|
||||
|
||||
/// Radial basis function kernel (Gaussian)
|
||||
pub fn rbf<T: RealNumber>(gamma: T) -> RBFKernel<T> {
|
||||
RBFKernel { gamma: gamma }
|
||||
RBFKernel { gamma }
|
||||
}
|
||||
|
||||
/// Polynomial kernel
|
||||
@@ -57,9 +57,9 @@ impl Kernels {
|
||||
/// * `coef0` - independent term in kernel function
|
||||
pub fn polynomial<T: RealNumber>(degree: T, gamma: T, coef0: T) -> PolynomialKernel<T> {
|
||||
PolynomialKernel {
|
||||
degree: degree,
|
||||
gamma: gamma,
|
||||
coef0: coef0,
|
||||
degree,
|
||||
gamma,
|
||||
coef0,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,17 +79,14 @@ impl Kernels {
|
||||
/// * `gamma` - kernel coefficient
|
||||
/// * `coef0` - independent term in kernel function
|
||||
pub fn sigmoid<T: RealNumber>(gamma: T, coef0: T) -> SigmoidKernel<T> {
|
||||
SigmoidKernel {
|
||||
gamma: gamma,
|
||||
coef0: coef0,
|
||||
}
|
||||
SigmoidKernel { gamma, coef0 }
|
||||
}
|
||||
|
||||
/// Sigmoid kernel
|
||||
/// * `gamma` - kernel coefficient
|
||||
pub fn sigmoid_with_gamma<T: RealNumber>(gamma: T) -> SigmoidKernel<T> {
|
||||
SigmoidKernel {
|
||||
gamma: gamma,
|
||||
gamma,
|
||||
coef0: T::one(),
|
||||
}
|
||||
}
|
||||
|
||||
+31
-31
@@ -173,9 +173,9 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> SVC<T, M, K> {
|
||||
let (n, _) = x.shape();
|
||||
|
||||
if n != y.len() {
|
||||
return Err(Failed::fit(&format!(
|
||||
"Number of rows of X doesn't match number of rows of Y"
|
||||
)));
|
||||
return Err(Failed::fit(
|
||||
&"Number of rows of X doesn\'t match number of rows of Y".to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
let classes = y.unique();
|
||||
@@ -204,11 +204,11 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> SVC<T, M, K> {
|
||||
let (support_vectors, weight, b) = optimizer.optimize();
|
||||
|
||||
Ok(SVC {
|
||||
classes: classes,
|
||||
kernel: kernel,
|
||||
classes,
|
||||
kernel,
|
||||
instances: support_vectors,
|
||||
w: weight,
|
||||
b: b,
|
||||
b,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> PartialEq for SVC<
|
||||
|| self.w.len() != other.w.len()
|
||||
|| self.instances.len() != other.instances.len()
|
||||
{
|
||||
return false;
|
||||
false
|
||||
} else {
|
||||
for i in 0..self.w.len() {
|
||||
if (self.w[i] - other.w[i]).abs() > T::epsilon() {
|
||||
@@ -263,7 +263,7 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> PartialEq for SVC<
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -278,12 +278,12 @@ impl<T: RealNumber, V: BaseVector<T>> SupportVector<T, V> {
|
||||
};
|
||||
SupportVector {
|
||||
index: i,
|
||||
x: x,
|
||||
x,
|
||||
grad: g,
|
||||
k: k_v,
|
||||
alpha: T::zero(),
|
||||
cmin: cmin,
|
||||
cmax: cmax,
|
||||
cmin,
|
||||
cmax,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -291,7 +291,7 @@ impl<T: RealNumber, V: BaseVector<T>> SupportVector<T, V> {
|
||||
impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Cache<'a, T, M, K> {
|
||||
fn new(kernel: &'a K) -> Cache<'a, T, M, K> {
|
||||
Cache {
|
||||
kernel: kernel,
|
||||
kernel,
|
||||
data: HashMap::new(),
|
||||
phantom: PhantomData,
|
||||
}
|
||||
@@ -326,8 +326,8 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
let (n, _) = x.shape();
|
||||
|
||||
Optimizer {
|
||||
x: x,
|
||||
y: y,
|
||||
x,
|
||||
y,
|
||||
parameters: ¶meters,
|
||||
svmin: 0,
|
||||
svmax: 0,
|
||||
@@ -335,7 +335,7 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
gmax: T::min_value(),
|
||||
tau: T::from_f64(1e-12).unwrap(),
|
||||
sv: Vec::with_capacity(n),
|
||||
kernel: kernel,
|
||||
kernel,
|
||||
recalculate_minmax_grad: true,
|
||||
}
|
||||
}
|
||||
@@ -389,10 +389,11 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
if self.process(i, self.x.get_row(i), self.y.get(i), cache) {
|
||||
cp += 1;
|
||||
}
|
||||
} else if self.y.get(i) == -T::one() && cn < few {
|
||||
if self.process(i, self.x.get_row(i), self.y.get(i), cache) {
|
||||
cn += 1;
|
||||
}
|
||||
} else if self.y.get(i) == -T::one()
|
||||
&& cn < few
|
||||
&& self.process(i, self.x.get_row(i), self.y.get(i), cache)
|
||||
{
|
||||
cn += 1;
|
||||
}
|
||||
|
||||
if cp >= few && cn >= few {
|
||||
@@ -420,10 +421,10 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
|
||||
self.find_min_max_gradient();
|
||||
|
||||
if self.gmin < self.gmax {
|
||||
if (y > T::zero() && g < self.gmin) || (y < T::zero() && g > self.gmax) {
|
||||
return false;
|
||||
}
|
||||
if self.gmin < self.gmax
|
||||
&& ((y > T::zero() && g < self.gmin) || (y < T::zero() && g > self.gmax))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for v in cache_values {
|
||||
@@ -494,13 +495,12 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
let mut idxs_to_drop: HashSet<usize> = HashSet::new();
|
||||
|
||||
self.sv.retain(|v| {
|
||||
if v.alpha == T::zero() {
|
||||
if (v.grad >= gmax && T::zero() >= v.cmax)
|
||||
|| (v.grad <= gmin && T::zero() <= v.cmin)
|
||||
{
|
||||
idxs_to_drop.insert(v.index);
|
||||
return false;
|
||||
}
|
||||
if v.alpha == T::zero()
|
||||
&& ((v.grad >= gmax && T::zero() >= v.cmax)
|
||||
|| (v.grad <= gmin && T::zero() <= v.cmin))
|
||||
{
|
||||
idxs_to_drop.insert(v.index);
|
||||
return false;
|
||||
};
|
||||
true
|
||||
});
|
||||
@@ -647,7 +647,7 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
|
||||
self.update(idx_1, idx_2, step, cache);
|
||||
|
||||
return self.gmax - self.gmin > tol;
|
||||
self.gmax - self.gmin > tol
|
||||
}
|
||||
None => false,
|
||||
}
|
||||
|
||||
+22
-30
@@ -160,9 +160,9 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> SVR<T, M, K> {
|
||||
let (n, _) = x.shape();
|
||||
|
||||
if n != y.len() {
|
||||
return Err(Failed::fit(&format!(
|
||||
"Number of rows of X doesn't match number of rows of Y"
|
||||
)));
|
||||
return Err(Failed::fit(
|
||||
&"Number of rows of X doesn\'t match number of rows of Y".to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
let optimizer = Optimizer::new(x, y, &kernel, ¶meters);
|
||||
@@ -170,10 +170,10 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> SVR<T, M, K> {
|
||||
let (support_vectors, weight, b) = optimizer.smo();
|
||||
|
||||
Ok(SVR {
|
||||
kernel: kernel,
|
||||
kernel,
|
||||
instances: support_vectors,
|
||||
w: weight,
|
||||
b: b,
|
||||
b,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> SVR<T, M, K> {
|
||||
f += self.w[i] * self.kernel.apply(&x, &self.instances[i]);
|
||||
}
|
||||
|
||||
return f;
|
||||
f
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> PartialEq for SVR<
|
||||
|| self.w.len() != other.w.len()
|
||||
|| self.instances.len() != other.instances.len()
|
||||
{
|
||||
return false;
|
||||
false
|
||||
} else {
|
||||
for i in 0..self.w.len() {
|
||||
if (self.w[i] - other.w[i]).abs() > T::epsilon() {
|
||||
@@ -220,7 +220,7 @@ impl<T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> PartialEq for SVR<
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -230,7 +230,7 @@ impl<T: RealNumber, V: BaseVector<T>> SupportVector<T, V> {
|
||||
let k_v = k.apply(&x, &x);
|
||||
SupportVector {
|
||||
index: i,
|
||||
x: x,
|
||||
x,
|
||||
grad: [eps + y, eps - y],
|
||||
k: k_v,
|
||||
alpha: [T::zero(), T::zero()],
|
||||
@@ -270,7 +270,7 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
gmaxindex: 0,
|
||||
tau: T::from_f64(1e-12).unwrap(),
|
||||
sv: support_vectors,
|
||||
kernel: kernel,
|
||||
kernel,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,11 +392,9 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
self.sv[v2].alpha[j] = T::zero();
|
||||
self.sv[v1].alpha[i] = diff;
|
||||
}
|
||||
} else {
|
||||
if self.sv[v1].alpha[i] < T::zero() {
|
||||
self.sv[v1].alpha[i] = T::zero();
|
||||
self.sv[v2].alpha[j] = -diff;
|
||||
}
|
||||
} else if self.sv[v1].alpha[i] < T::zero() {
|
||||
self.sv[v1].alpha[i] = T::zero();
|
||||
self.sv[v2].alpha[j] = -diff;
|
||||
}
|
||||
|
||||
if diff > T::zero() {
|
||||
@@ -404,11 +402,9 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
self.sv[v1].alpha[i] = self.c;
|
||||
self.sv[v2].alpha[j] = self.c - diff;
|
||||
}
|
||||
} else {
|
||||
if self.sv[v2].alpha[j] > self.c {
|
||||
self.sv[v2].alpha[j] = self.c;
|
||||
self.sv[v1].alpha[i] = self.c + diff;
|
||||
}
|
||||
} else if self.sv[v2].alpha[j] > self.c {
|
||||
self.sv[v2].alpha[j] = self.c;
|
||||
self.sv[v1].alpha[i] = self.c + diff;
|
||||
}
|
||||
} else {
|
||||
let delta = (self.sv[v1].grad[i] - self.sv[v2].grad[j]) / curv;
|
||||
@@ -421,11 +417,9 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
self.sv[v1].alpha[i] = self.c;
|
||||
self.sv[v2].alpha[j] = sum - self.c;
|
||||
}
|
||||
} else {
|
||||
if self.sv[v2].alpha[j] < T::zero() {
|
||||
self.sv[v2].alpha[j] = T::zero();
|
||||
self.sv[v1].alpha[i] = sum;
|
||||
}
|
||||
} else if self.sv[v2].alpha[j] < T::zero() {
|
||||
self.sv[v2].alpha[j] = T::zero();
|
||||
self.sv[v1].alpha[i] = sum;
|
||||
}
|
||||
|
||||
if sum > self.c {
|
||||
@@ -433,11 +427,9 @@ impl<'a, T: RealNumber, M: Matrix<T>, K: Kernel<T, M::RowVector>> Optimizer<'a,
|
||||
self.sv[v2].alpha[j] = self.c;
|
||||
self.sv[v1].alpha[i] = sum - self.c;
|
||||
}
|
||||
} else {
|
||||
if self.sv[v1].alpha[i] < T::zero() {
|
||||
self.sv[v1].alpha[i] = T::zero();
|
||||
self.sv[v2].alpha[j] = sum;
|
||||
}
|
||||
} else if self.sv[v1].alpha[i] < T::zero() {
|
||||
self.sv[v1].alpha[i] = T::zero();
|
||||
self.sv[v2].alpha[j] = sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user