mirror of
https://github.com/Doctorado-ML/FImdlp.git
synced 2025-08-17 00:15:52 +00:00
50
.github/workflows/main.yml
vendored
Normal file
50
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
pull_request:
|
||||||
|
branches: [master]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||||
|
python: [3.9, "3.10"]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python ${{ matrix.python }}
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python }}
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
pip install -q --upgrade pip
|
||||||
|
pip install -q --upgrade codecov coverage black flake8 codacy-coverage
|
||||||
|
- name: Build and install
|
||||||
|
run: |
|
||||||
|
cd FImdlp
|
||||||
|
make install
|
||||||
|
- name: Lint
|
||||||
|
run: |
|
||||||
|
black --check --diff src
|
||||||
|
flake8 --count --per-file-ignores="__init__.py:F401" src
|
||||||
|
- name: Tests
|
||||||
|
run: |
|
||||||
|
coverage run -m unittest discover -v - s src
|
||||||
|
coverage xml
|
||||||
|
- name: Upload coverage to Codecov
|
||||||
|
uses: codecov/codecov-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
files: ./coverage.xml
|
||||||
|
- name: Run codacy-coverage-reporter
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
uses: codacy/codacy-coverage-reporter-action@master
|
||||||
|
with:
|
||||||
|
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||||
|
coverage-reports: coverage.xml
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -133,4 +133,5 @@ cfimdlp.cpp
|
|||||||
cmake-build-debug
|
cmake-build-debug
|
||||||
cmake-build-debug/**
|
cmake-build-debug/**
|
||||||
**/lcoverage/**
|
**/lcoverage/**
|
||||||
**/x/*
|
**/x/*
|
||||||
|
**/*.so
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "fimdlp/cppmdlp"]
|
||||||
|
path = src/cppfimdlp
|
||||||
|
url = https://github.com/rmontanana/mdlp
|
@@ -1 +0,0 @@
|
|||||||
include fimdlp/CPPFImdlp.h
|
|
38
Makefile
38
Makefile
@@ -1,44 +1,34 @@
|
|||||||
SHELL := /bin/bash
|
SHELL := /bin/bash
|
||||||
.DEFAULT_GOAL := help
|
.DEFAULT_GOAL := help
|
||||||
.PHONY: coverage deps help lint push test doc build
|
.PHONY: coverage deps help lint push test build install audit
|
||||||
|
|
||||||
clean: ## Clean up
|
clean: ## Clean up
|
||||||
rm -rf build dist *.egg-info
|
rm -rf build dist src/*.egg-info
|
||||||
if [ -f fimdlp/cfimdlp.cpp ]; then rm fimdlp/cfimdlp.cpp; fi;
|
if [ -f src/fimdlp/cfimdlp.cpp ]; then rm src/fimdlp/cfimdlp.cpp; fi;
|
||||||
if [ -f fimdlp/cppfimdlp.cpython-310-darwin.so ]; then rm fimdlp/cppfimdlp.cpython-310-darwin.so; fi;
|
for file in src/fimdlp/*.so; do \
|
||||||
if [ -d fimdlp/testcpp/build ]; then rm -fr fimdlp/testcpp/build/* ; fi;
|
if [ -f $${file} ]; then rm $${file}; fi; \
|
||||||
if [ -d fimdlp/testcpp/lcoverage ]; then rm -fr fimdlp/testcpp/lcoverage/* ; fi;
|
done
|
||||||
|
|
||||||
test:
|
test:
|
||||||
coverage run -m unittest -v fimdlp.tests
|
coverage run -m unittest discover -v -s src
|
||||||
cd fimdlp/testcpp && ./test
|
|
||||||
|
|
||||||
coverage:
|
coverage:
|
||||||
if [ -d fimdlp/testcpp/build/CMakeFiles ]; then rm -fr fimdlp/testcpp/build/CMakeFiles/* ; fi;
|
|
||||||
make test
|
make test
|
||||||
cd fimdlp/testcpp && ./cover
|
|
||||||
coverage report -m
|
coverage report -m
|
||||||
|
|
||||||
lint: ## Lint and static-check
|
lint: ## Lint and static-check
|
||||||
black fimdlp
|
black src
|
||||||
flake8 fimdlp
|
flake8 --per-file-ignores="__init__.py:F401" src
|
||||||
|
|
||||||
push: ## Push code with tags
|
push: ## Push code with tags
|
||||||
git push && git push --tags
|
git push && git push --tags
|
||||||
|
|
||||||
build: ## Build package
|
build: ## Build package
|
||||||
rm -fr dist/*
|
|
||||||
rm -fr build/*
|
|
||||||
python -m build
|
|
||||||
|
|
||||||
buildext: ## Build extension
|
|
||||||
rm -fr dist/*
|
|
||||||
rm -fr build/*
|
|
||||||
make clean
|
make clean
|
||||||
python setup.py build_ext
|
python -m build --wheel
|
||||||
echo "Build extension success"
|
|
||||||
if [ -f build/lib.macosx-12-x86_64-cpython-310/cppfimdlp.cpython-310-darwin.so ] ; then mv build/lib.macosx-12-x86_64-cpython-310/cppfimdlp.cpython-310-darwin.so fimdlp; fi
|
install: ## Build extension
|
||||||
if [ -f build/lib.macosx-10.9-universal2-3.10/cppfimdlp.cpython-310-darwin.so ] ; then mv build/lib.macosx-10.9-universal2-3.10/cppfimdlp.cpython-310-darwin.so fimdlp; fi
|
make clean
|
||||||
|
pip install -e .
|
||||||
|
|
||||||
audit: ## Audit pip
|
audit: ## Audit pip
|
||||||
pip-audit
|
pip-audit
|
||||||
|
23
README.md
23
README.md
@@ -1,12 +1,31 @@
|
|||||||
# FImdlp
|
# FImdlp
|
||||||
|
|
||||||
Fayyad - Irani MDLP discretization algorithm
|
[](https://www.codacy.com/gh/Doctorado-ML/FImdlp/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Doctorado-ML/FImdlp&utm_campaign=Badge_Grade)
|
||||||
|
|
||||||
|
Discretization algorithm based on the paper by Usama M. Fayyad and Keki B. Irani
|
||||||
|
|
||||||
|
```
|
||||||
|
Multi-Interval Discretization of Continuous-Valued Attributes for Classification Learning. In Proceedings of the 13th International Joint Conference on Artificial Intelligence (IJCAI-95), pages 1022-1027, Montreal, Canada, August 1995.
|
||||||
|
```
|
||||||
|
|
||||||
## Build and usage sample
|
## Build and usage sample
|
||||||
|
|
||||||
|
### Python sample
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python setup.py build_ext --inplace
|
pip install -e .
|
||||||
python samples/sample.py iris --original
|
python samples/sample.py iris --original
|
||||||
python samples/sample.py iris --proposal
|
python samples/sample.py iris --proposal
|
||||||
python samples/sample.py -h # for more options
|
python samples/sample.py -h # for more options
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### C++ sample
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd samples
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
make
|
||||||
|
./sample iris
|
||||||
|
```
|
||||||
|
Binary file not shown.
273
debug.cpp
273
debug.cpp
@@ -1,273 +0,0 @@
|
|||||||
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;
|
|
||||||
|
|
||||||
std::cout << "Information Gain:" << std::endl;
|
|
||||||
auto nc = Metrics::numClasses(y, indices, 0, indices.size());
|
|
||||||
for (auto cutPoint = cutIdx.begin(); cutPoint != cutIdx.end(); ++cutPoint) {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
def test(self):
|
|
||||||
print("Calculating cut points in python for first feature")
|
|
||||||
yz = self.y_.copy()
|
|
||||||
xz = X[:, 0].copy()
|
|
||||||
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)
|
|
||||||
print("Cuts calculados en python: ", cuts)
|
|
||||||
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]
|
|
||||||
# y_ = self.y_[np.argsort(self.X_[:, i])]
|
|
||||||
datax = self.X_[:, i]
|
|
||||||
y_ = self.y_
|
|
||||||
self.discretizer_.fit(datax, y_)
|
|
||||||
Xcutpoints = self.discretizer_.get_cut_points()
|
|
||||||
print(
|
|
||||||
f"New ({len(Xcutpoints)}):{self.features_[i]:20s}: "
|
|
||||||
f"{[i['toValue'] for i in Xcutpoints]}"
|
|
||||||
)
|
|
||||||
X_translated = [
|
|
||||||
f"{i['classNumber']} - ({i['start']}, {i['end']}) - "
|
|
||||||
f"({i['fromValue']}, {i['toValue']})"
|
|
||||||
for i in Xcutpoints
|
|
||||||
]
|
|
||||||
print(X_translated)
|
|
||||||
print("*******************************")
|
|
||||||
print("Disretized values:")
|
|
||||||
print(self.discretizer_.get_discretized_values())
|
|
||||||
print("*******************************")
|
|
||||||
return X
|
|
||||||
|
|
||||||
c++
|
|
||||||
i: 0 4.3, 0
|
|
||||||
i : 1 4.4, 0
|
|
||||||
i : 2 4.4, 0
|
|
||||||
i : 3 4.4, 0
|
|
||||||
i : 4 4.5, 0
|
|
||||||
i : 5 4.6, 0
|
|
||||||
i : 6 4.6, 0
|
|
||||||
i : 7 4.6, 0
|
|
||||||
i : 8 4.6, 0
|
|
||||||
i : 9 4.7, 0
|
|
||||||
i : 10 4.7, 0
|
|
||||||
i : 11 4.8, 0
|
|
||||||
i : 12 4.8, 0
|
|
||||||
i : 13 4.8, 0
|
|
||||||
i : 14 4.8, 0
|
|
||||||
i : 15 4.8, 0
|
|
||||||
i : 16 4.9, 0
|
|
||||||
i : 17 4.9, 0
|
|
||||||
i : 18 4.9, 0
|
|
||||||
i : 19 4.9, 0
|
|
||||||
i : 20 4.9, 1
|
|
||||||
|
|
||||||
python
|
|
||||||
i : 0 4.3 0
|
|
||||||
i : 1 4.4 0
|
|
||||||
i : 2 4.4 0
|
|
||||||
i : 3 4.4 0
|
|
||||||
i : 4 4.5 0
|
|
||||||
i : 5 4.6 0
|
|
||||||
i : 6 4.6 0
|
|
||||||
i : 7 4.6 0
|
|
||||||
i : 8 4.6 0
|
|
||||||
i : 9 4.7 0
|
|
||||||
i : 10 4.7 0
|
|
||||||
i : 11 4.8 0
|
|
||||||
i : 12 4.8 0
|
|
||||||
i : 13 4.8 0
|
|
||||||
i : 14 4.8 0
|
|
||||||
i : 15 4.8 0
|
|
||||||
i : 16 4.9 1
|
|
||||||
i : 17 4.9 2
|
|
||||||
i : 18 4.9 0
|
|
||||||
i : 19 4.9 0
|
|
||||||
i : 20 4.9 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
idx: 20 entropy_left : 0 entropy_right : 0.488187 -> 0 150
|
|
||||||
idx : 21 entropy_left : 0.0670374 entropy_right : 0.489381 -> 0 150
|
|
||||||
idx : 22 entropy_left : 0.125003 entropy_right : 0.490573 -> 0 150
|
|
||||||
idx : 24 entropy_left : 0.11507 entropy_right : 0.482206 -> 0 150
|
|
||||||
idx : 25 entropy_left : 0.162294 entropy_right : 0.483488 -> 0 150
|
|
||||||
idx : 29 entropy_left : 0.141244 entropy_right : 0.462922 -> 0 150
|
|
||||||
idx : 30 entropy_left : 0.178924 entropy_right : 0.464386 -> 0 150
|
|
||||||
idx : 33 entropy_left : 0.163818 entropy_right : 0.444778 -> 0 150
|
|
||||||
idx : 34 entropy_left : 0.195735 entropy_right : 0.44637 -> 0 150
|
|
||||||
idx : 44 entropy_left : 0.154253 entropy_right : 0.339183 -> 0 150
|
|
||||||
idx : 45 entropy_left : 0.178924 entropy_right : 0.34098 -> 0 150
|
|
||||||
idx : 51 entropy_left : 0.159328 entropy_right : 0.217547 -> 0 150
|
|
||||||
idx : 52 entropy_left : 0.180508 entropy_right : 0.219019 -> 0 150
|
|
||||||
idx : 53 entropy_left : 0.177368 entropy_right : 0.189687 -> 0 150
|
|
||||||
idx : 58 entropy_left : 0.265229 entropy_right : 0.196677 -> 0 150
|
|
||||||
idx : 59 entropy_left : 0.261331 entropy_right : 0.162291 -> 0 150
|
|
||||||
idx : 61 entropy_left : 0.289819 entropy_right : 0.164857 -> 0 150
|
|
||||||
idx : 62 entropy_left : 0.302928 entropy_right : 0.166175 -> 0 150
|
|
||||||
idx : 68 entropy_left : 0.36831 entropy_right : 0.174607 -> 0 150
|
|
||||||
idx : 69 entropy_left : 0.364217 entropy_right : 0.131848 -> 0 150
|
|
||||||
idx : 70 entropy_left : 0.373248 entropy_right : 0.133048 -> 0 150
|
|
||||||
idx : 71 entropy_left : 0.381826 entropy_right : 0.134273 -> 0 150
|
|
||||||
idx : 72 entropy_left : 0.377855 entropy_right : 0.0805821 -> 0 150
|
|
||||||
idx : 74 entropy_left : 0.393817 entropy_right : 0.0822096 -> 0 150
|
|
||||||
idx : 75 entropy_left : 0.401218 entropy_right : 0.0830509 -> 0 150
|
|
||||||
idx : 76 entropy_left : 0.397415 entropy_right : 0 -> 0 150
|
|
||||||
idx : 77 entropy_left : 0.4045 entropy_right : 0 -> 0 150
|
|
||||||
idx : 78 entropy_left : 0.411247 entropy_right : 0 -> 0 150
|
|
||||||
idx : 79 entropy_left : 0.417674 entropy_right : 0 -> 0 150
|
|
||||||
idx : 81 entropy_left : 0.429626 entropy_right : 0 -> 0 150
|
|
||||||
idx : 83 entropy_left : 0.440472 entropy_right : 0 -> 0 150
|
|
||||||
idx : 84 entropy_left : 0.445513 entropy_right : 0 -> 0 150
|
|
||||||
idx : 87 entropy_left : 0.459246 entropy_right : 0 -> 0 150
|
|
||||||
idx : 88 entropy_left : 0.463395 entropy_right : 0 -> 0 150
|
|
||||||
idx : 89 entropy_left : 0.467347 entropy_right : 0 -> 0 150
|
|
||||||
idx : 91 entropy_left : 0.474691 entropy_right : 0 -> 0 150
|
|
||||||
idx : 95 entropy_left : 0.487368 entropy_right : 0 -> 0 150
|
|
||||||
idx : 97 entropy_left : 0.492813 entropy_right : 0 -> 0 150
|
|
||||||
idx : 99 entropy_left : 0.497728 entropy_right : 0 -> 0 150
|
|
||||||
idx : 101 entropy_left : 0.502156 entropy_right : 0 -> 0 150
|
|
||||||
idx : 102 entropy_left : 0.504201 entropy_right : 0 -> 0 150
|
|
||||||
idx : 104 entropy_left : 0.507973 entropy_right : 0 -> 0 150
|
|
||||||
idx : 105 entropy_left : 0.509709 entropy_right : 0 -> 0 150
|
|
||||||
idx : 106 entropy_left : 0.511351 entropy_right : 0 -> 0 150
|
|
||||||
idx : 107 entropy_left : 0.512902 entropy_right : 0 -> 0 150
|
|
||||||
idx : 109 entropy_left : 0.515747 entropy_right : 0 -> 0 150
|
|
||||||
idx : 110 entropy_left : 0.517047 entropy_right : 0 -> 0 150
|
|
||||||
idx : 113 entropy_left : 0.520497 entropy_right : 0 -> 0 150
|
|
||||||
idx : 114 entropy_left : 0.521506 entropy_right : 0 -> 0 150
|
|
||||||
idx : 117 entropy_left : 0.524149 entropy_right : 0 -> 0 150
|
|
||||||
idx : 118 entropy_left : 0.52491 entropy_right : 0 -> 0 150
|
|
||||||
idx : 120 entropy_left : 0.526264 entropy_right : 0 -> 0 150
|
|
||||||
idx : 122 entropy_left : 0.52741 entropy_right : 0 -> 0 150
|
|
||||||
idx : 127 entropy_left : 0.52946 entropy_right : 0 -> 0 150
|
|
||||||
idx : 130 entropy_left : 0.530197 entropy_right : 0 -> 0 150
|
|
||||||
idx : 132 entropy_left : 0.530507 entropy_right : 0 -> 0 150
|
|
||||||
idx : 133 entropy_left : 0.530611 entropy_right : 0 -> 0 150
|
|
||||||
idx : 134 entropy_left : 0.530684 entropy_right : 0 -> 0 150
|
|
||||||
idx : 135 entropy_left : 0.530726 entropy_right : 0 -> 0 150
|
|
||||||
idx : 137 entropy_left : 0.530721 entropy_right : 0 -> 0 150
|
|
||||||
idx : 138 entropy_left : 0.530677 entropy_right : 0 -> 0 150
|
|
||||||
cut : 5.5 index : 53
|
|
||||||
start : 0 cut : 53 end : 150
|
|
||||||
k = 3 k1 = 3 k2 = 3 ent = 0.528321 ent1 = 0.177368 ent2 = 0.189687
|
|
||||||
ig = 0.342987 delta = 4.16006 N 150 term 0.0758615
|
|
||||||
¡Ding!5.5 53
|
|
||||||
|
|
||||||
|
|
||||||
idx : 20 entropy_left : 0 entropy_right : 1.5485806065228545 -> 0 150
|
|
||||||
idx : 21 entropy_left : 0.2761954276479391 entropy_right : 1.549829505666378 -> 0 150
|
|
||||||
idx : 22 entropy_left : 0.5304060778306042 entropy_right : 1.5511852922535474 -> 0 150
|
|
||||||
idx : 24 entropy_left : 0.4971501836369671 entropy_right : 1.5419822842863982 -> 0 150
|
|
||||||
idx : 25 entropy_left : 0.6395563653739031 entropy_right : 1.5433449229510985 -> 0 150
|
|
||||||
idx : 29 entropy_left : 0.574828144380386 entropy_right : 1.5202013991459298 -> 0 150
|
|
||||||
idx : 30 entropy_left : 0.6746799231474564 entropy_right : 1.521677608876836 -> 0 150
|
|
||||||
idx : 33 entropy_left : 0.6311718053929063 entropy_right : 1.4992098113026513 -> 0 150
|
|
||||||
idx : 34 entropy_left : 0.7085966983474103 entropy_right : 1.5007111828980744 -> 0 150
|
|
||||||
idx : 44 entropy_left : 0.5928251064639408 entropy_right : 1.3764263022492553 -> 0 150
|
|
||||||
idx : 45 entropy_left : 0.6531791627726858 entropy_right : 1.3779796176519241 -> 0 150
|
|
||||||
idx : 51 entropy_left : 0.5990326006132177 entropy_right : 1.2367928607774141 -> 0 150
|
|
||||||
idx : 52 entropy_left : 0.6496096346956632 entropy_right : 1.2377158231343603 -> 0 150
|
|
||||||
idx : 53 entropy_left : 0.6412482850735854 entropy_right : 1.2046986815511866 -> 0 150
|
|
||||||
idx : 58 entropy_left : 0.8211258609270055 entropy_right : 1.2056112071736118 -> 0 150
|
|
||||||
idx : 59 entropy_left : 0.8128223064150747 entropy_right : 1.167065448996099 -> 0 150
|
|
||||||
idx : 61 entropy_left : 0.8623538561746379 entropy_right : 1.1653351793699953 -> 0 150
|
|
||||||
idx : 62 entropy_left : 0.9353028851500502 entropy_right : 1.1687172769890006 -> 0 150
|
|
||||||
idx : 68 entropy_left : 1.031929035599206 entropy_right : 1.1573913563403753 -> 0 150
|
|
||||||
idx : 69 entropy_left : 1.0246284743137688 entropy_right : 1.109500797247481 -> 0 150
|
|
||||||
idx : 70 entropy_left : 1.036186417911213 entropy_right : 1.105866621101474 -> 0 150
|
|
||||||
idx : 71 entropy_left : 1.0895830429620594 entropy_right : 1.1104593064416028 -> 0 150
|
|
||||||
idx : 72 entropy_left : 1.0822273380873693 entropy_right : 1.0511407586429597 -> 0 150
|
|
||||||
idx : 74 entropy_left : 1.1015727511177442 entropy_right : 1.041722068095403 -> 0 150
|
|
||||||
idx : 75 entropy_left : 1.1457749842070042 entropy_right : 1.0462881865460743 -> 0 150
|
|
||||||
idx : 76 entropy_left : 1.1387129726704701 entropy_right : 0.9568886656798212 -> 0 150
|
|
||||||
idx : 77 entropy_left : 1.1468549240968817 entropy_right : 0.9505668528932196 -> 0 150
|
|
||||||
idx : 78 entropy_left : 1.1848333092150132 entropy_right : 0.9544340029249649 -> 0 150
|
|
||||||
idx : 79 entropy_left : 1.1918623939938016 entropy_right : 0.9477073729342066 -> 0 150
|
|
||||||
idx : 81 entropy_left : 1.2548698305334247 entropy_right : 0.9557589912150009 -> 0 150
|
|
||||||
idx : 83 entropy_left : 1.2659342914094807 entropy_right : 0.9411864371816835 -> 0 150
|
|
||||||
idx : 84 entropy_left : 1.2922669208691815 entropy_right : 0.9456603046006402 -> 0 150
|
|
||||||
idx : 87 entropy_left : 1.3041589171425696 entropy_right : 0.9182958340544896 -> 0 150
|
|
||||||
idx : 88 entropy_left : 1.327572716814381 entropy_right : 0.9235785996175947 -> 0 150
|
|
||||||
idx : 89 entropy_left : 1.330465426809402 entropy_right : 0.9127341558073343 -> 0 150
|
|
||||||
idx : 91 entropy_left : 1.3709454625942779 entropy_right : 0.9238422284571814 -> 0 150
|
|
||||||
idx : 95 entropy_left : 1.378063041001916 entropy_right : 0.8698926856041563 -> 0 150
|
|
||||||
idx : 97 entropy_left : 1.4115390027326744 entropy_right : 0.8835850861052532 -> 0 150
|
|
||||||
idx : 99 entropy_left : 1.4130351465796736 entropy_right : 0.8478617451660526 -> 0 150
|
|
||||||
idx : 101 entropy_left : 1.4412464483479606 entropy_right : 0.863120568566631 -> 0 150
|
|
||||||
idx : 102 entropy_left : 1.4415827640191903 entropy_right : 0.8426578772022391 -> 0 150
|
|
||||||
idx : 104 entropy_left : 1.4655411381577925 entropy_right : 0.8589810370425963 -> 0 150
|
|
||||||
idx : 105 entropy_left : 1.465665295753282 entropy_right : 0.8366407419411673 -> 0 150
|
|
||||||
idx : 106 entropy_left : 1.4762911618692924 entropy_right : 0.8453509366224365 -> 0 150
|
|
||||||
idx : 107 entropy_left : 1.4762132849962355 entropy_right : 0.8203636429576732 -> 0 150
|
|
||||||
idx : 109 entropy_left : 1.4951379218217782 entropy_right : 0.8390040613676977 -> 0 150
|
|
||||||
idx : 110 entropy_left : 1.4949188482339508 entropy_right : 0.8112781244591328 -> 0 150
|
|
||||||
idx : 113 entropy_left : 1.5183041104369397 entropy_right : 0.8418521897563207 -> 0 150
|
|
||||||
idx : 114 entropy_left : 1.51802714866133 entropy_right : 0.8112781244591328 -> 0 150
|
|
||||||
idx : 117 entropy_left : 1.5364854516368571 entropy_right : 0.8453509366224365 -> 0 150
|
|
||||||
idx : 118 entropy_left : 1.5361890331151247 entropy_right : 0.8112781244591328 -> 0 150
|
|
||||||
idx : 120 entropy_left : 1.5462566034163763 entropy_right : 0.8366407419411673 -> 0 150
|
|
||||||
idx : 122 entropy_left : 1.545378825051491 entropy_right : 0.74959525725948 -> 0 150
|
|
||||||
idx : 127 entropy_left : 1.5644893588382582 entropy_right : 0.828055725379504 -> 0 150
|
|
||||||
idx : 130 entropy_left : 1.562956340286807 entropy_right : 0.6098403047164004 -> 0 150
|
|
||||||
idx : 132 entropy_left : 1.5687623685201277 entropy_right : 0.6500224216483541 -> 0 150
|
|
||||||
idx : 133 entropy_left : 1.5680951037987416 entropy_right : 0.5225593745369408 -> 0 150
|
|
||||||
idx : 134 entropy_left : 1.5706540443736308 entropy_right : 0.5435644431995964 -> 0 150
|
|
||||||
idx : 135 entropy_left : 1.5699201014782036 entropy_right : 0.35335933502142136 -> 0 150
|
|
||||||
idx : 137 entropy_left : 1.5744201314186457 entropy_right : 0.39124356362925566 -> 0 150
|
|
||||||
idx : 138 entropy_left : 1.5736921054134685 entropy_right : 0 -> 0 150
|
|
||||||
¡Ding!4.9 20
|
|
||||||
|
|
||||||
k = 2 k1 = 1 k2 = 2 ent = 0.5225593745369408 ent1 = 0 ent2 = 0.5435644431995964
|
|
||||||
ig = 0.010969310349085326 delta = 2.849365059382915 N 17 term 0.4029038270225244
|
|
||||||
idx : 135 entropy_left : 0 entropy_right : 0.35335933502142136 -> 134 150
|
|
||||||
idx : 137 entropy_left : 0.9182958340544896 entropy_right : 0.39124356362925566 -> 134 150
|
|
||||||
idx : 138 entropy_left : 1.0 entropy_right : 0 -> 134 150
|
|
||||||
start : 134 cut : 135 end : 150
|
|
||||||
k = 2 k1 = 1 k2 = 2 ent = 0.5435644431995964 ent1 = 0 ent2 = 0.35335933502142136
|
|
||||||
ig = 0.21229006661701388 delta = 2.426944705701254 N 16 term 0.39586470633186077
|
|
||||||
idx : 137 entropy_left : 0 entropy_right : 0.39124356362925566 -> 135 150
|
|
||||||
idx : 138 entropy_left : 0.9182958340544896 entropy_right : 0 -> 135 150
|
|
||||||
start : 135 cut : 137 end : 150
|
|
||||||
k = 2 k1 = 1 k2 = 2 ent = 0.35335933502142136 ent1 = 0 ent2 = 0.39124356362925566
|
|
||||||
ig = 0.01428157987606643 delta = 2.8831233792732727 N 15 term 0.44603188675539174
|
|
||||||
idx : 138 entropy_left : 0 entropy_right : 0 -> 137 150
|
|
||||||
start : 137 cut : 138 end : 150
|
|
||||||
k = 2 k1 = 1 k2 = 1 ent = 0.39124356362925566 ent1 = 0 ent2 = 0
|
|
||||||
ig = 0.39124356362925566 delta = 2.0248677947990927 N 13 term 0.4315254073477115
|
|
||||||
[[4.9, 5.2, 5.4, 6.75]]
|
|
||||||
|
|
||||||
|
|
||||||
cut : 1.4 index : 81
|
|
||||||
start : 50 cut : 81 end : 96
|
|
||||||
k = 2 k1 = 2 k2 = 1 ent = 0.151097 ent1 = 0.205593 ent2 = 0
|
|
||||||
ig = 0.0125455 delta = 2.91635 N 46 term 0.182787
|
|
||||||
idx : 80 entropy_left : 0 entropy_right : 0 -> 50 81
|
|
||||||
cut : 1.4 index : 80
|
|
||||||
start : 50 cut : 80 end : 81
|
|
||||||
k = 2 k1 = 1 k2 = 1 ent = 0.205593 ent1 = 0 ent2 = 0
|
|
||||||
ig = 0.205593 delta = 2.39617 N 31 term 0.235583
|
|
||||||
idx : 112 entropy_left : 0 entropy_right : 0.175565 -> 103 150
|
|
||||||
idx : 113 entropy_left : 0.468996 entropy_right : 0 -> 103 150
|
|
||||||
cut : 1.8 index : 112
|
|
||||||
start : 103 cut : 112 end : 150
|
|
||||||
k = 2 k1 = 1 k2 = 2 ent = 0.148549 ent1 = 0 ent2 = 0.175565
|
|
||||||
ig = 0.00660326 delta = 2.86139 N 47 term 0.178403
|
|
||||||
idx : 113 entropy_left : 0 entropy_right : 0 -> 112 150
|
|
||||||
cut : 1.8 index : 113
|
|
||||||
start : 112 cut : 113 end : 150
|
|
||||||
k = 2 k1 = 1 k2 = 1 ent = 0.175565 ent1 = 0 ent2 = 0
|
|
||||||
ig = 0.175565 delta = 2.45622 N 38 term 0.201728
|
|
||||||
[[4.900000095367432, 4.949999809265137, 5.0, 5.099999904632568, 5.199999809265137, 5.25, 5.400000095367432, 5.449999809265137,
|
|
||||||
5.5, 5.550000190734863, 5.599999904632568, 5.699999809265137, 5.800000190734863, 5.900000095367432, 5.949999809265137, 6.0, 6.050000190734863,
|
|
||||||
6.099999904632568, 6.149999618530273, 6.199999809265137, 6.25, 6.300000190734863, 6.400000095367432, 6.5, 6.550000190734863, 6.649999618530273, 6.699999809265137,
|
|
||||||
6.75, 6.800000190734863, 6.850000381469727, 6.900000095367432, 6.949999809265137, 7.050000190734863]]
|
|
@@ -1,183 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.24)
|
|
||||||
project(fimdlp)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
|
||||||
|
|
||||||
include_directories(.)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googlemock/include)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googlemock/include/gmock)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/custom)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googlemock/test)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/include)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/include/gtest)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/include/gtest/internal)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/custom)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/samples)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/src)
|
|
||||||
include_directories(testcpp/build/_deps/googletest-src/googletest/test)
|
|
||||||
|
|
||||||
add_executable(fimdlp
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/include/gmock/gmock.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock-all.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock-cardinalities.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock-internal-utils.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock-matchers.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock-spec-builders.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/src/gmock_main.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-actions_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-cardinalities_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-function-mocker_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-internal-utils_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-matchers-arithmetic_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-matchers-comparisons_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-matchers-containers_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-matchers-misc_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-matchers_test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-more-actions_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-nice-strict_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-port_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-pp-string_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-pp_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock-spec-builders_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_all_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_ex_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_leak_test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_link2_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_link_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_link_test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_output_test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_stress_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googlemock/test/gmock_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-assertion-result.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-message.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-printers.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-spi.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/include/gtest/gtest_prod.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/prime_tables.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample1.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample1.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample10_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample1_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample2.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample2.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample2_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample3-inl.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample3_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample4.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample4.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample4_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample5_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample6_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample7_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample8_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/samples/sample9_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-all.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-assertion-result.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-death-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-filepath.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-internal-inl.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-matchers.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-port.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-printers.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-test-part.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest-typed-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/src/gtest_main.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-color-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-death-test-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-death-test_ex_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-env-var-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-failfast-unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-filepath-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-filter-unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-global-environment-unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-list-tests-unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-listener-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-message-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-options-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-output-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-param-test-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-param-test-test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-param-test2-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-port-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-printers-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-shuffle-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-test-part-test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/googletest-uninitialized-test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest-typed-test2_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest-typed-test_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest-typed-test_test.h
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest-unittest-api_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_all_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_assert_by_exception_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_environment_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_help_test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_list_output_unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_main_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_no_test_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_pred_impl_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_premature_exit_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_prod_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_repeat_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_skip_in_environment_setup_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_skip_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_sole_header_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_stress_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_test_macro_stack_footprint_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_testbridge_test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_throw_on_failure_ex_test.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_unittest.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_xml_outfile1_test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_xml_outfile2_test_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/gtest_xml_output_unittest_.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/production.cc
|
|
||||||
testcpp/build/_deps/googletest-src/googletest/test/production.h
|
|
||||||
testcpp/CMakeLists.txt
|
|
||||||
testcpp/FImdlp_unittest.cc
|
|
||||||
testcpp/Metrics_unittest.cc
|
|
||||||
cfimdlp.cpp
|
|
||||||
CPPFImdlp.cpp
|
|
||||||
CPPFImdlp.h
|
|
||||||
Metrics.cpp
|
|
||||||
Metrics.h
|
|
||||||
typesFImdlp.h)
|
|
Binary file not shown.
@@ -1,166 +0,0 @@
|
|||||||
#include "gtest/gtest.h"
|
|
||||||
#include "../Metrics.h"
|
|
||||||
#include "../CPPFImdlp.h"
|
|
||||||
namespace mdlp {
|
|
||||||
class TestFImdlp: public CPPFImdlp, public testing::Test {
|
|
||||||
public:
|
|
||||||
TestFImdlp(): CPPFImdlp(false) {}
|
|
||||||
void SetUp()
|
|
||||||
{
|
|
||||||
// 5.0, 5.1, 5.1, 5.1, 5.2, 5.3, 5.6, 5.7, 5.9, 6.0]
|
|
||||||
//(5.0, 1) (5.1, 1) (5.1, 2) (5.1, 2) (5.2, 1) (5.3, 1) (5.6, 2) (5.7, 1) (5.9, 2) (6.0, 2)
|
|
||||||
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 };
|
|
||||||
fit(X, y);
|
|
||||||
}
|
|
||||||
void setProposal(bool value)
|
|
||||||
{
|
|
||||||
proposal = value;
|
|
||||||
}
|
|
||||||
void initIndices()
|
|
||||||
{
|
|
||||||
indices = indices_t();
|
|
||||||
}
|
|
||||||
void checkSortedVector(samples_t& X_, indices_t indices_)
|
|
||||||
{
|
|
||||||
X = X_;
|
|
||||||
indices = indices_;
|
|
||||||
indices_t testSortedIndices = sortIndices(X);
|
|
||||||
precision_t prev = X[testSortedIndices[0]];
|
|
||||||
for (auto i = 0; i < X.size(); ++i) {
|
|
||||||
EXPECT_EQ(testSortedIndices[i], indices[i]);
|
|
||||||
EXPECT_LE(prev, X[testSortedIndices[i]]);
|
|
||||||
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], expected[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
template<typename T, typename A>
|
|
||||||
void checkVectors(std::vector<T, A> const& expected, std::vector<T, A> const& computed)
|
|
||||||
{
|
|
||||||
EXPECT_EQ(expected.size(), computed.size());
|
|
||||||
for (auto i = 0; i < expected.size(); i++) {
|
|
||||||
EXPECT_EQ(expected[i], computed[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
TEST_F(TestFImdlp, FitErrorEmptyDataset)
|
|
||||||
{
|
|
||||||
X = samples_t();
|
|
||||||
y = labels_t();
|
|
||||||
EXPECT_THROW(fit(X, y), std::invalid_argument);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// TEST_F(TestFImdlp, FitErrorDifferentSize)
|
|
||||||
// {
|
|
||||||
// X = { 1, 2, 3 };
|
|
||||||
// y = { 1, 2 };
|
|
||||||
// EXPECT_THROW(fit(X, y), std::invalid_argument);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, SortIndices)
|
|
||||||
// {
|
|
||||||
// X = { 5.7, 5.3, 5.2, 5.1, 5.0, 5.6, 5.1, 6.0, 5.1, 5.9 };
|
|
||||||
// indices = { 4, 3, 6, 8, 2, 1, 5, 0, 9, 7 };
|
|
||||||
// checkSortedVector(X, indices);
|
|
||||||
// X = { 5.77, 5.88, 5.99 };
|
|
||||||
// indices = { 0, 1, 2 };
|
|
||||||
// checkSortedVector(X, indices);
|
|
||||||
// X = { 5.33, 5.22, 5.11 };
|
|
||||||
// indices = { 2, 1, 0 };
|
|
||||||
// checkSortedVector(X, indices);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, EvaluateCutPoint)
|
|
||||||
// {
|
|
||||||
// cutPoint_t rest, candidate;
|
|
||||||
// rest = { 0, 10, -1, -1, 1000 };
|
|
||||||
// candidate = { 0, 4, -1, -1, 5.15 };
|
|
||||||
// EXPECT_FALSE(evaluateCutPoint(rest, candidate));
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, ComputeCutPointsOriginal)
|
|
||||||
// {
|
|
||||||
// cutPoints_t expected;
|
|
||||||
// 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();
|
|
||||||
// checkCutPoints(expected);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, ComputeCutPointsOriginalGCase)
|
|
||||||
// {
|
|
||||||
// cutPoints_t expected;
|
|
||||||
// expected = {
|
|
||||||
// { 0, 4, -1, -3.4028234663852886e+38, 3.4028234663852886e+38 },
|
|
||||||
// };
|
|
||||||
// X = { 0, 1, 2, 2 };
|
|
||||||
// y = { 1, 1, 1, 2 };
|
|
||||||
// fit(X, y);
|
|
||||||
// computeCutPointsOriginal();
|
|
||||||
// checkCutPoints(expected);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, ComputeCutPointsProposal)
|
|
||||||
// {
|
|
||||||
// cutPoints_t expected;
|
|
||||||
// expected = {
|
|
||||||
// { 0, 4, -1, -3.4028234663852886e+38, 5.1 }, { 4, 6, -1, 5.1, 5.4 },
|
|
||||||
// { 6, 9, -1, 5.4, 5.85 },
|
|
||||||
// { 9, 10, -1, 5.85, 3.4028234663852886e+38 }
|
|
||||||
// };
|
|
||||||
// computeCutPointsProposal();
|
|
||||||
// checkCutPoints(expected);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, ComputeCutPointsProposalGCase)
|
|
||||||
// {
|
|
||||||
// cutPoints_t expected;
|
|
||||||
// expected = {
|
|
||||||
// { 0, 3, -1, -3.4028234663852886e+38, 1.5 },
|
|
||||||
// { 3, 4, -1, 1.5, 3.4028234663852886e+38 }
|
|
||||||
// };
|
|
||||||
// X = { 0, 1, 2, 2 };
|
|
||||||
// y = { 1, 1, 1, 2 };
|
|
||||||
// fit(X, y);
|
|
||||||
// computeCutPointsProposal();
|
|
||||||
// checkCutPoints(expected);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, DiscretizedValues)
|
|
||||||
// {
|
|
||||||
// labels_t computed, expected = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
||||||
// computed = getDiscretizedValues();
|
|
||||||
// checkVectors(expected, computed);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, GetCutPoints)
|
|
||||||
// {
|
|
||||||
// samples computed, expected = { 5.15, 5.45, 3.4028234663852886e+38 };
|
|
||||||
// computeCutPointsOriginal();
|
|
||||||
// computed = getCutPoints();
|
|
||||||
// checkVectors(expected, computed);
|
|
||||||
// }
|
|
||||||
// TEST_F(TestFImdlp, Constructor)
|
|
||||||
// {
|
|
||||||
// samples X = { 5.7, 5.3, 5.2, 5.1, 5.0, 5.6, 5.1, 6.0, 5.1, 5.9 };
|
|
||||||
// labels_t y = { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 };
|
|
||||||
// setProposal(false);
|
|
||||||
// fit(X, y);
|
|
||||||
// computeCutPointsOriginal();
|
|
||||||
// cutPoints_t expected;
|
|
||||||
// vector<precision_t> computed = getCutPoints();
|
|
||||||
// expected = {
|
|
||||||
// { 0, 4, -1, -3.4028234663852886e+38, 5.15 }, { 4, 6, -1, 5.15, 5.45 },
|
|
||||||
// { 6, 10, -1, 5.45, 3.4028234663852886e+38 }
|
|
||||||
// };
|
|
||||||
// computed = getCutPoints();
|
|
||||||
// int expectedSize = expected.size();
|
|
||||||
// EXPECT_EQ(computed.size(), expected.size());
|
|
||||||
// for (auto i = 0; i < expectedSize; i++) {
|
|
||||||
// EXPECT_NEAR(computed[i], expected[i].toValue, .00000001);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
@@ -1,6 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.24)
|
|
||||||
project(main)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
|
|
||||||
add_executable(main main.cpp ArffFiles.cpp ../../Metrics.cpp ../../CPPFImdlp.cpp)
|
|
@@ -4,7 +4,8 @@ requires = ["setuptools", "cython", "wheel"]
|
|||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
[tool.setuptools]
|
[tool.setuptools]
|
||||||
packages = ["fimdlp"]
|
#packages = ["fimdlp"]
|
||||||
|
package-dir = { "" = "src" }
|
||||||
license-files = ["LICENSE"]
|
license-files = ["LICENSE"]
|
||||||
|
|
||||||
[tool.setuptools.dynamic]
|
[tool.setuptools.dynamic]
|
||||||
@@ -17,8 +18,8 @@ authors = [
|
|||||||
{ name = "Ricardo Montañana", email = "ricardo.montanana@alu.uclm.es" },
|
{ name = "Ricardo Montañana", email = "ricardo.montanana@alu.uclm.es" },
|
||||||
]
|
]
|
||||||
dynamic = ['version']
|
dynamic = ['version']
|
||||||
dependencies = ["numpy"]
|
dependencies = ["numpy", "joblib"]
|
||||||
requires-python = ">=3.8"
|
requires-python = ">=3.9"
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 3 - Alpha",
|
"Development Status :: 3 - Alpha",
|
||||||
"Intended Audience :: Science/Research",
|
"Intended Audience :: Science/Research",
|
||||||
@@ -30,7 +31,6 @@ classifiers = [
|
|||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
"Programming Language :: Python",
|
"Programming Language :: Python",
|
||||||
"Programming Language :: Python",
|
"Programming Language :: Python",
|
||||||
"Programming Language :: Python :: 3.8",
|
|
||||||
"Programming Language :: Python :: 3.9",
|
"Programming Language :: Python :: 3.9",
|
||||||
"Programming Language :: Python :: 3.10",
|
"Programming Language :: Python :: 3.10",
|
||||||
]
|
]
|
||||||
@@ -40,7 +40,7 @@ Home = "https://github.com/doctorado-ml/FImdlp"
|
|||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
line-length = 79
|
line-length = 79
|
||||||
target_version = ['py38', 'py39', 'py310']
|
target_version = ['py39', 'py310']
|
||||||
include = '\.pyi?$'
|
include = '\.pyi?$'
|
||||||
exclude = '''
|
exclude = '''
|
||||||
/(
|
/(
|
||||||
@@ -55,3 +55,7 @@ exclude = '''
|
|||||||
| dist
|
| dist
|
||||||
)/
|
)/
|
||||||
'''
|
'''
|
||||||
|
[tool.flake8]
|
||||||
|
per-file-ignores = ['__init__.py:F401']
|
||||||
|
max-line-length = 79
|
||||||
|
count = true
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.24)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
project(main)
|
project(main)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
||||||
add_executable(sample sample.cpp ArffFiles.cpp ../fimdlp/Metrics.cpp ../fimdlp/CPPFImdlp.cpp)
|
add_executable(sample sample.cpp ArffFiles.cpp ../src/fimdlp/cppmdlp/Metrics.cpp ../src/fimdlp/cppmdlp/CPPFImdlp.cpp)
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include "../fimdlp/CPPFImdlp.h"
|
#include "../src/cppmdlp/CPPFImdlp.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
ArffFiles file;
|
ArffFiles file;
|
||||||
vector<string> lines;
|
vector<string> lines;
|
||||||
string path = "../fimdlp/testcpp/datasets/";
|
string path = "../../src/cppmdlp/tests/datasets/";
|
||||||
map<string, bool > datasets = {
|
map<string, bool > datasets = {
|
||||||
{"mfeat-factors", true},
|
{"mfeat-factors", true},
|
||||||
{"iris", true},
|
{"iris", true},
|
||||||
|
@@ -18,9 +18,9 @@ ap.add_argument("--proposal", action="store_true")
|
|||||||
ap.add_argument("--original", dest="proposal", action="store_false")
|
ap.add_argument("--original", dest="proposal", action="store_false")
|
||||||
ap.add_argument("dataset", type=str, choices=datasets.keys())
|
ap.add_argument("dataset", type=str, choices=datasets.keys())
|
||||||
args = ap.parse_args()
|
args = ap.parse_args()
|
||||||
relative = "" if os.path.isdir("fimdlp") else ".."
|
relative = "" if os.path.isdir("src") else ".."
|
||||||
file_name = os.path.join(
|
file_name = os.path.join(
|
||||||
relative, "fimdlp", "testcpp", "datasets", args.dataset
|
relative, "src", "cppmdlp", "tests", "datasets", args.dataset
|
||||||
)
|
)
|
||||||
data = arff.loadarff(file_name + ".arff")
|
data = arff.loadarff(file_name + ".arff")
|
||||||
df = pd.DataFrame(data[0])
|
df = pd.DataFrame(data[0])
|
||||||
|
8
setup.py
8
setup.py
@@ -9,11 +9,11 @@ from setuptools import Extension, setup
|
|||||||
setup(
|
setup(
|
||||||
ext_modules=[
|
ext_modules=[
|
||||||
Extension(
|
Extension(
|
||||||
name="cppfimdlp",
|
name="fimdlp.cppfimdlp",
|
||||||
sources=[
|
sources=[
|
||||||
"fimdlp/cfimdlp.pyx",
|
"src/fimdlp/cfimdlp.pyx",
|
||||||
"fimdlp/CPPFImdlp.cpp",
|
"src/cppmdlp/CPPFImdlp.cpp",
|
||||||
"fimdlp/Metrics.cpp",
|
"src/cppmdlp/Metrics.cpp",
|
||||||
],
|
],
|
||||||
language="c++",
|
language="c++",
|
||||||
include_dirs=["fimdlp"],
|
include_dirs=["fimdlp"],
|
||||||
|
36
src/cppmdlp/.gitignore
vendored
Normal file
36
src/cppmdlp/.gitignore
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Prerequisites
|
||||||
|
*.d
|
||||||
|
|
||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
*.smod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
**/build
|
||||||
|
**/lcoverage
|
||||||
|
.idea
|
||||||
|
cmake-*
|
7
src/cppmdlp/CMakeLists.txt
Normal file
7
src/cppmdlp/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.24)
|
||||||
|
project(mdlp)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
add_library(mdlp CPPFImdlp.cpp Metrics.cpp)
|
||||||
|
|
@@ -1,11 +1,12 @@
|
|||||||
#include <numeric>
|
#include <numeric>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <cmath>
|
||||||
#include "CPPFImdlp.h"
|
#include "CPPFImdlp.h"
|
||||||
#include "Metrics.h"
|
#include "Metrics.h"
|
||||||
|
|
||||||
namespace mdlp {
|
namespace mdlp {
|
||||||
CPPFImdlp::CPPFImdlp(bool proposal):proposal(proposal), indices(indices_t()), y(labels_t()), metrics(Metrics(y, indices))
|
CPPFImdlp::CPPFImdlp(bool proposal):proposal(proposal), indices(indices_t()), X(samples_t()), y(labels_t()), metrics(Metrics(y, indices))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
CPPFImdlp::~CPPFImdlp()
|
CPPFImdlp::~CPPFImdlp()
|
21
src/cppmdlp/LICENSE
Normal file
21
src/cppmdlp/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 Ricardo Montañana Gómez
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
2
src/cppmdlp/README.md
Normal file
2
src/cppmdlp/README.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# mdlp
|
||||||
|
Discretization algorithm based on the paper by Fayyad & Irani Multi-Interval Discretization of Continuous-Valued Attributes for Classification Learning
|
6
src/cppmdlp/sample/CMakeLists.txt
Normal file
6
src/cppmdlp/sample/CMakeLists.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.24)
|
||||||
|
project(main)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
add_executable(sample sample.cpp ArffFiles.cpp ../Metrics.cpp ../CPPFImdlp.cpp)
|
@@ -2,7 +2,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include "../../CPPFImdlp.h"
|
#include "../CPPFImdlp.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
ArffFiles file;
|
ArffFiles file;
|
||||||
vector<string> lines;
|
vector<string> lines;
|
||||||
string path = "/Users/rmontanana/Code/FImdlp/fimdlp/testcpp/datasets/";
|
string path = "../../tests/datasets/";
|
||||||
map<string, bool > datasets = {
|
map<string, bool > datasets = {
|
||||||
{"mfeat-factors", true},
|
{"mfeat-factors", true},
|
||||||
{"iris", true},
|
{"iris", true},
|
||||||
@@ -41,7 +41,7 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
cout << y[i] << endl;
|
cout << y[i] << endl;
|
||||||
}
|
}
|
||||||
mdlp::CPPFImdlp test = mdlp::CPPFImdlp();
|
mdlp::CPPFImdlp test = mdlp::CPPFImdlp(false);
|
||||||
for (auto i = 0; i < attributes.size(); i++) {
|
for (auto i = 0; i < attributes.size(); i++) {
|
||||||
cout << "Cut points for " << get<0>(attributes[i]) << endl;
|
cout << "Cut points for " << get<0>(attributes[i]) << endl;
|
||||||
cout << "--------------------------" << setprecision(3) << endl;
|
cout << "--------------------------" << setprecision(3) << endl;
|
@@ -17,15 +17,14 @@ FetchContent_MakeAvailable(googletest)
|
|||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
add_executable(Metrics_unittest ../Metrics.cpp Metrics_unittest.cc)
|
add_executable(Metrics_unittest ../Metrics.cpp Metrics_unittest.cpp)
|
||||||
add_executable(FImdlp_unittest ../CPPFImdlp.cpp ../Metrics.cpp FImdlp_unittest.cc)
|
add_executable(FImdlp_unittest ../CPPFImdlp.cpp ../Metrics.cpp FImdlp_unittest.cpp)
|
||||||
target_link_libraries(Metrics_unittest GTest::gtest_main)
|
target_link_libraries(Metrics_unittest GTest::gtest_main)
|
||||||
target_link_libraries(FImdlp_unittest GTest::gtest_main)
|
target_link_libraries(FImdlp_unittest GTest::gtest_main)
|
||||||
target_compile_options(Metrics_unittest PRIVATE --coverage)
|
target_compile_options(Metrics_unittest PRIVATE --coverage)
|
||||||
target_compile_options(FImdlp_unittest PRIVATE --coverage)
|
target_compile_options(FImdlp_unittest PRIVATE --coverage)
|
||||||
target_link_options(Metrics_unittest PRIVATE --coverage)
|
target_link_options(Metrics_unittest PRIVATE --coverage)
|
||||||
target_link_options(FImdlp_unittest PRIVATE --coverage)
|
target_link_options(FImdlp_unittest PRIVATE --coverage)
|
||||||
# -fprofile-arcs -ftest-coverage
|
|
||||||
|
|
||||||
include(GoogleTest)
|
include(GoogleTest)
|
||||||
gtest_discover_tests(Metrics_unittest)
|
gtest_discover_tests(Metrics_unittest)
|
141
src/cppmdlp/tests/FImdlp_unittest.cpp
Normal file
141
src/cppmdlp/tests/FImdlp_unittest.cpp
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "../Metrics.h"
|
||||||
|
#include "../CPPFImdlp.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace mdlp {
|
||||||
|
class TestFImdlp : public CPPFImdlp, public testing::Test {
|
||||||
|
public:
|
||||||
|
precision_t precision = 0.000001;
|
||||||
|
|
||||||
|
TestFImdlp() : CPPFImdlp(false) {}
|
||||||
|
|
||||||
|
void SetUp() {
|
||||||
|
// 5.0, 5.1, 5.1, 5.1, 5.2, 5.3, 5.6, 5.7, 5.9, 6.0]
|
||||||
|
//(5.0, 1) (5.1, 1) (5.1, 2) (5.1, 2) (5.2, 1) (5.3, 1) (5.6, 2) (5.7, 1) (5.9, 2) (6.0, 2)
|
||||||
|
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};
|
||||||
|
proposal = false;
|
||||||
|
fit(X, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setProposal(bool value) {
|
||||||
|
proposal = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// void initIndices()
|
||||||
|
// {
|
||||||
|
// indices = indices_t();
|
||||||
|
// }
|
||||||
|
void checkSortedVector() {
|
||||||
|
indices_t testSortedIndices = sortIndices(X);
|
||||||
|
precision_t prev = X[testSortedIndices[0]];
|
||||||
|
for (auto i = 0; i < X.size(); ++i) {
|
||||||
|
EXPECT_EQ(testSortedIndices[i], indices[i]);
|
||||||
|
EXPECT_LE(prev, X[testSortedIndices[i]]);
|
||||||
|
prev = X[testSortedIndices[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkCutPoints(cutPoints_t &expected) {
|
||||||
|
int expectedSize = expected.size();
|
||||||
|
EXPECT_EQ(cutPoints.size(), expectedSize);
|
||||||
|
for (auto i = 0; i < cutPoints.size(); i++) {
|
||||||
|
EXPECT_NEAR(cutPoints[i], expected[i], precision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T, typename A>
|
||||||
|
void checkVectors(std::vector<T, A> const &expected, std::vector<T, A> const &computed) {
|
||||||
|
EXPECT_EQ(expected.size(), computed.size());
|
||||||
|
ASSERT_EQ(expected.size(), computed.size());
|
||||||
|
for (auto i = 0; i < expected.size(); i++) {
|
||||||
|
EXPECT_NEAR(expected[i], computed[i],precision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, FitErrorEmptyDataset) {
|
||||||
|
X = samples_t();
|
||||||
|
y = labels_t();
|
||||||
|
EXPECT_THROW(fit(X, y), std::invalid_argument);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, FitErrorDifferentSize) {
|
||||||
|
X = {1, 2, 3};
|
||||||
|
y = {1, 2};
|
||||||
|
EXPECT_THROW(fit(X, y), std::invalid_argument);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, SortIndices) {
|
||||||
|
X = {5.7, 5.3, 5.2, 5.1, 5.0, 5.6, 5.1, 6.0, 5.1, 5.9};
|
||||||
|
indices = {4, 3, 6, 8, 2, 1, 5, 0, 9, 7};
|
||||||
|
checkSortedVector();
|
||||||
|
X = {5.77, 5.88, 5.99};
|
||||||
|
indices = {0, 1, 2};
|
||||||
|
checkSortedVector();
|
||||||
|
X = {5.33, 5.22, 5.11};
|
||||||
|
indices = {2, 1, 0};
|
||||||
|
checkSortedVector();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, TestDataset) {
|
||||||
|
proposal = false;
|
||||||
|
fit(X, y);
|
||||||
|
computeCutPointsOriginal(0, 10);
|
||||||
|
cutPoints_t expected = {5.6499996185302734};
|
||||||
|
vector<precision_t> computed = getCutPoints();
|
||||||
|
computed = getCutPoints();
|
||||||
|
int expectedSize = expected.size();
|
||||||
|
EXPECT_EQ(computed.size(), expected.size());
|
||||||
|
for (auto i = 0; i < expectedSize; i++) {
|
||||||
|
EXPECT_NEAR(computed[i], expected[i], precision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, ComputeCutPointsOriginal) {
|
||||||
|
cutPoints_t expected = {5.65};
|
||||||
|
proposal = false;
|
||||||
|
computeCutPointsOriginal(0, 10);
|
||||||
|
checkCutPoints(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, ComputeCutPointsOriginalGCase) {
|
||||||
|
cutPoints_t expected;
|
||||||
|
proposal = false;
|
||||||
|
expected = {2};
|
||||||
|
samples_t X_ = {0, 1, 2, 2};
|
||||||
|
labels_t y_ = {1, 1, 1, 2};
|
||||||
|
fit(X_, y_);
|
||||||
|
checkCutPoints(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, ComputeCutPointsProposal) {
|
||||||
|
proposal = true;
|
||||||
|
cutPoints_t expected;
|
||||||
|
expected = {};
|
||||||
|
fit(X, y);
|
||||||
|
computeCutPointsProposal();
|
||||||
|
checkCutPoints(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, ComputeCutPointsProposalGCase) {
|
||||||
|
cutPoints_t expected;
|
||||||
|
expected = {1.5};
|
||||||
|
proposal = true;
|
||||||
|
samples_t X_ = {0, 1, 2, 2};
|
||||||
|
labels_t y_ = {1, 1, 1, 2};
|
||||||
|
fit(X_, y_);
|
||||||
|
checkCutPoints(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFImdlp, GetCutPoints) {
|
||||||
|
samples_t computed, expected = {5.65};
|
||||||
|
proposal = false;
|
||||||
|
computeCutPointsOriginal(0, 10);
|
||||||
|
computed = getCutPoints();
|
||||||
|
for (auto item: cutPoints)
|
||||||
|
cout << setprecision(6) << item << endl;
|
||||||
|
checkVectors(expected, computed);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,3 +1,8 @@
|
|||||||
from ._version import __version__
|
from ._version import __version__
|
||||||
|
|
||||||
|
|
||||||
|
def version():
|
||||||
|
return __version__
|
||||||
|
|
||||||
|
|
||||||
all = ["FImdlp", "__version__"]
|
all = ["FImdlp", "__version__"]
|
@@ -3,7 +3,7 @@
|
|||||||
from libcpp.vector cimport vector
|
from libcpp.vector cimport vector
|
||||||
from libcpp cimport bool
|
from libcpp cimport bool
|
||||||
|
|
||||||
cdef extern from "CPPFImdlp.h" namespace "mdlp":
|
cdef extern from "../cppmdlp/CPPFImdlp.h" namespace "mdlp":
|
||||||
ctypedef float precision_t
|
ctypedef float precision_t
|
||||||
cdef cppclass CPPFImdlp:
|
cdef cppclass CPPFImdlp:
|
||||||
CPPFImdlp(bool) except +
|
CPPFImdlp(bool) except +
|
||||||
@@ -22,4 +22,4 @@ cdef class CFImdlp:
|
|||||||
return self
|
return self
|
||||||
def get_cut_points(self):
|
def get_cut_points(self):
|
||||||
return self.thisptr.getCutPoints()
|
return self.thisptr.getCutPoints()
|
||||||
|
|
@@ -16,8 +16,8 @@ class FImdlp(TransformerMixin, BaseEstimator):
|
|||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
n_jobs : int, default=-1
|
n_jobs : int, default=-1
|
||||||
The number of jobs to run in parallel. :meth:`fit` and
|
The number of jobs to run in parallel. :meth:`fit` and
|
||||||
:meth:`transform`, are parallelized over the features. ``-1`` means
|
:meth:`transform`, are parallelized over the features. ``-1`` means
|
||||||
using all cores available.
|
using all cores available.
|
||||||
|
|
||||||
Attributes
|
Attributes
|
||||||
@@ -28,9 +28,9 @@ class FImdlp(TransformerMixin, BaseEstimator):
|
|||||||
The list of discretizers, one for each feature.
|
The list of discretizers, one for each feature.
|
||||||
cut_points_ : list
|
cut_points_ : list
|
||||||
The list of cut points for each feature.
|
The list of cut points for each feature.
|
||||||
X_ : array
|
X_ : array
|
||||||
the samples used to fit, shape (n_samples, n_features)
|
the samples used to fit, shape (n_samples, n_features)
|
||||||
y_ : array
|
y_ : array
|
||||||
the labels used to fit, shape (n_samples,)
|
the labels used to fit, shape (n_samples,)
|
||||||
features_ : list
|
features_ : list
|
||||||
the list of features to be discretized
|
the list of features to be discretized
|
@@ -3,9 +3,14 @@ import sklearn
|
|||||||
from sklearn.datasets import load_iris
|
from sklearn.datasets import load_iris
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from ..mdlp import FImdlp
|
from ..mdlp import FImdlp
|
||||||
|
from .. import version
|
||||||
|
from .._version import __version__
|
||||||
|
|
||||||
|
|
||||||
class FImdlpTest(unittest.TestCase):
|
class FImdlpTest(unittest.TestCase):
|
||||||
|
def test_version(self):
|
||||||
|
self.assertEqual(version(), __version__)
|
||||||
|
|
||||||
def test_init(self):
|
def test_init(self):
|
||||||
clf = FImdlp()
|
clf = FImdlp()
|
||||||
self.assertEqual(-1, clf.n_jobs)
|
self.assertEqual(-1, clf.n_jobs)
|
||||||
@@ -74,6 +79,18 @@ class FImdlpTest(unittest.TestCase):
|
|||||||
clf.fit([[1, 2], [3, 4]], [1, 2], features=["a", "b", "c"])
|
clf.fit([[1, 2], [3, 4]], [1, 2], features=["a", "b", "c"])
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError):
|
||||||
clf.fit([[1, 2], [3, 4]], [1, 2], unexpected="class_name")
|
clf.fit([[1, 2], [3, 4]], [1, 2], unexpected="class_name")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
clf.fit([[1, 2], [3, 4]], [1, 2], features="01")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
clf.fit([[1, 2], [3, 4]], [1, 2], features=[0, 0])
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
clf.fit([[1, 2], [3, 4]], [1, 2], features=[0, 2])
|
||||||
|
|
||||||
|
def test_fit_features(self):
|
||||||
|
clf = FImdlp()
|
||||||
|
clf.fit([[1, 2], [3, 4]], [1, 2], features=[0])
|
||||||
|
res = clf.transform([[1, 2], [3, 4]])
|
||||||
|
self.assertListEqual(res.tolist(), [[0, 2], [0, 4]])
|
||||||
|
|
||||||
def test_transform_original(self):
|
def test_transform_original(self):
|
||||||
clf = FImdlp(proposal=False)
|
clf = FImdlp(proposal=False)
|
@@ -1,3 +1 @@
|
|||||||
from .FImdlp_test import FImdlpTest
|
from .FImdlp_test import FImdlpTest
|
||||||
|
|
||||||
all = ["FImdlpTest"]
|
|
Reference in New Issue
Block a user