diff --git a/src/ensemble/random_forest_classifier.rs b/src/ensemble/random_forest_classifier.rs index e1d462a..011b0ba 100644 --- a/src/ensemble/random_forest_classifier.rs +++ b/src/ensemble/random_forest_classifier.rs @@ -137,13 +137,13 @@ impl RandomForestClassifier { yi[i] = classes.iter().position(|c| yc == *c).unwrap(); } - let mtry = parameters.m.unwrap_or( + let mtry = parameters.m.unwrap_or_else(|| { (T::from(num_attributes).unwrap()) .sqrt() .floor() .to_usize() - .unwrap(), - ); + .unwrap() + }); let classes = y_m.unique(); let k = classes.len(); diff --git a/src/lib.rs b/src/lib.rs index 687becf..2142c8b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,7 +65,6 @@ //! ``` #![allow( - clippy::or_fun_call, clippy::needless_range_loop, clippy::ptr_arg, clippy::len_without_is_empty, diff --git a/src/metrics/cluster_hcv.rs b/src/metrics/cluster_hcv.rs index bdefc8d..29a9db2 100644 --- a/src/metrics/cluster_hcv.rs +++ b/src/metrics/cluster_hcv.rs @@ -24,8 +24,8 @@ impl HCVScore { let contingency = contingency_matrix(&labels_true, &labels_pred); let mi: T = mutual_info_score(&contingency); - let homogeneity = entropy_c.map(|e| mi / e).unwrap_or(T::one()); - let completeness = entropy_k.map(|e| mi / e).unwrap_or(T::one()); + let homogeneity = entropy_c.map(|e| mi / e).unwrap_or_else(T::one); + let completeness = entropy_k.map(|e| mi / e).unwrap_or_else(T::one); let v_measure_score = if homogeneity + completeness == T::zero() { T::zero() diff --git a/src/svm/svc.rs b/src/svm/svc.rs index 62a9e01..f2d518b 100644 --- a/src/svm/svc.rs +++ b/src/svm/svc.rs @@ -561,7 +561,9 @@ impl<'a, T: RealNumber, M: Matrix, K: Kernel> Optimizer<'a, ( idx_1, idx_2, - k_v_12.unwrap_or(self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)), + k_v_12.unwrap_or_else(|| { + self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x) + }), ) }) } @@ -597,7 +599,9 @@ impl<'a, T: RealNumber, M: Matrix, K: Kernel> Optimizer<'a, ( idx_1, idx_2, - k_v_12.unwrap_or(self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x)), + k_v_12.unwrap_or_else(|| { + self.kernel.apply(&self.sv[idx_1].x, &self.sv[idx_2].x) + }), ) }) } diff --git a/src/tree/decision_tree_classifier.rs b/src/tree/decision_tree_classifier.rs index 353c1bd..9fe1b1a 100644 --- a/src/tree/decision_tree_classifier.rs +++ b/src/tree/decision_tree_classifier.rs @@ -376,7 +376,8 @@ impl DecisionTreeClassifier { let node = &self.nodes[node_id]; if node.true_child == None && node.false_child == None { result = node.output; - } else if x.get(row, node.split_feature) <= node.split_value.unwrap_or(T::nan()) + } else if x.get(row, node.split_feature) + <= node.split_value.unwrap_or_else(T::nan) { queue.push_back(node.true_child.unwrap()); } else { @@ -529,7 +530,7 @@ impl DecisionTreeClassifier { for i in 0..n { if visitor.samples[i] > 0 { if visitor.x.get(i, self.nodes[visitor.node].split_feature) - <= self.nodes[visitor.node].split_value.unwrap_or(T::nan()) + <= self.nodes[visitor.node].split_value.unwrap_or_else(T::nan) { true_samples[i] = visitor.samples[i]; tc += true_samples[i]; diff --git a/src/tree/decision_tree_regressor.rs b/src/tree/decision_tree_regressor.rs index 39f3eb8..c30c9e2 100644 --- a/src/tree/decision_tree_regressor.rs +++ b/src/tree/decision_tree_regressor.rs @@ -282,7 +282,8 @@ impl DecisionTreeRegressor { let node = &self.nodes[node_id]; if node.true_child == None && node.false_child == None { result = node.output; - } else if x.get(row, node.split_feature) <= node.split_value.unwrap_or(T::nan()) + } else if x.get(row, node.split_feature) + <= node.split_value.unwrap_or_else(T::nan) { queue.push_back(node.true_child.unwrap()); } else { @@ -401,7 +402,7 @@ impl DecisionTreeRegressor { for i in 0..n { if visitor.samples[i] > 0 { if visitor.x.get(i, self.nodes[visitor.node].split_feature) - <= self.nodes[visitor.node].split_value.unwrap_or(T::nan()) + <= self.nodes[visitor.node].split_value.unwrap_or_else(T::nan) { true_samples[i] = visitor.samples[i]; tc += true_samples[i];