From 6c507a24b00ce014e93907bd81c2073793510989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Mon, 28 Nov 2022 18:03:46 +0100 Subject: [PATCH] Fix entroy and ig --- fimdlp/CPPFImdlp.cpp | 13 +++++++++++-- fimdlp/Metrics.cpp | 6 +++--- fimdlp/Metrics.h | 6 +++--- fimdlp/cppfimdlp.cpython-310-darwin.so | Bin 93184 -> 93584 bytes fimdlp/mdlp.py | 18 +++++++++++++----- sample.py | 4 +++- setup.py | 2 +- 7 files changed, 34 insertions(+), 15 deletions(-) diff --git a/fimdlp/CPPFImdlp.cpp b/fimdlp/CPPFImdlp.cpp index af89e5d..c3b650a 100644 --- a/fimdlp/CPPFImdlp.cpp +++ b/fimdlp/CPPFImdlp.cpp @@ -1,6 +1,7 @@ #include "CPPFImdlp.h" #include #include +#include #include "Metrics.h" namespace CPPFImdlp { @@ -20,7 +21,8 @@ namespace CPPFImdlp std::vector cutPts; std::vector cutIdx; float xPrev, cutPoint; - int yPrev, idxPrev; + int yPrev; + size_t idxPrev; std::vector indices = sortIndices(X); xPrev = X.at(indices[0]); yPrev = y.at(indices[0]); @@ -34,7 +36,7 @@ namespace CPPFImdlp // Definition 2 Cut points are always on boundaries if (y.at(*index) != yPrev && xPrev < X.at(*index)) { - cutPoint = round((X.at(*index) + xPrev) / 2 * divider) / divider; + cutPoint = round(divider * (X.at(*index) + xPrev) / 2) / divider; if (debug) { std::cout << "Cut point: " << (xPrev + X.at(*index)) / 2 << " //"; @@ -57,6 +59,13 @@ namespace CPPFImdlp std::cout << *cutPoint << " -> " << Metrics::informationGain(y, indices, 0, indices.size(), *cutPoint, nc) << std::endl; // << Metrics::informationGain(y, 0, y.size(), *cutPoint, Metrics::numClasses(y, 0, y.size())) << std::endl; } + std::cout << "+++++++++++++++++++++++" << std::endl; + for (size_t i = 0; i < y.size(); i++) + { + printf("(%3.1f, %d)\n", X[indices.at(i)], y[indices.at(i)]); + } + std::cout << "+++++++++++++++++++++++" << std::endl; + return cutPts; } // Argsort from https://stackoverflow.com/questions/1577475/c-sorting-and-keeping-track-of-indexes diff --git a/fimdlp/Metrics.cpp b/fimdlp/Metrics.cpp index 682b8f7..9613bd4 100644 --- a/fimdlp/Metrics.cpp +++ b/fimdlp/Metrics.cpp @@ -4,7 +4,7 @@ namespace CPPFImdlp Metrics::Metrics() { } - int Metrics::numClasses(std::vector &y, std::vector indices, int start, int end) + int Metrics::numClasses(std::vector &y, std::vector indices, size_t start, size_t end) { int nClasses = 1; int yAnt = y.at(start); @@ -18,7 +18,7 @@ namespace CPPFImdlp } return nClasses; } - float Metrics::entropy(std::vector &y, std::vector &indices, int start, int end, int nClasses) + float Metrics::entropy(std::vector &y, std::vector &indices, size_t start, size_t end, int nClasses) { float entropy = 0; int nElements = 0; @@ -38,7 +38,7 @@ namespace CPPFImdlp } return entropy; } - float Metrics::informationGain(std::vector &y, std::vector &indices, int start, int end, int cutPoint, int nClasses) + float Metrics::informationGain(std::vector &y, std::vector &indices, size_t start, size_t end, size_t cutPoint, int nClasses) { float iGain = 0.0; float entropy, entropyLeft, entropyRight; diff --git a/fimdlp/Metrics.h b/fimdlp/Metrics.h index 60ef9a5..96a9f44 100644 --- a/fimdlp/Metrics.h +++ b/fimdlp/Metrics.h @@ -9,9 +9,9 @@ namespace CPPFImdlp { public: Metrics(); - static int numClasses(std::vector &, std::vector, int, int); - static float entropy(std::vector &, std::vector &, int, int, int); - static float informationGain(std::vector &y, std::vector &indices, int start, int end, int cutPoint, int nClasses); + static int numClasses(std::vector &, std::vector, size_t, size_t); + static float entropy(std::vector &, std::vector &, size_t, size_t, int); + static float informationGain(std::vector &, std::vector &, size_t, size_t, size_t, int); }; } #endif \ No newline at end of file diff --git a/fimdlp/cppfimdlp.cpython-310-darwin.so b/fimdlp/cppfimdlp.cpython-310-darwin.so index 97e36f9a734c9aef570a53d24e7aba028f2076d1..46640fbc25d015d754a71a50556afbed7067c03e 100755 GIT binary patch delta 17950 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 OY3{%KnOVxL;Qt4OK=Mxj delta 17517 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 diff --git a/fimdlp/mdlp.py b/fimdlp/mdlp.py index 1e35334..8f8399f 100644 --- a/fimdlp/mdlp.py +++ b/fimdlp/mdlp.py @@ -95,13 +95,21 @@ class FImdlp(TransformerMixin, BaseEstimator): print("Cut points for each feature in Iris dataset:") yz = self.y_.copy() xz = X[:, 0].copy() - print("Xz: ", xz) - print("Yz: ", yz) - print("Solución:") - print("Xz*: ", np.sort(X[:, 0])) - print("yz*: ", yz[np.argsort(X[:, 0])]) + xz = xz[np.argsort(X[:, 0])] + yz = yz[np.argsort(X[:, 0])] + cuts = [] + for i in range(1, len(yz)): + if yz[i] != yz[i - 1] and xz[i - 1] < xz[i]: + print(f"Cut point: ({xz[i-1]}, {xz[i]}) ({yz[i-1]}, {yz[i]})") + cuts.append((xz[i] + xz[i - 1]) / 2) for i in range(0, 1): # self.n_features_): datax = np.sort(X[:, i]) Xcutpoints = self.discretizer_.cut_points(datax, self.y_) print(f"{self.features_[i]:20s}: {Xcutpoints}") + print("Solución cut_points: ", cuts) + print(xz) + print("***********") + for i in range(0, len(yz)): + print(f"({xz[i]}, {yz[i]})") + print("***********") return X diff --git a/sample.py b/sample.py index 911dee0..0382c30 100644 --- a/sample.py +++ b/sample.py @@ -7,7 +7,9 @@ X = data.data y = data.target features = data.feature_names test = FImdlp() -# Xcutpoints = test.fit(X, y, features=features).transform(X) +Xcutpoints = test.fit(X, y, features=features).transform(X) clf = CFImdlp(debug=True) print("Cut points for feature 0 in Iris dataset:") print(clf.cut_points(X[:, 0], y)) +print("Xcut") +print(Xcutpoints) diff --git a/setup.py b/setup.py index 7851132..b1ce695 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ setup( ], language="c++", include_dirs=["fimdlp"], - extra_compile_args=["-std=c++20"], + extra_compile_args=["-std=c++2a"], ), ] )