Update to use setuptools

This commit is contained in:
2022-11-23 19:27:21 +01:00
parent 1a0d30dc74
commit a535ecc032
10 changed files with 52 additions and 41 deletions

View File

@@ -1,5 +1,5 @@
from .bayesclass import TAN, KDB, AODE # from .bayesclass import TAN, KDB, AODE
from ._version import __version__ from bayesclass._version import __version__
__author__ = "Ricardo Montañana Gómez" __author__ = "Ricardo Montañana Gómez"
__copyright__ = "Copyright 2020-2023, Ricardo Montañana Gómez" __copyright__ = "Copyright 2020-2023, Ricardo Montañana Gómez"

View File

@@ -86,7 +86,7 @@ class BayesBase(BaseEstimator, ClassifierMixin):
-------- --------
>>> import numpy as np >>> import numpy as np
>>> import pandas as pd >>> import pandas as pd
>>> from bayesclass import TAN >>> from bayesclass.bayesclass import TAN
>>> features = ['A', 'B', 'C', 'D', 'E'] >>> features = ['A', 'B', 'C', 'D', 'E']
>>> np.random.seed(17) >>> np.random.seed(17)
>>> values = pd.DataFrame(np.random.randint(low=0, high=2, >>> values = pd.DataFrame(np.random.randint(low=0, high=2,
@@ -142,7 +142,7 @@ class BayesBase(BaseEstimator, ClassifierMixin):
-------- --------
>>> import numpy as np >>> import numpy as np
>>> import pandas as pd >>> import pandas as pd
>>> from bayesclass import TAN >>> from bayesclass.bayesclass import TAN
>>> features = ['A', 'B', 'C', 'D', 'E'] >>> features = ['A', 'B', 'C', 'D', 'E']
>>> np.random.seed(17) >>> np.random.seed(17)
>>> values = pd.DataFrame(np.random.randint(low=0, high=2, >>> values = pd.DataFrame(np.random.randint(low=0, high=2,
@@ -373,4 +373,4 @@ class AODE(BayesBase, BaseEnsemble):
dataset = pd.DataFrame(X, columns=self.features_, dtype="int16") dataset = pd.DataFrame(X, columns=self.features_, dtype="int16")
for index, model in enumerate(self.models_): for index, model in enumerate(self.models_):
result[:, index] = model.predict(dataset).values.ravel() result[:, index] = model.predict(dataset).values.ravel()
return mode(result, axis=1).mode.ravel() return mode(result, axis=1, keepdims=False).mode.ravel()

View File

@@ -4,7 +4,7 @@ from sklearn.datasets import load_iris
from sklearn.preprocessing import KBinsDiscretizer from sklearn.preprocessing import KBinsDiscretizer
from bayesclass import AODE from bayesclass.bayesclass import AODE
from .._version import __version__ from .._version import __version__

View File

@@ -6,7 +6,7 @@ from matplotlib.testing.decorators import image_comparison
from matplotlib.testing.conftest import mpl_test_settings from matplotlib.testing.conftest import mpl_test_settings
from bayesclass import KDB from bayesclass.bayesclass import KDB
from .._version import __version__ from .._version import __version__

View File

@@ -6,7 +6,7 @@ from matplotlib.testing.decorators import image_comparison
from matplotlib.testing.conftest import mpl_test_settings from matplotlib.testing.conftest import mpl_test_settings
from bayesclass import TAN from bayesclass.bayesclass import TAN
from .._version import __version__ from .._version import __version__

View File

@@ -2,7 +2,7 @@ import pytest
from sklearn.utils.estimator_checks import check_estimator from sklearn.utils.estimator_checks import check_estimator
from bayesclass import TAN, KDB, AODE from bayesclass.bayesclass import TAN, KDB, AODE
@pytest.mark.parametrize("estimator", [TAN(), KDB(k=2), AODE()]) @pytest.mark.parametrize("estimator", [TAN(), KDB(k=2), AODE()])

View File

@@ -0,0 +1,7 @@
import doctest
import bayesclass
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(bayesclass))
return tests

View File

@@ -1,36 +1,33 @@
import sys
import time import time
from sklearn.model_selection import cross_val_score, StratifiedKFold from sklearn.model_selection import cross_val_score, StratifiedKFold
from benchmark import Datasets from sklearn.preprocessing import KBinsDiscretizer
from bayesclass import TAN from sklearn.datasets import load_wine
from bayesclass.bayesclass import TAN
import warnings import warnings
if len(sys.argv) < 2:
print("Usage: python3 example.py <dataset> [n_folds]")
exit(1)
# Warnings are not errors # Warnings are not errors
warnings.simplefilter("ignore") warnings.simplefilter("ignore")
start = time.time() start = time.time()
random_state = 17 random_state = 17
name = sys.argv[1] n_folds = 5
n_folds = int(sys.argv[2]) if len(sys.argv) == 3 else 5
dt = Datasets()
name_list = list(dt) if name == "all" else [name]
print(f"Accuracy in {n_folds} folds stratified crossvalidation") print(f"Accuracy in {n_folds} folds stratified crossvalidation")
for name in name_list: dataset_start = time.time()
dataset_start = time.time() dataset = load_wine()
X, y = dt.load(name) Xc = dataset.data
clf = TAN(random_state=random_state) enc = KBinsDiscretizer(encode="ordinal")
fit_params = dict( X = enc.fit_transform(Xc)
features=dt.get_features(), class_name=dt.get_class_name(), head=0 y = dataset.target
) clf = TAN(random_state=random_state)
kfold = StratifiedKFold( fit_params = dict(features=dataset.feature_names, class_name="class", head=0)
n_splits=n_folds, shuffle=True, random_state=random_state kfold = StratifiedKFold(
) n_splits=n_folds, shuffle=True, random_state=random_state
score = cross_val_score(clf, X, y, cv=kfold, fit_params=fit_params) )
print( score = cross_val_score(clf, X, y, cv=kfold, fit_params=fit_params)
f"{name:20s}{'.' * 10}{score.mean():9.7f} " print(
f"({time.time()-dataset_start:7.2f} seconds)" f"wine {'.' * 10}{score.mean():9.7f} "
) f"({time.time()-dataset_start:7.2f} seconds)"
)
clf.fit(X, y, **fit_params)
clf.plot("TAN wine")
print(f"Took {time.time()-start:.2f} seconds") print(f"Took {time.time()-start:.2f} seconds")

View File

@@ -7,7 +7,7 @@ An example plot of :class:`bayesclass.TAN`
""" """
import numpy as np import numpy as np
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
from bayesclass import TAN from bayesclass.bayesclass import TAN
X = [[0, 0], [1, 1]] X = [[0, 0], [1, 1]]
y = [0, 1] y = [0, 1]

View File

@@ -1,6 +1,14 @@
[build-system] [build-system]
requires = ["flit_core >=3.2,<4"] requires = ["setuptools", "setuptools-scm"]
build-backend = "flit_core.buildapi" build-backend = "setuptools.build_meta"
[tool.setuptools]
packages = ["bayesclass"]
license-files = ["LICENSE"]
[tool.setuptools.dynamic]
version = { attr = "bayesclass.__version__" }
readme = { file = ["README.md"] }
[project] [project]
name = "bayesclass" name = "bayesclass"
@@ -8,17 +16,16 @@ description = "A collection of Bayesian Estimators."
authors = [ 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', 'readme']
dependencies = [ dependencies = [
"numpy",
"scipy", "scipy",
"numpy",
"pandas", "pandas",
"scikit-learn", "scikit-learn",
"pgmpy", "pgmpy",
"networkx", "networkx",
"matplotlib", "matplotlib",
] ]
readme = "README.md"
requires-python = ">=3.8" requires-python = ">=3.8"
classifiers = [ classifiers = [
"Development Status :: 3 - Alpha", "Development Status :: 3 - Alpha",
@@ -44,7 +51,7 @@ doc = ["sphinx", "sphinx-gallery", "sphinx_rtd_theme", "numpydoc"]
Home = "https://github.com/doctorado-ml/bayesclass" Home = "https://github.com/doctorado-ml/bayesclass"
[tool.pytest.ini_options] [tool.pytest.ini_options]
addopts = "--cov --cov-report html --cov-report term-missing --cov-fail-under 95" addopts = "--cov --cov-report html --cov-report term-missing --cov-fail-under 95 " #--doctest-modules
[tool.coverage.run] [tool.coverage.run]
source = ["bayesclass"] source = ["bayesclass"]