From 5e6dbce89b42e81f8fa46b5106a178b30cfbc5f9 Mon Sep 17 00:00:00 2001 From: Maximilian Wenk Date: Mon, 6 Mar 2023 08:34:06 +0100 Subject: [PATCH 1/3] confusion matrix --- Iris_unordered_2.csv | 151 ++++++++++++++++++ ...is_ordered - Copy.csv => Iris_ordered.csv} | 0 src/Iris_unordered_2.csv | 151 ++++++++++++++++++ src/Main.java | 2 +- .../ClassificationOfFloatValues.java | 6 +- src/classification/DATA_evaluation.java | 28 +++- .../DistanceClassification.java | 4 + 7 files changed, 333 insertions(+), 9 deletions(-) create mode 100644 Iris_unordered_2.csv rename src/{Iris_ordered - Copy.csv => Iris_ordered.csv} (100%) create mode 100644 src/Iris_unordered_2.csv diff --git a/Iris_unordered_2.csv b/Iris_unordered_2.csv new file mode 100644 index 0000000..121c3f0 --- /dev/null +++ b/Iris_unordered_2.csv @@ -0,0 +1,151 @@ +Id,SepalLengthCm,SepalWidthCm,PetalLengthCm,PetalWidthCm,Species +61,5.0,2.0,3.5,1.0,Iris-versicolor +63,6.0,2.2,4.0,1.0,Iris-versicolor +120,6.0,2.2,5.0,1.5,Iris-virginica +69,6.2,2.2,4.5,1.5,Iris-versicolor +42,4.5,2.3,1.3,0.3,Iris-setosa +94,5.0,2.3,3.3,1.0,Iris-versicolor +54,5.5,2.3,4.0,1.3,Iris-versicolor +88,6.3,2.3,4.4,1.3,Iris-versicolor +58,4.9,2.4,3.3,1.0,Iris-versicolor +82,5.5,2.4,3.7,1.0,Iris-versicolor +81,5.5,2.4,3.8,1.1,Iris-versicolor +99,5.1,2.5,3.0,1.1,Iris-versicolor +70,5.6,2.5,3.9,1.1,Iris-versicolor +90,5.5,2.5,4.0,1.3,Iris-versicolor +73,6.3,2.5,4.9,1.5,Iris-versicolor +107,4.9,2.5,4.5,1.7,Iris-virginica +109,6.7,2.5,5.8,1.8,Iris-virginica +147,6.3,2.5,5.0,1.9,Iris-virginica +114,5.7,2.5,5.0,2.0,Iris-virginica +80,5.7,2.6,3.5,1.0,Iris-versicolor +91,5.5,2.6,4.4,1.2,Iris-versicolor +93,5.8,2.6,4.0,1.2,Iris-versicolor +135,6.1,2.6,5.6,1.4,Iris-virginica +119,7.7,2.6,6.9,2.3,Iris-virginica +68,5.8,2.7,4.1,1.0,Iris-versicolor +83,5.8,2.7,3.9,1.2,Iris-versicolor +95,5.6,2.7,4.2,1.3,Iris-versicolor +60,5.2,2.7,3.9,1.4,Iris-versicolor +84,6.0,2.7,5.1,1.6,Iris-versicolor +124,6.3,2.7,4.9,1.8,Iris-virginica +102,5.8,2.7,5.1,1.9,Iris-virginica +143,5.8,2.7,5.1,1.9,Iris-virginica +112,6.4,2.7,5.3,1.9,Iris-virginica +74,6.1,2.8,4.7,1.2,Iris-versicolor +56,5.7,2.8,4.5,1.3,Iris-versicolor +100,5.7,2.8,4.1,1.3,Iris-versicolor +72,6.1,2.8,4.0,1.3,Iris-versicolor +77,6.8,2.8,4.8,1.4,Iris-versicolor +134,6.3,2.8,5.1,1.5,Iris-virginica +55,6.5,2.8,4.6,1.5,Iris-versicolor +127,6.2,2.8,4.8,1.8,Iris-virginica +131,7.4,2.8,6.1,1.9,Iris-virginica +122,5.6,2.8,4.9,2.0,Iris-virginica +123,7.7,2.8,6.7,2.0,Iris-virginica +129,6.4,2.8,5.6,2.1,Iris-virginica +133,6.4,2.8,5.6,2.2,Iris-virginica +115,5.8,2.8,5.1,2.4,Iris-virginica +9,4.4,2.9,1.4,0.2,Iris-setosa +65,5.6,2.9,3.6,1.3,Iris-versicolor +97,5.7,2.9,4.2,1.3,Iris-versicolor +98,6.2,2.9,4.3,1.3,Iris-versicolor +75,6.4,2.9,4.3,1.3,Iris-versicolor +59,6.6,2.9,4.6,1.3,Iris-versicolor +64,6.1,2.9,4.7,1.4,Iris-versicolor +79,6.0,2.9,4.5,1.5,Iris-versicolor +104,6.3,2.9,5.6,1.8,Iris-virginica +108,7.3,2.9,6.3,1.8,Iris-virginica +14,4.3,3.0,1.1,0.1,Iris-setosa +13,4.8,3.0,1.4,0.1,Iris-setosa +39,4.4,3.0,1.3,0.2,Iris-setosa +2,4.9,3.0,1.4,0.2,Iris-setosa +26,5.0,3.0,1.6,0.2,Iris-setosa +46,4.8,3.0,1.4,0.3,Iris-setosa +96,5.7,3.0,4.2,1.2,Iris-versicolor +89,5.6,3.0,4.1,1.3,Iris-versicolor +92,6.1,3.0,4.6,1.4,Iris-versicolor +76,6.6,3.0,4.4,1.4,Iris-versicolor +85,5.4,3.0,4.5,1.5,Iris-versicolor +67,5.6,3.0,4.5,1.5,Iris-versicolor +62,5.9,3.0,4.2,1.5,Iris-versicolor +130,7.2,3.0,5.8,1.6,Iris-virginica +78,6.7,3.0,5.0,1.7,Iris-versicolor +150,5.9,3.0,5.1,1.8,Iris-virginica +139,6.0,3.0,4.8,1.8,Iris-virginica +128,6.1,3.0,4.9,1.8,Iris-virginica +117,6.5,3.0,5.5,1.8,Iris-virginica +148,6.5,3.0,5.2,2.0,Iris-virginica +113,6.8,3.0,5.5,2.1,Iris-virginica +103,7.1,3.0,5.9,2.1,Iris-virginica +106,7.6,3.0,6.6,2.1,Iris-virginica +105,6.5,3.0,5.8,2.2,Iris-virginica +146,6.7,3.0,5.2,2.3,Iris-virginica +136,7.7,3.0,6.1,2.3,Iris-virginica +10,4.9,3.1,1.5,0.1,Iris-setosa +35,4.9,3.1,1.5,0.1,Iris-setosa +38,4.9,3.1,1.5,0.1,Iris-setosa +4,4.6,3.1,1.5,0.2,Iris-setosa +31,4.8,3.1,1.6,0.2,Iris-setosa +66,6.7,3.1,4.4,1.4,Iris-versicolor +87,6.7,3.1,4.7,1.5,Iris-versicolor +53,6.9,3.1,4.9,1.5,Iris-versicolor +138,6.4,3.1,5.5,1.8,Iris-virginica +140,6.9,3.1,5.4,2.1,Iris-virginica +142,6.9,3.1,5.1,2.3,Iris-virginica +141,6.7,3.1,5.6,2.4,Iris-virginica +43,4.4,3.2,1.3,0.2,Iris-setosa +48,4.6,3.2,1.4,0.2,Iris-setosa +3,4.7,3.2,1.3,0.2,Iris-setosa +30,4.7,3.2,1.6,0.2,Iris-setosa +36,5.0,3.2,1.2,0.2,Iris-setosa +51,7.0,3.2,4.7,1.4,Iris-versicolor +52,6.4,3.2,4.5,1.5,Iris-versicolor +71,5.9,3.2,4.8,1.8,Iris-versicolor +126,7.2,3.2,6.0,1.8,Iris-virginica +111,6.5,3.2,5.1,2.0,Iris-virginica +116,6.4,3.2,5.3,2.3,Iris-virginica +144,6.8,3.2,5.9,2.3,Iris-virginica +121,6.9,3.2,5.7,2.3,Iris-virginica +50,5.0,3.3,1.4,0.2,Iris-setosa +24,5.1,3.3,1.7,0.5,Iris-setosa +57,6.3,3.3,4.7,1.6,Iris-versicolor +125,6.7,3.3,5.7,2.1,Iris-virginica +101,6.3,3.3,6.0,2.5,Iris-virginica +145,6.7,3.3,5.7,2.5,Iris-virginica +12,4.8,3.4,1.6,0.2,Iris-setosa +25,4.8,3.4,1.9,0.2,Iris-setosa +8,5.0,3.4,1.5,0.2,Iris-setosa +40,5.1,3.4,1.5,0.2,Iris-setosa +29,5.2,3.4,1.4,0.2,Iris-setosa +21,5.4,3.4,1.7,0.2,Iris-setosa +7,4.6,3.4,1.4,0.3,Iris-setosa +27,5.0,3.4,1.6,0.4,Iris-setosa +32,5.4,3.4,1.5,0.4,Iris-setosa +86,6.0,3.4,4.5,1.6,Iris-versicolor +149,6.2,3.4,5.4,2.3,Iris-virginica +137,6.3,3.4,5.6,2.4,Iris-virginica +1,5.1,3.5,1.4,0.2,Iris-setosa +28,5.2,3.5,1.5,0.2,Iris-setosa +37,5.5,3.5,1.3,0.2,Iris-setosa +41,5.0,3.5,1.3,0.3,Iris-setosa +18,5.1,3.5,1.4,0.3,Iris-setosa +44,5.0,3.5,1.6,0.6,Iris-setosa +23,4.6,3.6,1.0,0.2,Iris-setosa +5,5.0,3.6,1.4,0.2,Iris-setosa +110,7.2,3.6,6.1,2.5,Iris-virginica +49,5.3,3.7,1.5,0.2,Iris-setosa +11,5.4,3.7,1.5,0.2,Iris-setosa +22,5.1,3.7,1.5,0.4,Iris-setosa +47,5.1,3.8,1.6,0.2,Iris-setosa +20,5.1,3.8,1.5,0.3,Iris-setosa +19,5.7,3.8,1.7,0.3,Iris-setosa +45,5.1,3.8,1.9,0.4,Iris-setosa +132,7.9,3.8,6.4,2.0,Iris-virginica +118,7.7,3.8,6.7,2.2,Iris-virginica +6,5.4,3.9,1.7,0.4,Iris-setosa +17,5.4,3.9,1.3,0.4,Iris-setosa +15,5.8,4.0,1.2,0.2,Iris-setosa +33,5.2,4.1,1.5,0.1,Iris-setosa +34,5.5,4.2,1.4,0.2,Iris-setosa +16,5.7,4.4,1.5,0.4,Iris-virginica diff --git a/src/Iris_ordered - Copy.csv b/src/Iris_ordered.csv similarity index 100% rename from src/Iris_ordered - Copy.csv rename to src/Iris_ordered.csv diff --git a/src/Iris_unordered_2.csv b/src/Iris_unordered_2.csv new file mode 100644 index 0000000..121c3f0 --- /dev/null +++ b/src/Iris_unordered_2.csv @@ -0,0 +1,151 @@ +Id,SepalLengthCm,SepalWidthCm,PetalLengthCm,PetalWidthCm,Species +61,5.0,2.0,3.5,1.0,Iris-versicolor +63,6.0,2.2,4.0,1.0,Iris-versicolor +120,6.0,2.2,5.0,1.5,Iris-virginica +69,6.2,2.2,4.5,1.5,Iris-versicolor +42,4.5,2.3,1.3,0.3,Iris-setosa +94,5.0,2.3,3.3,1.0,Iris-versicolor +54,5.5,2.3,4.0,1.3,Iris-versicolor +88,6.3,2.3,4.4,1.3,Iris-versicolor +58,4.9,2.4,3.3,1.0,Iris-versicolor +82,5.5,2.4,3.7,1.0,Iris-versicolor +81,5.5,2.4,3.8,1.1,Iris-versicolor +99,5.1,2.5,3.0,1.1,Iris-versicolor +70,5.6,2.5,3.9,1.1,Iris-versicolor +90,5.5,2.5,4.0,1.3,Iris-versicolor +73,6.3,2.5,4.9,1.5,Iris-versicolor +107,4.9,2.5,4.5,1.7,Iris-virginica +109,6.7,2.5,5.8,1.8,Iris-virginica +147,6.3,2.5,5.0,1.9,Iris-virginica +114,5.7,2.5,5.0,2.0,Iris-virginica +80,5.7,2.6,3.5,1.0,Iris-versicolor +91,5.5,2.6,4.4,1.2,Iris-versicolor +93,5.8,2.6,4.0,1.2,Iris-versicolor +135,6.1,2.6,5.6,1.4,Iris-virginica +119,7.7,2.6,6.9,2.3,Iris-virginica +68,5.8,2.7,4.1,1.0,Iris-versicolor +83,5.8,2.7,3.9,1.2,Iris-versicolor +95,5.6,2.7,4.2,1.3,Iris-versicolor +60,5.2,2.7,3.9,1.4,Iris-versicolor +84,6.0,2.7,5.1,1.6,Iris-versicolor +124,6.3,2.7,4.9,1.8,Iris-virginica +102,5.8,2.7,5.1,1.9,Iris-virginica +143,5.8,2.7,5.1,1.9,Iris-virginica +112,6.4,2.7,5.3,1.9,Iris-virginica +74,6.1,2.8,4.7,1.2,Iris-versicolor +56,5.7,2.8,4.5,1.3,Iris-versicolor +100,5.7,2.8,4.1,1.3,Iris-versicolor +72,6.1,2.8,4.0,1.3,Iris-versicolor +77,6.8,2.8,4.8,1.4,Iris-versicolor +134,6.3,2.8,5.1,1.5,Iris-virginica +55,6.5,2.8,4.6,1.5,Iris-versicolor +127,6.2,2.8,4.8,1.8,Iris-virginica +131,7.4,2.8,6.1,1.9,Iris-virginica +122,5.6,2.8,4.9,2.0,Iris-virginica +123,7.7,2.8,6.7,2.0,Iris-virginica +129,6.4,2.8,5.6,2.1,Iris-virginica +133,6.4,2.8,5.6,2.2,Iris-virginica +115,5.8,2.8,5.1,2.4,Iris-virginica +9,4.4,2.9,1.4,0.2,Iris-setosa +65,5.6,2.9,3.6,1.3,Iris-versicolor +97,5.7,2.9,4.2,1.3,Iris-versicolor +98,6.2,2.9,4.3,1.3,Iris-versicolor +75,6.4,2.9,4.3,1.3,Iris-versicolor +59,6.6,2.9,4.6,1.3,Iris-versicolor +64,6.1,2.9,4.7,1.4,Iris-versicolor +79,6.0,2.9,4.5,1.5,Iris-versicolor +104,6.3,2.9,5.6,1.8,Iris-virginica +108,7.3,2.9,6.3,1.8,Iris-virginica +14,4.3,3.0,1.1,0.1,Iris-setosa +13,4.8,3.0,1.4,0.1,Iris-setosa +39,4.4,3.0,1.3,0.2,Iris-setosa +2,4.9,3.0,1.4,0.2,Iris-setosa +26,5.0,3.0,1.6,0.2,Iris-setosa +46,4.8,3.0,1.4,0.3,Iris-setosa +96,5.7,3.0,4.2,1.2,Iris-versicolor +89,5.6,3.0,4.1,1.3,Iris-versicolor +92,6.1,3.0,4.6,1.4,Iris-versicolor +76,6.6,3.0,4.4,1.4,Iris-versicolor +85,5.4,3.0,4.5,1.5,Iris-versicolor +67,5.6,3.0,4.5,1.5,Iris-versicolor +62,5.9,3.0,4.2,1.5,Iris-versicolor +130,7.2,3.0,5.8,1.6,Iris-virginica +78,6.7,3.0,5.0,1.7,Iris-versicolor +150,5.9,3.0,5.1,1.8,Iris-virginica +139,6.0,3.0,4.8,1.8,Iris-virginica +128,6.1,3.0,4.9,1.8,Iris-virginica +117,6.5,3.0,5.5,1.8,Iris-virginica +148,6.5,3.0,5.2,2.0,Iris-virginica +113,6.8,3.0,5.5,2.1,Iris-virginica +103,7.1,3.0,5.9,2.1,Iris-virginica +106,7.6,3.0,6.6,2.1,Iris-virginica +105,6.5,3.0,5.8,2.2,Iris-virginica +146,6.7,3.0,5.2,2.3,Iris-virginica +136,7.7,3.0,6.1,2.3,Iris-virginica +10,4.9,3.1,1.5,0.1,Iris-setosa +35,4.9,3.1,1.5,0.1,Iris-setosa +38,4.9,3.1,1.5,0.1,Iris-setosa +4,4.6,3.1,1.5,0.2,Iris-setosa +31,4.8,3.1,1.6,0.2,Iris-setosa +66,6.7,3.1,4.4,1.4,Iris-versicolor +87,6.7,3.1,4.7,1.5,Iris-versicolor +53,6.9,3.1,4.9,1.5,Iris-versicolor +138,6.4,3.1,5.5,1.8,Iris-virginica +140,6.9,3.1,5.4,2.1,Iris-virginica +142,6.9,3.1,5.1,2.3,Iris-virginica +141,6.7,3.1,5.6,2.4,Iris-virginica +43,4.4,3.2,1.3,0.2,Iris-setosa +48,4.6,3.2,1.4,0.2,Iris-setosa +3,4.7,3.2,1.3,0.2,Iris-setosa +30,4.7,3.2,1.6,0.2,Iris-setosa +36,5.0,3.2,1.2,0.2,Iris-setosa +51,7.0,3.2,4.7,1.4,Iris-versicolor +52,6.4,3.2,4.5,1.5,Iris-versicolor +71,5.9,3.2,4.8,1.8,Iris-versicolor +126,7.2,3.2,6.0,1.8,Iris-virginica +111,6.5,3.2,5.1,2.0,Iris-virginica +116,6.4,3.2,5.3,2.3,Iris-virginica +144,6.8,3.2,5.9,2.3,Iris-virginica +121,6.9,3.2,5.7,2.3,Iris-virginica +50,5.0,3.3,1.4,0.2,Iris-setosa +24,5.1,3.3,1.7,0.5,Iris-setosa +57,6.3,3.3,4.7,1.6,Iris-versicolor +125,6.7,3.3,5.7,2.1,Iris-virginica +101,6.3,3.3,6.0,2.5,Iris-virginica +145,6.7,3.3,5.7,2.5,Iris-virginica +12,4.8,3.4,1.6,0.2,Iris-setosa +25,4.8,3.4,1.9,0.2,Iris-setosa +8,5.0,3.4,1.5,0.2,Iris-setosa +40,5.1,3.4,1.5,0.2,Iris-setosa +29,5.2,3.4,1.4,0.2,Iris-setosa +21,5.4,3.4,1.7,0.2,Iris-setosa +7,4.6,3.4,1.4,0.3,Iris-setosa +27,5.0,3.4,1.6,0.4,Iris-setosa +32,5.4,3.4,1.5,0.4,Iris-setosa +86,6.0,3.4,4.5,1.6,Iris-versicolor +149,6.2,3.4,5.4,2.3,Iris-virginica +137,6.3,3.4,5.6,2.4,Iris-virginica +1,5.1,3.5,1.4,0.2,Iris-setosa +28,5.2,3.5,1.5,0.2,Iris-setosa +37,5.5,3.5,1.3,0.2,Iris-setosa +41,5.0,3.5,1.3,0.3,Iris-setosa +18,5.1,3.5,1.4,0.3,Iris-setosa +44,5.0,3.5,1.6,0.6,Iris-setosa +23,4.6,3.6,1.0,0.2,Iris-setosa +5,5.0,3.6,1.4,0.2,Iris-setosa +110,7.2,3.6,6.1,2.5,Iris-virginica +49,5.3,3.7,1.5,0.2,Iris-setosa +11,5.4,3.7,1.5,0.2,Iris-setosa +22,5.1,3.7,1.5,0.4,Iris-setosa +47,5.1,3.8,1.6,0.2,Iris-setosa +20,5.1,3.8,1.5,0.3,Iris-setosa +19,5.7,3.8,1.7,0.3,Iris-setosa +45,5.1,3.8,1.9,0.4,Iris-setosa +132,7.9,3.8,6.4,2.0,Iris-virginica +118,7.7,3.8,6.7,2.2,Iris-virginica +6,5.4,3.9,1.7,0.4,Iris-setosa +17,5.4,3.9,1.3,0.4,Iris-setosa +15,5.8,4.0,1.2,0.2,Iris-setosa +33,5.2,4.1,1.5,0.1,Iris-setosa +34,5.5,4.2,1.4,0.2,Iris-setosa +16,5.7,4.4,1.5,0.4,Iris-virginica diff --git a/src/Main.java b/src/Main.java index 177ea7a..473ac07 100644 --- a/src/Main.java +++ b/src/Main.java @@ -9,7 +9,7 @@ public static void main (String[] args) throws Exception { // in the same project boolean index = true; boolean header = true; - String dataset = "Iris_unordered.csv"; + String dataset = "Iris_unordered_2.csv"; ClassificationOfFloatValues ob = new ClassificationOfFloatValues(dataset); ob.setIndex(true); diff --git a/src/classification/ClassificationOfFloatValues.java b/src/classification/ClassificationOfFloatValues.java index 20557b7..5a295f5 100644 --- a/src/classification/ClassificationOfFloatValues.java +++ b/src/classification/ClassificationOfFloatValues.java @@ -30,6 +30,7 @@ public class ClassificationOfFloatValues { // --- Classification result data variables private String[][][] predictedTestData; private int[][] sortedProbability; + private int numberOfClasses; // Function to add the members of the class @@ -91,7 +92,8 @@ public void evaluateResults() { DATA_evaluation evaluationObject = new DATA_evaluation(this.testDataResults, this.columnCount - this.numberOfTrainingData, this.predictedTestData, - this.sortedProbability); + this.sortedProbability, + this.numberOfClasses); evaluationObject.confusionMatrix(); } public void confusionMatrix() { @@ -146,6 +148,8 @@ public void distanceClassification (){ classificationObject.setTestData(this.testDataPredictors, this.testDataResults, this.rowCount, this.columnCount - this.numberOfTrainingData); classificationObject.testModel(); + this.numberOfClasses = classificationObject.getNumberOfClasses(); + // Get the test data this.predictedTestData = classificationObject.getPredictedTestData(); this.sortedProbability = classificationObject.getSortedProbability(); diff --git a/src/classification/DATA_evaluation.java b/src/classification/DATA_evaluation.java index f0b2649..df4e7c6 100644 --- a/src/classification/DATA_evaluation.java +++ b/src/classification/DATA_evaluation.java @@ -7,16 +7,19 @@ public class DATA_evaluation { private int columnCount; private int numberOfClasses; private String [] testDataResults; - private int[][] confustionMatrix = new int[3][2]; + private int[][] confustionMatrix = new int[3][3]; - protected DATA_evaluation(String[] testDataResults, int columnCount, String[][][] predictedTestData, int[][] sortedProbability) { + protected DATA_evaluation(String[] testDataResults, int columnCount, String[][][] predictedTestData, int[][] sortedProbability, int numberOfClasses) { this.testDataResults = testDataResults; this.columnCount = columnCount; this.predictedTestData = predictedTestData; this.sortedProbability = sortedProbability; + this.numberOfClasses = numberOfClasses; + this.confustionMatrix = new int[this.numberOfClasses][this.numberOfClasses]; } protected void confusionMatrix() { + System.out.println(this.testDataResults[0]); System.out.println(this.columnCount); System.out.println(this.predictedTestData[0][0][0]); @@ -29,26 +32,37 @@ protected void confusionMatrix() { System.out.println(this.sortedProbability[0][1]); System.out.println(this.sortedProbability[0][2]); + // Resetting the confusion matrix - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 2; j++) { + for (int i = 0; i < this.numberOfClasses; i++) { + for (int j = 0; j < this.numberOfClasses; j++) { this.confustionMatrix[i][j] = 0; } } for (int i = 0; i < this.columnCount; i++) { + //System.out.println(this.testDataResults[i] + " " + this.predictedTestData[i][this.sortedProbability[i][0]][0]); if (this.testDataResults[i].equals(this.predictedTestData[i][this.sortedProbability[i][0]][0])) { - this.confustionMatrix[this.sortedProbability[i][0]][0]++; + this.confustionMatrix[this.sortedProbability[i][0]][this.sortedProbability[i][0]]++; } else { + /* + for (int j = 0; j < this.columnCount; j++) { + if (this.testDataResults[i].equals(this.predictedTestData[i][this.sortedProbability[i][j]][0])) { + this.confustionMatrix[this.sortedProbability[i][0]][this.sortedProbability[i][j]]++; + } + } + + */ this.confustionMatrix[this.sortedProbability[i][0]][1]++; } + } - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 2; j++) { + for (int i = 0; i < this.numberOfClasses; i++) { + for (int j = 0; j < this.numberOfClasses; j++) { System.out.print(this.confustionMatrix[i][j] + " "); } System.out.println(); diff --git a/src/classification/DistanceClassification.java b/src/classification/DistanceClassification.java index 2ee4009..0576cb0 100644 --- a/src/classification/DistanceClassification.java +++ b/src/classification/DistanceClassification.java @@ -39,6 +39,10 @@ protected DistanceClassification(float [][] trainingDataPredictors, String [] tr calcFeatureMean(); } + protected int getNumberOfClasses () { + return this.numberOfClasses; + } + protected float[][][] getSortedClassificationData() { return this.sortedClassificationData; } From f59ec66b49c2f5432d1682b0e586249bc0f2151a Mon Sep 17 00:00:00 2001 From: Maximilian Wenk Date: Mon, 6 Mar 2023 08:54:17 +0100 Subject: [PATCH 2/3] fix confusion matrix --- Iris_unordered_2.csv | 2 +- src/classification/DATA_evaluation.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Iris_unordered_2.csv b/Iris_unordered_2.csv index 121c3f0..f636805 100644 --- a/Iris_unordered_2.csv +++ b/Iris_unordered_2.csv @@ -148,4 +148,4 @@ Id,SepalLengthCm,SepalWidthCm,PetalLengthCm,PetalWidthCm,Species 15,5.8,4.0,1.2,0.2,Iris-setosa 33,5.2,4.1,1.5,0.1,Iris-setosa 34,5.5,4.2,1.4,0.2,Iris-setosa -16,5.7,4.4,1.5,0.4,Iris-virginica +16,5.7,4.4,1.5,0.4,Iris-versicolor diff --git a/src/classification/DATA_evaluation.java b/src/classification/DATA_evaluation.java index df4e7c6..f72dd9f 100644 --- a/src/classification/DATA_evaluation.java +++ b/src/classification/DATA_evaluation.java @@ -46,15 +46,15 @@ protected void confusionMatrix() { this.confustionMatrix[this.sortedProbability[i][0]][this.sortedProbability[i][0]]++; } else { - /* - for (int j = 0; j < this.columnCount; j++) { + + for (int j = 0; j < this.numberOfClasses; j++) { if (this.testDataResults[i].equals(this.predictedTestData[i][this.sortedProbability[i][j]][0])) { this.confustionMatrix[this.sortedProbability[i][0]][this.sortedProbability[i][j]]++; } } - */ - this.confustionMatrix[this.sortedProbability[i][0]][1]++; + + //this.confustionMatrix[this.sortedProbability[i][0]][1]++; } } From 13dc9affdf88a79b8a388314caa0ced69fc93f69 Mon Sep 17 00:00:00 2001 From: Maximilian Wenk Date: Mon, 6 Mar 2023 09:10:40 +0100 Subject: [PATCH 3/3] add normalized confusion matrix --- .../ClassificationOfFloatValues.java | 3 +- src/classification/DATA_evaluation.java | 60 ++++++++++++++----- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/classification/ClassificationOfFloatValues.java b/src/classification/ClassificationOfFloatValues.java index 5a295f5..a5ea51a 100644 --- a/src/classification/ClassificationOfFloatValues.java +++ b/src/classification/ClassificationOfFloatValues.java @@ -94,7 +94,8 @@ public void evaluateResults() { this.predictedTestData, this.sortedProbability, this.numberOfClasses); - evaluationObject.confusionMatrix(); + evaluationObject.getConfusionMatrix(); + evaluationObject.getConfusionMatrixNormalized(); } public void confusionMatrix() { if (this.MLAlgorithm == "DistanceClassification") { diff --git a/src/classification/DATA_evaluation.java b/src/classification/DATA_evaluation.java index f72dd9f..b191453 100644 --- a/src/classification/DATA_evaluation.java +++ b/src/classification/DATA_evaluation.java @@ -7,7 +7,9 @@ public class DATA_evaluation { private int columnCount; private int numberOfClasses; private String [] testDataResults; - private int[][] confustionMatrix = new int[3][3]; + private int[][] confustionMatrix; + + private boolean createConfusionMatrix; protected DATA_evaluation(String[] testDataResults, int columnCount, String[][][] predictedTestData, int[][] sortedProbability, int numberOfClasses) { this.testDataResults = testDataResults; @@ -18,20 +20,7 @@ protected DATA_evaluation(String[] testDataResults, int columnCount, String[][][ this.confustionMatrix = new int[this.numberOfClasses][this.numberOfClasses]; } - protected void confusionMatrix() { - - System.out.println(this.testDataResults[0]); - System.out.println(this.columnCount); - System.out.println(this.predictedTestData[0][0][0]); - System.out.println(this.predictedTestData[0][0][1]); - System.out.println(this.predictedTestData[0][1][0]); - System.out.println(this.predictedTestData[0][1][1]); - System.out.println(this.predictedTestData[0][2][0]); - System.out.println(this.predictedTestData[0][2][1]); - System.out.println(this.sortedProbability[0][0]); - System.out.println(this.sortedProbability[0][1]); - System.out.println(this.sortedProbability[0][2]); - + private void confusionMatrix() { // Resetting the confusion matrix for (int i = 0; i < this.numberOfClasses; i++) { @@ -70,4 +59,45 @@ protected void confusionMatrix() { } + + protected int[][] getConfusionMatrix() { + if (!createConfusionMatrix) { + confusionMatrix(); + } + + return this.confustionMatrix; + } + protected float[][] getConfusionMatrixNormalized() { + if (!createConfusionMatrix) { + confusionMatrix(); + } + float[][] confusionMatrixNormalized = new float[this.numberOfClasses][this.numberOfClasses]; + + for (int i = 0; i < this.numberOfClasses; i++) { + int tempCount = 0; + for (int j = 0; j < this.numberOfClasses; j++) { + tempCount += this.confustionMatrix[i][j]; + } + + if (tempCount == 0) { + continue; + } + for (int j = 0; j < this.numberOfClasses; j++) { + //System.out.println(this.confustionMatrix[i][j]); + //System.out.println(tempCount); + confusionMatrixNormalized[i][j] = (float)this.confustionMatrix[i][j] / (float)tempCount; + } + + } + + for (int i = 0; i < this.numberOfClasses; i++) { + for (int j = 0; j < this.numberOfClasses; j++) { + System.out.print(confusionMatrixNormalized[i][j] + " "); + } + System.out.println(); + } + + + return confusionMatrixNormalized; + } } \ No newline at end of file