From c2079d881154f0f34c30dc0e8b0fa8db2a1a78e7 Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Sun, 28 May 2023 13:41:17 +0200 Subject: [PATCH] Add decison tree and its visualization --- DecisionTree/Source.gv | 197 ++++++++++++++++++++++++++++++ DecisionTree/Source.gv.pdf | Bin 0 -> 39357 bytes DecisionTree/dane.csv | 201 +++++++++++++++++++++++++++++++ DecisionTree/drzewo_decyzyjne.py | 57 +++++++++ DecisionTree/training_data.txt | 200 ++++++++++++++++++++++++++++++ 5 files changed, 655 insertions(+) create mode 100644 DecisionTree/Source.gv create mode 100644 DecisionTree/Source.gv.pdf create mode 100644 DecisionTree/dane.csv create mode 100644 DecisionTree/drzewo_decyzyjne.py create mode 100644 DecisionTree/training_data.txt diff --git a/DecisionTree/Source.gv b/DecisionTree/Source.gv new file mode 100644 index 0000000..488deb9 --- /dev/null +++ b/DecisionTree/Source.gv @@ -0,0 +1,197 @@ +digraph Tree { +node [shape=box, style="filled, rounded", color="black", fontname="helvetica"] ; +edge [fontname="helvetica"] ; +0 [label="g > d <= 0.5\nentropy = 0.997\nsamples = 200\nvalue = [94, 106]\nclass = 1", fillcolor="#e9f4fc"] ; +1 [label="waga, <= 0.5\nentropy = 0.803\nsamples = 98\nvalue = [74, 24]\nclass = 0", fillcolor="#edaa79"] ; +0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ; +2 [label="wielkosc <= 1.5\nentropy = 0.998\nsamples = 34\nvalue = [16, 18]\nclass = 1", fillcolor="#e9f4fc"] ; +1 -> 2 ; +3 [label="priorytet <= 0.5\nentropy = 0.887\nsamples = 23\nvalue = [7, 16]\nclass = 1", fillcolor="#90c8f0"] ; +2 -> 3 ; +4 [label="kruchosc <= 0.5\nentropy = 0.439\nsamples = 11\nvalue = [1, 10]\nclass = 1", fillcolor="#4da7e8"] ; +3 -> 4 ; +5 [label="entropy = 0.0\nsamples = 7\nvalue = [0, 7]\nclass = 1", fillcolor="#399de5"] ; +4 -> 5 ; +6 [label="wielkosc <= 0.5\nentropy = 0.811\nsamples = 4\nvalue = [1, 3]\nclass = 1", fillcolor="#7bbeee"] ; +4 -> 6 ; +7 [label="ksztalt <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [1, 2]\nclass = 1", fillcolor="#9ccef2"] ; +6 -> 7 ; +8 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +7 -> 8 ; +9 [label="gorna <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]\nclass = 0", fillcolor="#ffffff"] ; +7 -> 9 ; +10 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +9 -> 10 ; +11 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +9 -> 11 ; +12 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +6 -> 12 ; +13 [label="kruchosc <= 0.5\nentropy = 1.0\nsamples = 12\nvalue = [6, 6]\nclass = 0", fillcolor="#ffffff"] ; +3 -> 13 ; +14 [label="entropy = 0.0\nsamples = 5\nvalue = [5, 0]\nclass = 0", fillcolor="#e58139"] ; +13 -> 14 ; +15 [label="ksztalt <= 0.5\nentropy = 0.592\nsamples = 7\nvalue = [1, 6]\nclass = 1", fillcolor="#5aade9"] ; +13 -> 15 ; +16 [label="entropy = 0.0\nsamples = 4\nvalue = [0, 4]\nclass = 1", fillcolor="#399de5"] ; +15 -> 16 ; +17 [label="gorna <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [1, 2]\nclass = 1", fillcolor="#9ccef2"] ; +15 -> 17 ; +18 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +17 -> 18 ; +19 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 2]\nclass = 1", fillcolor="#399de5"] ; +17 -> 19 ; +20 [label="ksztalt <= 0.5\nentropy = 0.684\nsamples = 11\nvalue = [9, 2]\nclass = 0", fillcolor="#eb9d65"] ; +2 -> 20 ; +21 [label="dolna <= 0.5\nentropy = 1.0\nsamples = 4\nvalue = [2, 2]\nclass = 0", fillcolor="#ffffff"] ; +20 -> 21 ; +22 [label="kruchosc <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [1, 2]\nclass = 1", fillcolor="#9ccef2"] ; +21 -> 22 ; +23 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +22 -> 23 ; +24 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 2]\nclass = 1", fillcolor="#399de5"] ; +22 -> 24 ; +25 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +21 -> 25 ; +26 [label="entropy = 0.0\nsamples = 7\nvalue = [7, 0]\nclass = 0", fillcolor="#e58139"] ; +20 -> 26 ; +27 [label="gorna <= 0.5\nentropy = 0.449\nsamples = 64\nvalue = [58, 6]\nclass = 0", fillcolor="#e88e4d"] ; +1 -> 27 ; +28 [label="entropy = 0.0\nsamples = 33\nvalue = [33, 0]\nclass = 0", fillcolor="#e58139"] ; +27 -> 28 ; +29 [label="wielkosc <= 1.5\nentropy = 0.709\nsamples = 31\nvalue = [25, 6]\nclass = 0", fillcolor="#eb9f69"] ; +27 -> 29 ; +30 [label="ksztalt <= 0.5\nentropy = 0.918\nsamples = 18\nvalue = [12, 6]\nclass = 0", fillcolor="#f2c09c"] ; +29 -> 30 ; +31 [label="kruchosc <= 0.5\nentropy = 1.0\nsamples = 10\nvalue = [5, 5]\nclass = 0", fillcolor="#ffffff"] ; +30 -> 31 ; +32 [label="dolna <= 0.5\nentropy = 0.722\nsamples = 5\nvalue = [4, 1]\nclass = 0", fillcolor="#eca06a"] ; +31 -> 32 ; +33 [label="priorytet <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]\nclass = 0", fillcolor="#ffffff"] ; +32 -> 33 ; +34 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +33 -> 34 ; +35 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +33 -> 35 ; +36 [label="entropy = 0.0\nsamples = 3\nvalue = [3, 0]\nclass = 0", fillcolor="#e58139"] ; +32 -> 36 ; +37 [label="dolna <= 0.5\nentropy = 0.722\nsamples = 5\nvalue = [1, 4]\nclass = 1", fillcolor="#6ab6ec"] ; +31 -> 37 ; +38 [label="entropy = 0.0\nsamples = 3\nvalue = [0, 3]\nclass = 1", fillcolor="#399de5"] ; +37 -> 38 ; +39 [label="waga, <= 1.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]\nclass = 0", fillcolor="#ffffff"] ; +37 -> 39 ; +40 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +39 -> 40 ; +41 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +39 -> 41 ; +42 [label="waga, <= 1.5\nentropy = 0.544\nsamples = 8\nvalue = [7, 1]\nclass = 0", fillcolor="#e99355"] ; +30 -> 42 ; +43 [label="entropy = 0.0\nsamples = 4\nvalue = [4, 0]\nclass = 0", fillcolor="#e58139"] ; +42 -> 43 ; +44 [label="wielkosc <= 0.5\nentropy = 0.811\nsamples = 4\nvalue = [3, 1]\nclass = 0", fillcolor="#eeab7b"] ; +42 -> 44 ; +45 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +44 -> 45 ; +46 [label="kruchosc <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [2, 1]\nclass = 0", fillcolor="#f2c09c"] ; +44 -> 46 ; +47 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +46 -> 47 ; +48 [label="priorytet <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]\nclass = 0", fillcolor="#ffffff"] ; +46 -> 48 ; +49 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +48 -> 49 ; +50 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +48 -> 50 ; +51 [label="entropy = 0.0\nsamples = 13\nvalue = [13, 0]\nclass = 0", fillcolor="#e58139"] ; +29 -> 51 ; +52 [label="wielkosc <= 1.5\nentropy = 0.714\nsamples = 102\nvalue = [20, 82]\nclass = 1", fillcolor="#69b5eb"] ; +0 -> 52 [labeldistance=2.5, labelangle=-45, headlabel="False"] ; +53 [label="waga, <= 0.5\nentropy = 0.469\nsamples = 70\nvalue = [7, 63]\nclass = 1", fillcolor="#4fa8e8"] ; +52 -> 53 ; +54 [label="entropy = 0.0\nsamples = 21\nvalue = [0, 21]\nclass = 1", fillcolor="#399de5"] ; +53 -> 54 ; +55 [label="ksztalt <= 0.5\nentropy = 0.592\nsamples = 49\nvalue = [7, 42]\nclass = 1", fillcolor="#5aade9"] ; +53 -> 55 ; +56 [label="wielkosc <= 0.5\nentropy = 0.25\nsamples = 24\nvalue = [1, 23]\nclass = 1", fillcolor="#42a1e6"] ; +55 -> 56 ; +57 [label="entropy = 0.0\nsamples = 15\nvalue = [0, 15]\nclass = 1", fillcolor="#399de5"] ; +56 -> 57 ; +58 [label="kruchosc <= 0.5\nentropy = 0.503\nsamples = 9\nvalue = [1, 8]\nclass = 1", fillcolor="#52a9e8"] ; +56 -> 58 ; +59 [label="dolna <= 0.5\nentropy = 0.722\nsamples = 5\nvalue = [1, 4]\nclass = 1", fillcolor="#6ab6ec"] ; +58 -> 59 ; +60 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 2]\nclass = 1", fillcolor="#399de5"] ; +59 -> 60 ; +61 [label="gorna <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [1, 2]\nclass = 1", fillcolor="#9ccef2"] ; +59 -> 61 ; +62 [label="priorytet <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]\nclass = 0", fillcolor="#ffffff"] ; +61 -> 62 ; +63 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +62 -> 63 ; +64 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +62 -> 64 ; +65 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +61 -> 65 ; +66 [label="entropy = 0.0\nsamples = 4\nvalue = [0, 4]\nclass = 1", fillcolor="#399de5"] ; +58 -> 66 ; +67 [label="kruchosc <= 0.5\nentropy = 0.795\nsamples = 25\nvalue = [6, 19]\nclass = 1", fillcolor="#78bced"] ; +55 -> 67 ; +68 [label="priorytet <= 0.5\nentropy = 0.98\nsamples = 12\nvalue = [5, 7]\nclass = 1", fillcolor="#c6e3f8"] ; +67 -> 68 ; +69 [label="dolna <= 0.5\nentropy = 0.764\nsamples = 9\nvalue = [2, 7]\nclass = 1", fillcolor="#72b9ec"] ; +68 -> 69 ; +70 [label="entropy = 0.0\nsamples = 5\nvalue = [0, 5]\nclass = 1", fillcolor="#399de5"] ; +69 -> 70 ; +71 [label="gorna <= 0.5\nentropy = 1.0\nsamples = 4\nvalue = [2, 2]\nclass = 0", fillcolor="#ffffff"] ; +69 -> 71 ; +72 [label="entropy = 0.0\nsamples = 2\nvalue = [2, 0]\nclass = 0", fillcolor="#e58139"] ; +71 -> 72 ; +73 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 2]\nclass = 1", fillcolor="#399de5"] ; +71 -> 73 ; +74 [label="entropy = 0.0\nsamples = 3\nvalue = [3, 0]\nclass = 0", fillcolor="#e58139"] ; +68 -> 74 ; +75 [label="dolna <= 0.5\nentropy = 0.391\nsamples = 13\nvalue = [1, 12]\nclass = 1", fillcolor="#49a5e7"] ; +67 -> 75 ; +76 [label="entropy = 0.0\nsamples = 7\nvalue = [0, 7]\nclass = 1", fillcolor="#399de5"] ; +75 -> 76 ; +77 [label="gorna <= 0.5\nentropy = 0.65\nsamples = 6\nvalue = [1, 5]\nclass = 1", fillcolor="#61b1ea"] ; +75 -> 77 ; +78 [label="priorytet <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [1, 2]\nclass = 1", fillcolor="#9ccef2"] ; +77 -> 78 ; +79 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 2]\nclass = 1", fillcolor="#399de5"] ; +78 -> 79 ; +80 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +78 -> 80 ; +81 [label="entropy = 0.0\nsamples = 3\nvalue = [0, 3]\nclass = 1", fillcolor="#399de5"] ; +77 -> 81 ; +82 [label="gorna <= 0.5\nentropy = 0.974\nsamples = 32\nvalue = [13, 19]\nclass = 1", fillcolor="#c0e0f7"] ; +52 -> 82 ; +83 [label="kruchosc <= 0.5\nentropy = 0.65\nsamples = 12\nvalue = [10, 2]\nclass = 0", fillcolor="#ea9a61"] ; +82 -> 83 ; +84 [label="entropy = 0.0\nsamples = 7\nvalue = [7, 0]\nclass = 0", fillcolor="#e58139"] ; +83 -> 84 ; +85 [label="waga, <= 1.5\nentropy = 0.971\nsamples = 5\nvalue = [3, 2]\nclass = 0", fillcolor="#f6d5bd"] ; +83 -> 85 ; +86 [label="priorytet <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [1, 2]\nclass = 1", fillcolor="#9ccef2"] ; +85 -> 86 ; +87 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 2]\nclass = 1", fillcolor="#399de5"] ; +86 -> 87 ; +88 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]\nclass = 0", fillcolor="#e58139"] ; +86 -> 88 ; +89 [label="entropy = 0.0\nsamples = 2\nvalue = [2, 0]\nclass = 0", fillcolor="#e58139"] ; +85 -> 89 ; +90 [label="dolna <= 0.5\nentropy = 0.61\nsamples = 20\nvalue = [3, 17]\nclass = 1", fillcolor="#5caeea"] ; +82 -> 90 ; +91 [label="entropy = 0.0\nsamples = 11\nvalue = [0, 11]\nclass = 1", fillcolor="#399de5"] ; +90 -> 91 ; +92 [label="kruchosc <= 0.5\nentropy = 0.918\nsamples = 9\nvalue = [3, 6]\nclass = 1", fillcolor="#9ccef2"] ; +90 -> 92 ; +93 [label="waga, <= 0.5\nentropy = 0.811\nsamples = 4\nvalue = [3, 1]\nclass = 0", fillcolor="#eeab7b"] ; +92 -> 93 ; +94 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]\nclass = 1", fillcolor="#399de5"] ; +93 -> 94 ; +95 [label="entropy = 0.0\nsamples = 3\nvalue = [3, 0]\nclass = 0", fillcolor="#e58139"] ; +93 -> 95 ; +96 [label="entropy = 0.0\nsamples = 5\nvalue = [0, 5]\nclass = 1", fillcolor="#399de5"] ; +92 -> 96 ; +} diff --git a/DecisionTree/Source.gv.pdf b/DecisionTree/Source.gv.pdf new file mode 100644 index 0000000000000000000000000000000000000000..47515117be2e740c36c266f027e2e43399442340 GIT binary patch literal 39357 zcmZs?b97{F*XDYG1wr$(&B%O5Jv29dr+qP{xeRAK=^PcyNZ+w4M)vg+~ zt7>0suHT&NDoO=Walm&5HaN
  • fy`77`{Bdm}42US1ML8B;rR7Yh>BuR}_3BqSt^ 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 Zql!qv5J>yhRY0OpP&P3!U2{FQ{{fppMKk~a literal 0 HcmV?d00001 diff --git a/DecisionTree/dane.csv b/DecisionTree/dane.csv new file mode 100644 index 0000000..b138639 --- /dev/null +++ b/DecisionTree/dane.csv @@ -0,0 +1,201 @@ +wielkosc,"waga,",priorytet,ksztalt,kruchosc,dolna,gorna,g > d,polka +1,0,0,1,0,0,1,0,1 +0,0,1,0,1,1,0,1,1 +2,0,1,1,0,0,0,1,0 +2,2,1,0,1,1,1,0,0 +1,0,0,1,0,0,0,1,1 +2,1,0,0,1,1,0,0,0 +1,0,0,0,1,0,0,1,1 +1,1,0,1,0,0,0,1,1 +0,0,1,0,1,1,1,0,1 +0,2,0,0,0,1,1,0,0 +0,0,1,0,0,1,0,1,1 +0,0,0,0,0,1,1,0,1 +0,2,1,0,1,1,0,0,0 +2,0,0,0,1,0,0,0,1 +2,1,0,1,0,1,1,1,0 +0,1,1,0,1,1,1,0,0 +0,2,0,1,1,1,0,1,1 +1,2,1,0,1,1,0,0,0 +0,0,1,1,1,1,0,1,1 +0,0,0,1,1,0,0,1,1 +1,1,1,1,1,0,1,0,0 +1,2,1,0,0,1,1,1,1 +2,2,1,1,0,1,1,1,0 +1,2,1,0,1,1,0,1,1 +0,1,0,0,0,1,0,1,1 +1,1,0,0,0,1,0,1,1 +0,1,0,0,0,1,1,1,1 +2,1,0,1,0,1,0,1,0 +0,1,1,0,1,1,0,0,0 +2,1,0,1,0,1,1,0,0 +1,2,1,0,0,0,1,1,1 +1,2,0,1,0,1,1,1,1 +0,2,0,1,0,1,0,1,0 +2,1,1,0,1,1,1,1,1 +0,2,0,1,0,0,0,1,1 +0,1,1,0,0,1,1,0,0 +2,2,1,0,0,0,1,1,1 +1,0,0,0,0,0,1,0,1 +0,0,1,1,0,1,0,0,0 +2,2,0,1,1,1,0,0,0 +1,2,1,1,0,0,0,1,0 +1,2,0,1,0,0,1,1,1 +0,1,0,1,1,1,1,0,0 +0,1,0,0,1,1,0,0,0 +0,1,0,1,1,0,0,0,0 +1,1,1,0,1,1,0,1,1 +1,1,1,1,0,1,1,0,0 +2,1,1,1,0,1,1,0,0 +2,2,0,0,1,1,0,0,0 +1,0,0,1,0,1,0,1,1 +2,1,1,1,1,0,1,0,0 +0,0,0,0,1,1,0,0,1 +2,1,1,1,0,1,0,1,0 +1,2,1,1,1,0,1,1,1 +0,2,0,0,1,1,1,1,1 +2,1,0,1,1,0,0,0,0 +0,2,1,1,1,0,1,1,1 +1,2,0,1,1,1,1,0,1 +0,2,0,0,0,1,0,1,1 +1,2,0,0,0,1,0,0,0 +2,0,0,1,0,1,1,1,1 +2,1,1,0,0,0,1,1,1 +0,1,1,1,0,1,0,0,0 +2,1,0,1,1,1,0,0,0 +0,2,0,1,0,0,0,0,0 +2,1,0,0,1,0,0,1,1 +1,1,0,0,1,1,0,0,0 +2,0,0,1,0,0,1,1,1 +2,0,1,1,1,0,1,1,1 +2,2,0,1,1,0,0,0,0 +0,1,0,1,1,1,0,1,1 +1,0,1,1,1,0,0,0,0 +2,0,0,1,1,1,1,1,1 +1,0,0,0,0,0,0,1,1 +2,1,1,0,0,0,0,1,0 +0,0,0,0,1,1,0,1,1 +0,1,0,1,0,0,0,1,1 +2,2,0,1,0,0,0,0,0 +0,2,1,1,1,1,0,1,0 +2,2,1,0,0,1,1,0,0 +1,2,0,0,1,1,1,0,1 +0,1,1,1,0,0,0,1,0 +1,1,1,0,1,0,0,0,0 +2,0,1,1,0,0,1,1,1 +2,0,1,0,1,0,1,0,1 +2,2,0,0,0,1,1,0,0 +1,1,0,1,1,0,1,1,1 +2,0,0,0,0,0,1,1,1 +1,2,0,0,1,1,0,1,1 +1,2,1,1,0,0,0,0,0 +0,0,1,1,1,1,1,0,1 +0,2,1,1,0,1,0,0,0 +2,1,1,0,0,0,1,0,0 +1,0,0,1,1,0,0,0,1 +2,2,0,1,1,1,0,1,0 +2,0,0,1,1,1,0,0,0 +0,2,1,0,0,0,0,0,0 +1,2,1,1,1,0,0,1,1 +0,0,0,0,0,1,1,1,1 +2,2,1,1,1,0,1,1,1 +0,1,0,0,1,0,1,0,1 +2,1,1,0,1,1,0,0,0 +0,1,1,1,1,1,1,1,1 +1,2,1,1,1,0,1,0,0 +2,0,1,1,1,1,1,0,0 +1,0,1,1,0,0,1,0,0 +0,2,0,0,1,0,0,1,1 +2,2,0,0,0,1,0,0,0 +0,2,0,0,1,1,0,0,0 +0,1,0,0,0,0,1,1,1 +1,0,0,0,0,1,0,1,1 +2,1,0,0,0,0,1,0,0 +0,1,1,0,0,1,0,0,0 +1,0,1,0,1,0,1,0,1 +2,0,0,0,1,1,0,0,0 +0,0,0,0,0,0,0,0,1 +0,0,1,0,1,0,0,0,1 +1,0,1,0,0,0,0,0,0 +0,2,1,0,0,0,0,1,1 +2,0,0,1,1,1,0,1,1 +0,2,0,1,1,1,1,0,0 +0,2,1,1,1,1,1,1,1 +1,2,0,1,0,1,1,0,0 +0,2,1,0,0,1,0,0,0 +2,0,1,1,1,1,1,1,1 +0,0,0,1,1,1,1,1,1 +1,2,0,1,1,0,0,0,0 +1,2,0,1,1,0,0,1,1 +2,2,0,1,0,0,1,0,0 +2,2,0,0,0,0,1,0,0 +0,0,0,1,0,0,1,0,1 +1,0,1,0,1,0,0,0,1 +0,2,0,0,0,0,0,0,0 +2,0,1,0,1,1,1,1,1 +0,2,1,0,0,0,1,1,1 +0,2,1,0,1,1,1,1,1 +2,2,1,0,1,0,1,0,0 +1,1,1,1,1,1,1,1,1 +0,1,1,0,1,0,0,0,0 +2,1,1,0,0,1,1,1,0 +0,0,1,0,1,1,1,1,1 +0,1,1,0,1,0,1,0,1 +2,0,0,1,0,0,1,0,0 +1,1,0,1,1,1,1,0,0 +2,0,0,1,1,1,1,0,0 +0,0,1,0,0,1,1,0,0 +1,0,1,0,1,1,1,1,1 +0,1,0,0,0,0,0,1,1 +0,2,0,1,1,0,0,1,1 +2,1,1,0,1,0,1,1,1 +1,1,1,1,1,0,1,1,1 +1,0,1,1,0,0,1,1,1 +1,0,0,1,1,0,0,1,1 +2,1,1,1,0,0,1,0,0 +1,0,0,0,0,0,0,0,1 +0,0,0,1,1,1,1,0,1 +1,0,1,1,0,0,0,1,1 +2,1,1,1,1,0,1,1,1 +1,2,0,1,0,1,0,1,0 +1,1,0,0,0,1,1,0,0 +2,2,1,0,1,1,0,1,0 +0,0,0,0,0,0,1,0,1 +0,2,0,0,0,1,1,1,1 +2,1,0,0,0,0,1,1,1 +0,0,0,1,1,1,0,0,0 +1,0,1,0,0,1,1,0,0 +2,0,0,0,1,1,1,1,1 +1,2,1,0,0,0,0,1,1 +2,2,0,0,0,1,0,1,0 +0,1,1,0,0,0,1,0,0 +0,2,0,0,1,0,1,0,1 +1,1,0,0,1,1,1,1,1 +0,0,0,1,0,0,1,1,1 +0,1,1,0,0,1,1,1,1 +2,2,0,1,1,0,1,0,0 +1,0,1,0,1,0,1,1,1 +1,1,0,1,0,0,1,1,1 +2,0,1,1,0,0,1,0,0 +2,0,1,0,0,0,1,0,0 +1,1,1,1,0,1,1,1,0 +2,1,1,0,1,0,0,0,0 +0,2,0,1,1,0,0,0,0 +1,2,1,1,0,1,0,0,0 +2,1,1,1,1,1,0,1,0 +0,2,0,1,0,1,1,1,1 +0,2,1,0,1,0,0,1,1 +0,1,1,0,0,0,1,1,1 +1,0,0,1,1,0,1,1,1 +2,2,1,1,0,0,0,0,0 +0,1,1,0,0,0,0,0,0 +2,0,1,1,0,1,0,0,0 +0,1,1,0,0,0,0,1,1 +0,0,1,1,1,0,1,0,1 +0,2,0,0,0,0,1,0,1 +2,0,0,1,0,1,1,0,0 +0,0,1,0,1,0,1,1,1 +2,2,0,0,1,0,1,1,1 +2,2,0,1,0,0,0,1,0 +2,2,0,1,0,1,0,1,0 +1,2,1,0,0,1,0,1,0 diff --git a/DecisionTree/drzewo_decyzyjne.py b/DecisionTree/drzewo_decyzyjne.py new file mode 100644 index 0000000..6d4842d --- /dev/null +++ b/DecisionTree/drzewo_decyzyjne.py @@ -0,0 +1,57 @@ +import graphviz +import pandas as pd +from sklearn.tree import DecisionTreeClassifier +from sklearn.tree import export_graphviz + +plikZPrzecinkami = open("training_data.txt", 'w') + +with open('200permutations_table.txt', 'r') as plik: + for linia in plik: + liczby = linia.strip() + wiersz = "" + licznik = 0 + for liczba in liczby: + wiersz += liczba + wiersz += ";" + wiersz = wiersz[:-1] + wiersz += '\n' + plikZPrzecinkami.write(wiersz) + +plikZPrzecinkami.close() + +x = pd.read_csv('training_data.txt', delimiter=';', + names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d']) +y = pd.read_csv('decisions.txt', names=['polka']) +# X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe + +# Tworzenie instancji klasyfikatora ID3 +clf = DecisionTreeClassifier(criterion='entropy') + +# Trenowanie klasyfikatora +clf.fit(x.values, y.values) +# clf.fit(X_train, y_train) + + +# Predykcja na nowych danych +new_data = [[2, 2, 1, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]] +predictions = clf.predict(new_data) +# y_pred = clf.predict(X_test) + + +print(predictions) +# print("Accuracy:", clf.score(new_data, predictions)) +# print("Accuracy:", metrics.accuracy_score(y_test, y_pred)) + + +# Wygenerowanie pliku .dot reprezentującego drzewo +dot_data = export_graphviz(clf, out_file=None, feature_names=list(x.columns), class_names=['0', '1'], filled=True, + rounded=True) + +# Tworzenie obiektu graphviz z pliku .dot +graph = graphviz.Source(dot_data) + +# Wyświetlanie drzewa +graph.view() + +z = pd.concat([x, y], axis=1) +z.to_csv('dane.csv', index=False) diff --git a/DecisionTree/training_data.txt b/DecisionTree/training_data.txt new file mode 100644 index 0000000..06a4ff8 --- /dev/null +++ b/DecisionTree/training_data.txt @@ -0,0 +1,200 @@ +1;0;0;1;0;0;1;0 +0;0;1;0;1;1;0;1 +2;0;1;1;0;0;0;1 +2;2;1;0;1;1;1;0 +1;0;0;1;0;0;0;1 +2;1;0;0;1;1;0;0 +1;0;0;0;1;0;0;1 +1;1;0;1;0;0;0;1 +0;0;1;0;1;1;1;0 +0;2;0;0;0;1;1;0 +0;0;1;0;0;1;0;1 +0;0;0;0;0;1;1;0 +0;2;1;0;1;1;0;0 +2;0;0;0;1;0;0;0 +2;1;0;1;0;1;1;1 +0;1;1;0;1;1;1;0 +0;2;0;1;1;1;0;1 +1;2;1;0;1;1;0;0 +0;0;1;1;1;1;0;1 +0;0;0;1;1;0;0;1 +1;1;1;1;1;0;1;0 +1;2;1;0;0;1;1;1 +2;2;1;1;0;1;1;1 +1;2;1;0;1;1;0;1 +0;1;0;0;0;1;0;1 +1;1;0;0;0;1;0;1 +0;1;0;0;0;1;1;1 +2;1;0;1;0;1;0;1 +0;1;1;0;1;1;0;0 +2;1;0;1;0;1;1;0 +1;2;1;0;0;0;1;1 +1;2;0;1;0;1;1;1 +0;2;0;1;0;1;0;1 +2;1;1;0;1;1;1;1 +0;2;0;1;0;0;0;1 +0;1;1;0;0;1;1;0 +2;2;1;0;0;0;1;1 +1;0;0;0;0;0;1;0 +0;0;1;1;0;1;0;0 +2;2;0;1;1;1;0;0 +1;2;1;1;0;0;0;1 +1;2;0;1;0;0;1;1 +0;1;0;1;1;1;1;0 +0;1;0;0;1;1;0;0 +0;1;0;1;1;0;0;0 +1;1;1;0;1;1;0;1 +1;1;1;1;0;1;1;0 +2;1;1;1;0;1;1;0 +2;2;0;0;1;1;0;0 +1;0;0;1;0;1;0;1 +2;1;1;1;1;0;1;0 +0;0;0;0;1;1;0;0 +2;1;1;1;0;1;0;1 +1;2;1;1;1;0;1;1 +0;2;0;0;1;1;1;1 +2;1;0;1;1;0;0;0 +0;2;1;1;1;0;1;1 +1;2;0;1;1;1;1;0 +0;2;0;0;0;1;0;1 +1;2;0;0;0;1;0;0 +2;0;0;1;0;1;1;1 +2;1;1;0;0;0;1;1 +0;1;1;1;0;1;0;0 +2;1;0;1;1;1;0;0 +0;2;0;1;0;0;0;0 +2;1;0;0;1;0;0;1 +1;1;0;0;1;1;0;0 +2;0;0;1;0;0;1;1 +2;0;1;1;1;0;1;1 +2;2;0;1;1;0;0;0 +0;1;0;1;1;1;0;1 +1;0;1;1;1;0;0;0 +2;0;0;1;1;1;1;1 +1;0;0;0;0;0;0;1 +2;1;1;0;0;0;0;1 +0;0;0;0;1;1;0;1 +0;1;0;1;0;0;0;1 +2;2;0;1;0;0;0;0 +0;2;1;1;1;1;0;1 +2;2;1;0;0;1;1;0 +1;2;0;0;1;1;1;0 +0;1;1;1;0;0;0;1 +1;1;1;0;1;0;0;0 +2;0;1;1;0;0;1;1 +2;0;1;0;1;0;1;0 +2;2;0;0;0;1;1;0 +1;1;0;1;1;0;1;1 +2;0;0;0;0;0;1;1 +1;2;0;0;1;1;0;1 +1;2;1;1;0;0;0;0 +0;0;1;1;1;1;1;0 +0;2;1;1;0;1;0;0 +2;1;1;0;0;0;1;0 +1;0;0;1;1;0;0;0 +2;2;0;1;1;1;0;1 +2;0;0;1;1;1;0;0 +0;2;1;0;0;0;0;0 +1;2;1;1;1;0;0;1 +0;0;0;0;0;1;1;1 +2;2;1;1;1;0;1;1 +0;1;0;0;1;0;1;0 +2;1;1;0;1;1;0;0 +0;1;1;1;1;1;1;1 +1;2;1;1;1;0;1;0 +2;0;1;1;1;1;1;0 +1;0;1;1;0;0;1;0 +0;2;0;0;1;0;0;1 +2;2;0;0;0;1;0;0 +0;2;0;0;1;1;0;0 +0;1;0;0;0;0;1;1 +1;0;0;0;0;1;0;1 +2;1;0;0;0;0;1;0 +0;1;1;0;0;1;0;0 +1;0;1;0;1;0;1;0 +2;0;0;0;1;1;0;0 +0;0;0;0;0;0;0;0 +0;0;1;0;1;0;0;0 +1;0;1;0;0;0;0;0 +0;2;1;0;0;0;0;1 +2;0;0;1;1;1;0;1 +0;2;0;1;1;1;1;0 +0;2;1;1;1;1;1;1 +1;2;0;1;0;1;1;0 +0;2;1;0;0;1;0;0 +2;0;1;1;1;1;1;1 +0;0;0;1;1;1;1;1 +1;2;0;1;1;0;0;0 +1;2;0;1;1;0;0;1 +2;2;0;1;0;0;1;0 +2;2;0;0;0;0;1;0 +0;0;0;1;0;0;1;0 +1;0;1;0;1;0;0;0 +0;2;0;0;0;0;0;0 +2;0;1;0;1;1;1;1 +0;2;1;0;0;0;1;1 +0;2;1;0;1;1;1;1 +2;2;1;0;1;0;1;0 +1;1;1;1;1;1;1;1 +0;1;1;0;1;0;0;0 +2;1;1;0;0;1;1;1 +0;0;1;0;1;1;1;1 +0;1;1;0;1;0;1;0 +2;0;0;1;0;0;1;0 +1;1;0;1;1;1;1;0 +2;0;0;1;1;1;1;0 +0;0;1;0;0;1;1;0 +1;0;1;0;1;1;1;1 +0;1;0;0;0;0;0;1 +0;2;0;1;1;0;0;1 +2;1;1;0;1;0;1;1 +1;1;1;1;1;0;1;1 +1;0;1;1;0;0;1;1 +1;0;0;1;1;0;0;1 +2;1;1;1;0;0;1;0 +1;0;0;0;0;0;0;0 +0;0;0;1;1;1;1;0 +1;0;1;1;0;0;0;1 +2;1;1;1;1;0;1;1 +1;2;0;1;0;1;0;1 +1;1;0;0;0;1;1;0 +2;2;1;0;1;1;0;1 +0;0;0;0;0;0;1;0 +0;2;0;0;0;1;1;1 +2;1;0;0;0;0;1;1 +0;0;0;1;1;1;0;0 +1;0;1;0;0;1;1;0 +2;0;0;0;1;1;1;1 +1;2;1;0;0;0;0;1 +2;2;0;0;0;1;0;1 +0;1;1;0;0;0;1;0 +0;2;0;0;1;0;1;0 +1;1;0;0;1;1;1;1 +0;0;0;1;0;0;1;1 +0;1;1;0;0;1;1;1 +2;2;0;1;1;0;1;0 +1;0;1;0;1;0;1;1 +1;1;0;1;0;0;1;1 +2;0;1;1;0;0;1;0 +2;0;1;0;0;0;1;0 +1;1;1;1;0;1;1;1 +2;1;1;0;1;0;0;0 +0;2;0;1;1;0;0;0 +1;2;1;1;0;1;0;0 +2;1;1;1;1;1;0;1 +0;2;0;1;0;1;1;1 +0;2;1;0;1;0;0;1 +0;1;1;0;0;0;1;1 +1;0;0;1;1;0;1;1 +2;2;1;1;0;0;0;0 +0;1;1;0;0;0;0;0 +2;0;1;1;0;1;0;0 +0;1;1;0;0;0;0;1 +0;0;1;1;1;0;1;0 +0;2;0;0;0;0;1;0 +2;0;0;1;0;1;1;0 +0;0;1;0;1;0;1;1 +2;2;0;0;1;0;1;1 +2;2;0;1;0;0;0;1 +2;2;0;1;0;1;0;1 +1;2;1;0;0;1;0;1