From 6066f3aa8d50f467b694adbd1e48f5d521714ec0 Mon Sep 17 00:00:00 2001 From: Mohammed Al-Eiadeh <93108547+Mohammed-Ryiad-Eiadeh@users.noreply.github.com> Date: Fri, 21 Apr 2023 23:38:07 +0300 Subject: [PATCH 01/39] Add files via upload --- .../Discreeting/Binarizing.java | 23 ++ .../Discreeting/TransferFunction.java | 8 + .../Optimizers/CuckooSearchOptimizer.java | 196 ++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/Binarizing.java create mode 100644 Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/TransferFunction.java create mode 100644 Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Optimizers/CuckooSearchOptimizer.java diff --git a/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/Binarizing.java b/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/Binarizing.java new file mode 100644 index 000000000..2a2dc61a0 --- /dev/null +++ b/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/Binarizing.java @@ -0,0 +1,23 @@ +package FS_Wrapper_Approaches.Discreeting; + +import static org.apache.commons.math3.special.Erf.erf; + +/** + * This interface includes a static method that is utilized to convert continuous value to binary one + */ +public interface Binarizing { + /** + * This method used to convert continuous values to binary ones + * @param TF is the type (id) of the transfer function + * @param Value is the continuous value to be converted + * @return return the converted value based on the selected function + */ + static int discreteValue(TransferFunction TF, double Value) { + return switch (TF) { + case TFunction_V1 -> Math.abs(erf(Math.sqrt(Math.PI) / 2 * Value)) >= 0.5 ? 1 : 0; + case TFunction_V2 -> Math.abs(Math.tan(Value)) >= 0.5 ? 1 : 0; + case TFunction_V3 -> Math.abs(Value / Math.abs(1 + Math.pow(Value, 2))) >= 0.5 ? 1 : 0; + case TFunction_V4 -> Math.abs(2 / Math.PI * Math.atan(Math.PI / 2 * Value)) >= 0.5 ? 1 : 0; + }; + } +} diff --git a/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/TransferFunction.java b/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/TransferFunction.java new file mode 100644 index 000000000..8207130d9 --- /dev/null +++ b/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Discreeting/TransferFunction.java @@ -0,0 +1,8 @@ +package FS_Wrapper_Approaches.Discreeting; + +/** + * Enumeration that contains the types of transfer functions in which they are used to define the type of transfer function + */ +public enum TransferFunction { + TFunction_V1, TFunction_V2, TFunction_V3, TFunction_V4 +} diff --git a/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Optimizers/CuckooSearchOptimizer.java b/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Optimizers/CuckooSearchOptimizer.java new file mode 100644 index 000000000..6c5b883f4 --- /dev/null +++ b/Classification/FeatureSelection/src/main/java/org/tribuo/classification/fs/FS_Wrapper_Approaches/Optimizers/CuckooSearchOptimizer.java @@ -0,0 +1,196 @@ +package FS_Wrapper_Approaches.Optimizers; + +import FS_Wrapper_Approaches.Discreeting.Binarizing; +import FS_Wrapper_Approaches.Discreeting.TransferFunction; +import com.oracle.labs.mlrg.olcut.util.Pair; +import org.tribuo.*; +import org.tribuo.classification.Label; +import org.tribuo.classification.evaluation.LabelEvaluation; +import org.tribuo.classification.evaluation.LabelEvaluator; +import org.tribuo.common.nearest.KNNClassifierOptions; +import org.tribuo.dataset.SelectedFeatureDataset; +import org.tribuo.evaluation.CrossValidation; +import org.tribuo.provenance.FeatureSelectorProvenance; +import org.tribuo.provenance.FeatureSetProvenance; +import org.tribuo.provenance.impl.FeatureSelectorProvenanceImpl; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.IntStream; + +/** + * Select features based on Cuckoo Search algorithm with binary transfer functions, KNN classifier and 10-fold cross validation + *

+ * see: + *

+ * Xin-She Yang and Suash Deb.
+ * "Cuckoo Search via L´evy Flights", 2010.
+ *
+ * L. A. M. Pereira et al.
+ * "A Binary Cuckoo Search and its Application for Feature Selection", 2014.
+ * 
+ */ +public class CuckooSearchOptimizer implements FeatureSelector