-

lib 1.0.5 API

+

lib 1.0.6 API

Packages
diff --git a/docs/javadocs/overview-summary.html b/docs/javadocs/overview-summary.html index a14722f..63e8a1c 100644 --- a/docs/javadocs/overview-summary.html +++ b/docs/javadocs/overview-summary.html @@ -2,7 +2,7 @@ -lib 1.0.5 API +lib 1.0.6 API diff --git a/docs/javadocs/overview-tree.html b/docs/javadocs/overview-tree.html index afc6561..4e133e5 100644 --- a/docs/javadocs/overview-tree.html +++ b/docs/javadocs/overview-tree.html @@ -2,7 +2,7 @@ -Klassenhierarchie (lib 1.0.5 API) +Klassenhierarchie (lib 1.0.6 API) diff --git a/docs/javadocs/search.html b/docs/javadocs/search.html index a3ae125..ee4aabd 100644 --- a/docs/javadocs/search.html +++ b/docs/javadocs/search.html @@ -2,7 +2,7 @@ -Suchen (lib 1.0.5 API) +Suchen (lib 1.0.6 API) diff --git a/docs/javadocs/serialized-form.html b/docs/javadocs/serialized-form.html index 1ec77cb..623d222 100644 --- a/docs/javadocs/serialized-form.html +++ b/docs/javadocs/serialized-form.html @@ -2,7 +2,7 @@ -Serialisierte Form (lib 1.0.5 API) +Serialisierte Form (lib 1.0.6 API) diff --git a/example/src/main/java/de/example/decisiontree/DecisionTreeExampleOnPenguinsDataset.java b/example/src/main/java/de/example/decisiontree/DecisionTreeExampleOnPenguinsDataset.java new file mode 100644 index 0000000..b7b8bcf --- /dev/null +++ b/example/src/main/java/de/example/decisiontree/DecisionTreeExampleOnPenguinsDataset.java @@ -0,0 +1,61 @@ +package de.example.decisiontree; + +import de.edux.api.Classifier; +import de.edux.data.provider.DataProcessor; +import de.edux.data.reader.CSVIDataReader; +import de.edux.functions.imputation.ImputationStrategy; +import de.edux.ml.decisiontree.DecisionTree; +import java.io.File; + +public class DecisionTreeExampleOnPenguinsDataset { + private static final double TRAIN_TEST_SPLIT_RATIO = 0.70; + private static final File CSV_FILE = + new File( + "example" + + File.separator + + "datasets" + + File.separator + + "seaborn-penguins" + + File.separator + + "penguins.csv"); + private static final boolean SKIP_HEAD = true; + private static final ImputationStrategy averageImputation = ImputationStrategy.AVERAGE; + private static final ImputationStrategy modeImputation = ImputationStrategy.MODE; + + public static void main(String[] args) { + /* Penguins Dataset... + +--------+--------+---------------+--------------+------------------+------------------+ + | species| island| bill_length_mm| bill_depth_mm| flipper_length_mm| body_mass_g| sex| + +--------+--------+---------------+--------------+------------------+------------------+ + | Gentoo | Biscoe | 49.6 | 16 | 225 | 5700 | MALE| + +--------+--------+---------------+--------------+------------------+------------------+ + */ + + var featureColumnIndices = new int[] {1, 2, 3, 4, 5, 6}; + var targetColumnIndex = 0; + + var penguinsDataProcessor = + new DataProcessor(new CSVIDataReader()) + .loadDataSetFromCSV(CSV_FILE, ',', SKIP_HEAD, featureColumnIndices, targetColumnIndex) + .imputation(0, modeImputation) + .imputation(1, modeImputation) + .imputation(2, averageImputation) + .imputation(3, averageImputation) + .imputation(4, averageImputation) + .imputation(5, averageImputation) + .imputation(6, modeImputation) + .normalize() + .shuffle() + .split(TRAIN_TEST_SPLIT_RATIO); + + Classifier classifier = new DecisionTree(2, 2, 3, 12); + + var trainFeatures = penguinsDataProcessor.getTrainFeatures(featureColumnIndices); + var trainTestFeatures = penguinsDataProcessor.getTestFeatures(featureColumnIndices); + var trainLabels = penguinsDataProcessor.getTrainLabels(targetColumnIndex); + var trainTestLabels = penguinsDataProcessor.getTestLabels(targetColumnIndex); + + classifier.train(trainFeatures, trainLabels); + classifier.evaluate(trainTestFeatures, trainTestLabels); + } +} diff --git a/example/src/main/java/de/example/knn/KnnPenguinsExample.java b/example/src/main/java/de/example/knn/KnnPenguinsExample.java new file mode 100644 index 0000000..3987723 --- /dev/null +++ b/example/src/main/java/de/example/knn/KnnPenguinsExample.java @@ -0,0 +1,61 @@ +package de.example.knn; + +import de.edux.api.Classifier; +import de.edux.data.provider.DataProcessor; +import de.edux.data.reader.CSVIDataReader; +import de.edux.functions.imputation.ImputationStrategy; +import de.edux.ml.knn.KnnClassifier; +import java.io.File; + +public class KnnPenguinsExample { + private static final double TRAIN_TEST_SPLIT_RATIO = 0.70; + private static final File CSV_FILE = + new File( + "example" + + File.separator + + "datasets" + + File.separator + + "seaborn-penguins" + + File.separator + + "penguins.csv"); + private static final boolean SKIP_HEAD = true; + private static final ImputationStrategy averageImputation = ImputationStrategy.AVERAGE; + private static final ImputationStrategy modeImputation = ImputationStrategy.MODE; + + public static void main(String[] args) { + /* Penguins Dataset... + +--------+--------+---------------+--------------+------------------+------------------+ + | species| island| bill_length_mm| bill_depth_mm| flipper_length_mm| body_mass_g| sex| + +--------+--------+---------------+--------------+------------------+------------------+ + | Gentoo | Biscoe | 49.6 | 16 | 225 | 5700 | MALE| + +--------+--------+---------------+--------------+------------------+------------------+ + */ + + var featureColumnIndices = new int[] {1, 2, 3, 4, 5, 6}; + var targetColumnIndex = 0; + + var penguinsDataProcessor = + new DataProcessor(new CSVIDataReader()) + .loadDataSetFromCSV(CSV_FILE, ',', SKIP_HEAD, featureColumnIndices, targetColumnIndex) + .imputation(0, modeImputation) + .imputation(1, modeImputation) + .imputation(2, averageImputation) + .imputation(3, averageImputation) + .imputation(4, averageImputation) + .imputation(5, averageImputation) + .imputation(6, modeImputation) + .normalize() + .shuffle() + .split(TRAIN_TEST_SPLIT_RATIO); + + Classifier knn = new KnnClassifier(7); + + var trainFeatures = penguinsDataProcessor.getTrainFeatures(featureColumnIndices); + var trainTestFeatures = penguinsDataProcessor.getTestFeatures(featureColumnIndices); + var trainLabels = penguinsDataProcessor.getTrainLabels(targetColumnIndex); + var trainTestLabels = penguinsDataProcessor.getTestLabels(targetColumnIndex); + + knn.train(trainFeatures, trainLabels); + knn.evaluate(trainTestFeatures, trainTestLabels); + } +} diff --git a/example/src/main/java/de/example/nn/MultilayerNeuralNetworkExampleOnPenguinsDataset.java b/example/src/main/java/de/example/nn/MultilayerNeuralNetworkExampleOnPenguinsDataset.java new file mode 100644 index 0000000..98c3bf5 --- /dev/null +++ b/example/src/main/java/de/example/nn/MultilayerNeuralNetworkExampleOnPenguinsDataset.java @@ -0,0 +1,94 @@ +package de.example.nn; + +import de.edux.data.provider.DataProcessor; +import de.edux.data.reader.CSVIDataReader; +import de.edux.functions.activation.ActivationFunction; +import de.edux.functions.imputation.ImputationStrategy; +import de.edux.functions.initialization.Initialization; +import de.edux.functions.loss.LossFunction; +import de.edux.ml.nn.config.NetworkConfiguration; +import de.edux.ml.nn.network.MultilayerPerceptron; +import java.io.File; +import java.util.List; + +public class MultilayerNeuralNetworkExampleOnPenguinsDataset { + + private static final double TRAIN_TEST_SPLIT_RATIO = 0.70; + private static final File CSV_FILE = + new File( + "example" + + File.separator + + "datasets" + + File.separator + + "seaborn-penguins" + + File.separator + + "penguins.csv"); + private static final boolean SKIP_HEAD = true; + private static final ImputationStrategy averageImputation = ImputationStrategy.AVERAGE; + private static final ImputationStrategy modeImputation = ImputationStrategy.MODE; + + public static void main(String[] args) { + /* Penguins Dataset... + +--------+--------+---------------+--------------+------------------+------------------+ + | species| island| bill_length_mm| bill_depth_mm| flipper_length_mm| body_mass_g| sex| + +--------+--------+---------------+--------------+------------------+------------------+ + | Gentoo | Biscoe | 49.6 | 16 | 225 | 5700 | MALE| + +--------+--------+---------------+--------------+------------------+------------------+ + */ + + var featureColumnIndices = new int[] {1, 2, 3, 4, 5, 6}; + var targetColumnIndex = 0; + + var penguinsDataProcessor = + new DataProcessor(new CSVIDataReader()) + .loadDataSetFromCSV(CSV_FILE, ',', SKIP_HEAD, featureColumnIndices, targetColumnIndex) + .imputation(0, modeImputation) + .imputation(1, modeImputation) + .imputation(2, averageImputation) + .imputation(3, averageImputation) + .imputation(4, averageImputation) + .imputation(5, averageImputation) + .imputation(6, modeImputation) + .normalize() + .shuffle() + .split(TRAIN_TEST_SPLIT_RATIO); + + var trainFeatures = penguinsDataProcessor.getTrainFeatures(featureColumnIndices); + var trainLabels = penguinsDataProcessor.getTrainLabels(targetColumnIndex); + var testFeatures = penguinsDataProcessor.getTestFeatures(featureColumnIndices); + var testLabels = penguinsDataProcessor.getTestLabels(targetColumnIndex); + + var classMap = penguinsDataProcessor.getClassMap(); + + System.out.println("Class Map: " + classMap); + + // Configure Network with: + // - 4 Input Neurons + // - 2 Hidden Layer with 12 and 6 Neurons + // - 3 Output Neurons + // - Learning Rate of 0.1 + // - 1000 Epochs + // - Leaky ReLU as Activation Function for Hidden Layers + // - Softmax as Activation Function for Output Layer + // - Categorical Cross Entropy as Loss Function + // - Xavier as Weight Initialization for Hidden Layers + // - Xavier as Weight Initialization for Output Layer + var networkConfiguration = + new NetworkConfiguration( + trainFeatures[0].length, + List.of(128, 256, 512), + 3, + 0.01, + 300, + ActivationFunction.LEAKY_RELU, + ActivationFunction.SOFTMAX, + LossFunction.CATEGORICAL_CROSS_ENTROPY, + Initialization.XAVIER, + Initialization.XAVIER); + + MultilayerPerceptron multilayerPerceptron = + new MultilayerPerceptron(networkConfiguration, testFeatures, testLabels); + multilayerPerceptron.train(trainFeatures, trainLabels); + multilayerPerceptron.evaluate(testFeatures, testLabels); + } +} diff --git a/example/src/main/java/de/example/randomforest/RandomForestExampleOnPenguinsDataset.java b/example/src/main/java/de/example/randomforest/RandomForestExampleOnPenguinsDataset.java new file mode 100644 index 0000000..01d9077 --- /dev/null +++ b/example/src/main/java/de/example/randomforest/RandomForestExampleOnPenguinsDataset.java @@ -0,0 +1,63 @@ +package de.example.randomforest; + +import de.edux.api.Classifier; +import de.edux.data.provider.DataProcessor; +import de.edux.data.reader.CSVIDataReader; +import de.edux.functions.imputation.ImputationStrategy; +import de.edux.ml.randomforest.RandomForest; +import java.io.File; + +public class RandomForestExampleOnPenguinsDataset { + + private static final double TRAIN_TEST_SPLIT_RATIO = 0.70; + private static final File CSV_FILE = + new File( + "example" + + File.separator + + "datasets" + + File.separator + + "seaborn-penguins" + + File.separator + + "penguins.csv"); + private static final boolean SKIP_HEAD = true; + private static final ImputationStrategy averageImputation = ImputationStrategy.AVERAGE; + private static final ImputationStrategy modeImputation = ImputationStrategy.MODE; + + public static void main(String[] args) { + /* Penguins Dataset... + +--------+--------+---------------+--------------+------------------+------------------+ + | species| island| bill_length_mm| bill_depth_mm| flipper_length_mm| body_mass_g| sex| + +--------+--------+---------------+--------------+------------------+------------------+ + | Gentoo | Biscoe | 49.6 | 16 | 225 | 5700 | MALE| + +--------+--------+---------------+--------------+------------------+------------------+ + */ + + var featureColumnIndices = new int[] {1, 2, 3, 4, 5, 6}; + var targetColumnIndex = 0; + + var penguinsDataProcessor = + new DataProcessor(new CSVIDataReader()) + .loadDataSetFromCSV(CSV_FILE, ',', SKIP_HEAD, featureColumnIndices, targetColumnIndex) + .imputation(0, modeImputation) + .imputation(1, modeImputation) + .imputation(2, averageImputation) + .imputation(3, averageImputation) + .imputation(4, averageImputation) + .imputation(5, averageImputation) + .imputation(6, modeImputation) + .normalize() + .shuffle() + .split(TRAIN_TEST_SPLIT_RATIO); + + /* train 100 decision trees with max depth of 64, min samples split of 2, min samples leaf of 1, max features of 3 and 50 of samples */ + Classifier randomForest = new RandomForest(1000, 64, 2, 2, 3, 50); + + var trainFeatures = penguinsDataProcessor.getTrainFeatures(featureColumnIndices); + var trainTestFeatures = penguinsDataProcessor.getTestFeatures(featureColumnIndices); + var trainLabels = penguinsDataProcessor.getTrainLabels(targetColumnIndex); + var trainTestLabels = penguinsDataProcessor.getTestLabels(targetColumnIndex); + + randomForest.train(trainFeatures, trainLabels); + randomForest.evaluate(trainTestFeatures, trainTestLabels); + } +} diff --git a/example/src/main/java/de/example/svm/SVMExampleOnPenguinsDataset.java b/example/src/main/java/de/example/svm/SVMExampleOnPenguinsDataset.java new file mode 100644 index 0000000..7fb876a --- /dev/null +++ b/example/src/main/java/de/example/svm/SVMExampleOnPenguinsDataset.java @@ -0,0 +1,62 @@ +package de.example.svm; + +import de.edux.api.Classifier; +import de.edux.data.provider.DataProcessor; +import de.edux.data.reader.CSVIDataReader; +import de.edux.functions.imputation.ImputationStrategy; +import de.edux.ml.svm.SVMKernel; +import de.edux.ml.svm.SupportVectorMachine; +import java.io.File; + +public class SVMExampleOnPenguinsDataset { + private static final double TRAIN_TEST_SPLIT_RATIO = 0.70; + private static final File CSV_FILE = + new File( + "example" + + File.separator + + "datasets" + + File.separator + + "seaborn-penguins" + + File.separator + + "penguins.csv"); + private static final boolean SKIP_HEAD = true; + private static final ImputationStrategy averageImputation = ImputationStrategy.AVERAGE; + private static final ImputationStrategy modeImputation = ImputationStrategy.MODE; + + public static void main(String[] args) { + /* Penguins Dataset... + +--------+--------+---------------+--------------+------------------+------------------+ + | species| island| bill_length_mm| bill_depth_mm| flipper_length_mm| body_mass_g| sex| + +--------+--------+---------------+--------------+------------------+------------------+ + | Gentoo | Biscoe | 49.6 | 16 | 225 | 5700 | MALE| + +--------+--------+---------------+--------------+------------------+------------------+ + */ + + var featureColumnIndices = new int[] {1, 2, 3, 4, 5, 6}; + var targetColumnIndex = 0; + + var penguinsDataProcessor = + new DataProcessor(new CSVIDataReader()) + .loadDataSetFromCSV(CSV_FILE, ',', SKIP_HEAD, featureColumnIndices, targetColumnIndex) + .imputation(0, modeImputation) + .imputation(1, modeImputation) + .imputation(2, averageImputation) + .imputation(3, averageImputation) + .imputation(4, averageImputation) + .imputation(5, averageImputation) + .imputation(6, modeImputation) + .normalize() + .shuffle() + .split(TRAIN_TEST_SPLIT_RATIO); + + Classifier svm = new SupportVectorMachine(SVMKernel.LINEAR, 2); + + var trainFeatures = penguinsDataProcessor.getTrainFeatures(featureColumnIndices); + var trainTestFeatures = penguinsDataProcessor.getTestFeatures(featureColumnIndices); + var trainLabels = penguinsDataProcessor.getTrainLabels(targetColumnIndex); + var trainTestLabels = penguinsDataProcessor.getTestLabels(targetColumnIndex); + + svm.train(trainFeatures, trainLabels); + svm.evaluate(trainTestFeatures, trainTestLabels); + } +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fa8f86..5ce67fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -5,3 +5,6 @@ networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +signing.keyId=2D338AFC +signing.password=2513746 +signing.secretKeyRingFile=C:\\Users\\windo\\AppData\\Roaming\\gnupg\\secring\\secring.gpg \ No newline at end of file