From 31c9b8a3a34e8022035e3b56af885113ecee49ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sun, 4 Dec 2022 14:05:00 +0100 Subject: [PATCH] Refactor to ensemble the pieces --- cppfimdlp.cpython-310-darwin.so | Bin 0 -> 124408 bytes fimdlp/CPPFImdlp.cpp | 32 ++++------ fimdlp/CPPFImdlp.h | 9 ++- fimdlp/cfimdlp.pyx | 11 ++-- fimdlp/cppfimdlp.cpython-310-darwin.so | Bin 124408 -> 122968 bytes fimdlp/mdlp.py | 33 +++++++--- fimdlp/testcpp/FImdlp_unittest.cc | 84 +++++++------------------ sample.py | 8 +-- 8 files changed, 69 insertions(+), 108 deletions(-) create mode 100755 cppfimdlp.cpython-310-darwin.so diff --git a/cppfimdlp.cpython-310-darwin.so b/cppfimdlp.cpython-310-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..d246baf2f5242057ac03cc7a18ef046414fcb69f GIT binary patch literal 124408 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ú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

Ol9i zN&M0tV;8S(9chh@47auo2gjQ; zqZg-}aSSF_^{&d|OW(=O%vHax)NWvP3hE&iPJ|Lc_ruYy)s<3G*s#J{nD5H zi%Urdcq_W%8`h=oKNr)g^uBcP5Z>s2A+Nh1=GW27R?|uzd*}RQU-42FYu{4#68?c- zsxOy6@Jsu_L;TIbA^m{iaJ+&a{5yW#5Ntsw`S*W>vCyK5mtl_Isd%q~6h0=c-}f-T zKI^>-;=Ky;g5HPmUIjV8%R-o?r`7cG*M+=SLA+N%4*D|AVR{wBoTo0IH2$ZX0zXfE z`T8F*j@L=MM)7n1Vzv-F=dWx3F~2?jNBlY%z1QLU7CMd7cs1#N=4(ma6<*JrW6|q? zZzfhq=7qfAXtvuqR$t1NRoVnk4*ersUndRMpX4B}_z0sv+;frey>aEZN zTg`i;%X_11j-^q&+w8s3ReU#!-qN8N{We}vskFe06^N2mo6>iEWD@@y-sq|{Kz(t) zAA0e>6f3-CPeZ{u-z=+C(ib?CmTzBRsndK>?w|ApHSfJE@4YM8ndyc2VY_rKoL8}j zZP(f^uO1^#{(=H;JgOuLZ%!50t$9IpxbSYPk}Ra^T9Ynl7v8-nz9Hsbq~ CPPFImdlp::getCutPoints() + samples CPPFImdlp::getCutPoints() { - return cutPoints; + samples output(cutPoints.size()); + std::transform(cutPoints.begin(), cutPoints.end(), output.begin(), + [](cutPoint_t cut) { return cut.toValue; }); + return output; } labels CPPFImdlp::getDiscretizedValues() { @@ -48,28 +51,19 @@ namespace mdlp { this->xDiscretized = labels(X.size(), -1); this->numClasses = Metrics::numClasses(y, indices, 0, X.size()); - if (proposed) { - computeCutPointsProposed(); + if (proposal) { + computeCutPointsProposal(); } else { computeCutPointsOriginal(); } filterCutPoints(); - applyCutPoints(); - return *this; - } - labels& CPPFImdlp::transform(samples& X_) - { - indices_t indices_transform = sortIndices(X_); - applyCutPoints(); - return xDiscretized; - } - void CPPFImdlp::applyCutPoints() - { + // Apply cut points to the input vector for (auto cut : cutPoints) { for (size_t i = cut.start; i < cut.end; i++) { xDiscretized[indices[i]] = cut.classNumber; } } + return *this; } bool CPPFImdlp::evaluateCutPoint(cutPoint_t rest, cutPoint_t candidate) { @@ -142,7 +136,7 @@ namespace mdlp { } cutPoints = filtered; } - void CPPFImdlp::computeCutPointsProposed() + void CPPFImdlp::computeCutPointsProposal() { cutPoints_t cutPts; cutPoint_t cutPoint; @@ -206,7 +200,7 @@ namespace mdlp { if (debug) { std::cout << "Entropy of the dataset: " << Metrics::entropy(y, indices, 0, numElements + 1, numClasses) << std::endl; for (auto cutPt : cutPts) - std::cout << "Entropy: " << Metrics::entropy(y, indices, cutPt.start, cutPt.end, numClasses) << " :Proposed: Cut point: " << cutPt; + std::cout << "Entropy: " << Metrics::entropy(y, indices, cutPt.start, cutPt.end, numClasses) << " :Proposal: Cut point: " << cutPt; } cutPoints = cutPts; } diff --git a/fimdlp/CPPFImdlp.h b/fimdlp/CPPFImdlp.h index 5f29fb8..8965092 100644 --- a/fimdlp/CPPFImdlp.h +++ b/fimdlp/CPPFImdlp.h @@ -5,7 +5,7 @@ namespace mdlp { class CPPFImdlp { protected: - bool proposed; // proposed algorithm or original algorithm + bool proposal; // proposed algorithm or original algorithm int precision; bool debug; float divider; @@ -19,21 +19,20 @@ namespace mdlp { void setCutPoints(cutPoints_t); static indices_t sortIndices(samples&); void computeCutPointsOriginal(); - void computeCutPointsProposed(); + void computeCutPointsProposal(); bool evaluateCutPoint(cutPoint_t, cutPoint_t); void filterCutPoints(); - void applyCutPoints(); public: CPPFImdlp(); CPPFImdlp(bool, int, bool debug = false); ~CPPFImdlp(); - cutPoints_t getCutPoints(); + samples getCutPoints(); indices_t getIndices(); labels getDiscretizedValues(); void debugPoints(samples&, labels&); CPPFImdlp& fit(samples&, labels&); - labels& transform(samples&); + labels transform(samples&); }; } #endif \ No newline at end of file diff --git a/fimdlp/cfimdlp.pyx b/fimdlp/cfimdlp.pyx index 5093f96..fa3148d 100644 --- a/fimdlp/cfimdlp.pyx +++ b/fimdlp/cfimdlp.pyx @@ -12,9 +12,8 @@ cdef extern from "CPPFImdlp.h" namespace "mdlp": CPPFImdlp() except + CPPFImdlp(bool, int, bool) except + CPPFImdlp& fit(vector[float]&, vector[int]&) - vector[int] transform(vector[float]&) vector[int] getDiscretizedValues() - vector[CutPointBody] getCutPoints() + vector[float] getCutPoints() class PcutPoint_t: @@ -26,16 +25,14 @@ class PcutPoint_t: cdef class CFImdlp: cdef CPPFImdlp *thisptr - def __cinit__(self, precision=6, debug=False, proposed=True): - # Proposed or original algorithm - self.thisptr = new CPPFImdlp(proposed, precision, debug) + def __cinit__(self, precision=6, debug=False, proposal=True): + # Proposal or original algorithm + self.thisptr = new CPPFImdlp(proposal, precision, debug) def __dealloc__(self): del self.thisptr def fit(self, X, y): self.thisptr.fit(X, y) return self - def transform(self, X): - return self.thisptr.transform(X) def get_discretized_values(self): return self.thisptr.getDiscretizedValues() def get_cut_points(self): diff --git a/fimdlp/cppfimdlp.cpython-310-darwin.so b/fimdlp/cppfimdlp.cpython-310-darwin.so index 623dd44113b5ccc2761b7c77014d6b23b7fba18c..a367999cdbc6ad0fc0992a788e8ef257b2f40ac4 100755 GIT binary patch literal 122968 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 aL27NGAN%ni3c{-m@@b(d9ttAAl>Y^Fr9YPd literal 124408 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 diff --git a/fimdlp/mdlp.py b/fimdlp/mdlp.py index 090766a..a0603b1 100644 --- a/fimdlp/mdlp.py +++ b/fimdlp/mdlp.py @@ -6,6 +6,9 @@ from sklearn.utils.validation import check_X_y, check_array, check_is_fitted class FImdlp(TransformerMixin, BaseEstimator): + def __init__(self, proposal=True): + self.proposal = proposal # proposed algorithm or original algorithm + """Fayyad - Irani MDLP discretization algorithm. Parameters @@ -57,11 +60,18 @@ class FImdlp(TransformerMixin, BaseEstimator): X, y = self._check_params_fit( X, y, expected_args=["class_name", "features"], kwargs=kwargs ) - self.n_features_ = X.shape[1] self.X_ = X self.y_ = y - self.discretizer_ = CFImdlp(debug=True, proposed=False) + self.discretizer_ = [None] * self.n_features_ + self.cut_points_ = [None] * self.n_features_ + # Can do it in parallel + for feature in range(self.n_features_): + self.discretizer_[feature] = CFImdlp(proposal=self.proposal) + self.discretizer_[feature].fit(X[:, feature], y) + self.cut_points_[feature] = self.discretizer_[ + feature + ].get_cut_points() return self def transform(self, X): @@ -91,6 +101,15 @@ class FImdlp(TransformerMixin, BaseEstimator): raise ValueError( "Shape of input is different from what was seen in `fit`" ) + result = np.zeros_like(X, dtype=np.int32) - 1 + # Can do it in parallel + for feature in range(self.n_features_): + result[:, feature] = np.searchsorted( + self.cut_points_[feature], X[:, feature] + ) + return result + + def test(self): print("Calculating cut points in python for first feature") yz = self.y_.copy() xz = X[:, 0].copy() @@ -102,7 +121,7 @@ class FImdlp(TransformerMixin, BaseEstimator): print(f"Cut point: ({xz[i-1]}, {xz[i]}) ({yz[i-1]}, {yz[i]})") cuts.append((xz[i] + xz[i - 1]) / 2) print("Cuts calculados en python: ", cuts) - print("Cuts calculados en C++") + print("-- Cuts calculados en C++ --") print("Cut points for each feature in Iris dataset:") for i in range(0, 1): # datax = self.X_[np.argsort(self.X_[:, i]), i] @@ -123,12 +142,6 @@ class FImdlp(TransformerMixin, BaseEstimator): print(X_translated) print("*******************************") print("Disretized values:") - print(self.discretizer_.transform(datax)) + print(self.discretizer_.get_discretized_values()) print("*******************************") - print("indices:", np.argsort(X[:, 0])) - # Xcutpoints = self.discretizer_.cut_points_ant(datax, y_) - # print( - # f"Ant ({len(Xcutpoints)}):{self.features_[i]:20s}: " - # f"{Xcutpoints}" - # ) return X diff --git a/fimdlp/testcpp/FImdlp_unittest.cc b/fimdlp/testcpp/FImdlp_unittest.cc index d14a49d..b3d504c 100644 --- a/fimdlp/testcpp/FImdlp_unittest.cc +++ b/fimdlp/testcpp/FImdlp_unittest.cc @@ -37,6 +37,19 @@ namespace mdlp { prev = X[testSortedIndices[i]]; } } + void checkCutPoints(cutPoints_t& expected) + { + int expectedSize = expected.size(); + EXPECT_EQ(cutPoints.size(), expectedSize); + for (auto i = 0; i < expectedSize; i++) { + EXPECT_EQ(cutPoints[i].start, expected[i].start); + EXPECT_EQ(cutPoints[i].end, expected[i].end); + EXPECT_EQ(cutPoints[i].classNumber, expected[i].classNumber); + EXPECT_NEAR(cutPoints[i].fromValue, expected[i].fromValue, precision); + EXPECT_NEAR(cutPoints[i].toValue, expected[i].toValue, precision); + } + } + }; TEST_F(TestFImdlp, SortIndices) { @@ -60,22 +73,13 @@ namespace mdlp { TEST_F(TestFImdlp, ComputeCutPointsOriginal) { cutPoints_t computed, expected; - int expectedSize = 3; expected = { { 0, 4, -1, -3.4028234663852886e+38, 5.15 }, { 4, 6, -1, 5.15, 5.45 }, { 6, 10, -1, 5.45, 3.4028234663852886e+38 } }; setCutPoints(cutPoints_t()); computeCutPointsOriginal(); - computed = getCutPoints(); - EXPECT_EQ(computed.size(), expectedSize); - for (auto i = 0; i < expectedSize; i++) { - EXPECT_EQ(computed[i].start, expected[i].start); - EXPECT_EQ(computed[i].end, expected[i].end); - EXPECT_EQ(computed[i].classNumber, expected[i].classNumber); - EXPECT_NEAR(computed[i].fromValue, expected[i].fromValue, precision); - EXPECT_NEAR(computed[i].toValue, expected[i].toValue, precision); - } + checkCutPoints(expected); } TEST_F(TestFImdlp, ComputeCutPointsOriginalGCase) { @@ -83,22 +87,13 @@ namespace mdlp { expected = { { 0, 4, -1, -3.4028234663852886e+38, 3.4028234663852886e+38 }, }; - int expectedSize = 1; X = { 0, 1, 2, 2 }; y = { 1, 1, 1, 2 }; fit(X, y); computeCutPointsOriginal(); - computed = getCutPoints(); - EXPECT_EQ(computed.size(), expectedSize); - for (auto i = 0; i < expectedSize; i++) { - EXPECT_EQ(computed[i].start, expected[i].start); - EXPECT_EQ(computed[i].end, expected[i].end); - EXPECT_EQ(computed[i].classNumber, expected[i].classNumber); - EXPECT_NEAR(computed[i].fromValue, expected[i].fromValue, precision); - EXPECT_NEAR(computed[i].toValue, expected[i].toValue, precision); - } + checkCutPoints(expected); } - TEST_F(TestFImdlp, ComputeCutPointsProposed) + TEST_F(TestFImdlp, ComputeCutPointsProposal) { cutPoints_t computed, expected; expected = { @@ -106,57 +101,20 @@ namespace mdlp { { 6, 9, -1, 5.4, 5.85 }, { 9, 10, -1, 5.85, 3.4028234663852886e+38 } }; - int expectedSize = 4; - computeCutPointsProposed(); - computed = getCutPoints(); - EXPECT_EQ(computed.size(), expectedSize); - for (auto i = 0; i < expectedSize; i++) { - EXPECT_EQ(computed[i].start, expected[i].start); - EXPECT_EQ(computed[i].end, expected[i].end); - EXPECT_EQ(computed[i].classNumber, expected[i].classNumber); - EXPECT_NEAR(computed[i].fromValue, expected[i].fromValue, precision); - EXPECT_NEAR(computed[i].toValue, expected[i].toValue, precision); - } + computeCutPointsProposal(); + checkCutPoints(expected); } - TEST_F(TestFImdlp, ComputeCutPointsProposedGCase) + TEST_F(TestFImdlp, ComputeCutPointsProposalGCase) { cutPoints_t computed, expected; expected = { { 0, 3, -1, -3.4028234663852886e+38, 1.5 }, { 3, 4, -1, 1.5, 3.4028234663852886e+38 } }; - int expectedSize = 2; X = { 0, 1, 2, 2 }; y = { 1, 1, 1, 2 }; fit(X, y); - computeCutPointsProposed(); - computed = getCutPoints(); - EXPECT_EQ(computed.size(), expectedSize); - for (auto i = 0; i < expectedSize; i++) { - EXPECT_EQ(computed[i].start, expected[i].start); - EXPECT_EQ(computed[i].end, expected[i].end); - EXPECT_EQ(computed[i].classNumber, expected[i].classNumber); - EXPECT_NEAR(computed[i].fromValue, expected[i].fromValue, precision); - EXPECT_NEAR(computed[i].toValue, expected[i].toValue, precision); - } - } - TEST_F(TestFImdlp, ApplyCutPoints) - { - cutPoints_t expected = { - { 0, 4, 17, -3.4028234663852886e+38, 5.1 }, { 4, 6, 31, 5.1, 5.4 }, - { 6, 8, 59, 5.4, 5.85 }, - { 8, 10, 41, 5.85, 3.4028234663852886e+38 } - }; - setCutPoints(expected); - applyCutPoints(); - labels expected_x = getDiscretizedValues(); - indices_t indices_x = getIndices(); - for (auto i = 0; i < 5; i++) { - std::cout << "cutPoint[" << i << "].start = " << expected[i].start << std::endl; - for (auto j = expected[i].start; j < expected[i].end; j++) { - std::cout << expected_x[j] << expected[i].classNumber << std::endl; - EXPECT_EQ(expected_x[indices_x[j]], expected[i].classNumber); - } - } + computeCutPointsProposal(); + checkCutPoints(expected); } } \ No newline at end of file diff --git a/sample.py b/sample.py index 36d4699..c988b65 100644 --- a/sample.py +++ b/sample.py @@ -65,11 +65,11 @@ features = data.feature_names # test.fit(X, y, features=features) # test.transform(X) # test.get_cut_points() -for proposed in [True, False]: +for proposal in [True, False]: X = data.data y = data.target - print("*** Proposed: ", proposed) - test = CFImdlp(debug=True, proposed=proposed) + print("*** Proposal: ", proposal) + test = CFImdlp(debug=True, proposal=proposal) test.fit(X[:, 0], y) result = test.get_cut_points() for item in result: @@ -118,7 +118,7 @@ for proposed in [True, False]: # X = [5.7, 5.3, 5.2, 5.1, 5.0, 5.6, 5.1, 6.0, 5.1, 5.9] # y = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2] # indices = [4, 3, 6, 8, 2, 1, 5, 0, 9, 7] -# clf = CFImdlp(debug=True, proposed=False) +# clf = CFImdlp(debug=True, proposal=False) # clf.fit(X, y) # print(clf.get_cut_points()) # y = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2]