Skip to content

Commit 7a83f18

Browse files
authored
Fixes #95, PiecewiseRegressor, makes sure target are vectors
Fixes #95, PiecewiseRegressor, makes sure target are vectors
2 parents 53b9940 + 007c871 commit 7a83f18

15 files changed

+65
-25
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ matrix:
77
- python: 3.9
88
name: "Py39-024+"
99
env:
10-
- sklver=">=0.24.0"
10+
- sklver=">=0.24.2"
1111
- jlver=">=1.0"
1212
- python: 3.8
1313
name: "Py38-023"

_doc/sphinxdoc/source/conf.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import sys
66
import os
77
import alabaster
8-
from pyquickhelper.helpgen.default_conf import set_sphinx_variables, get_default_stylesheet
8+
from pyquickhelper.helpgen.default_conf import set_sphinx_variables
99

1010

1111
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0])))
@@ -20,8 +20,9 @@
2020
title="mlinsights", book=True)
2121

2222
blog_root = "http://www.xavierdupre.fr/app/mlinsights/helpsphinx/"
23-
html_context = {'css_files': get_default_stylesheet() +
24-
['_static/my-styles.css']}
23+
24+
html_css_files = ['my-styles.css']
25+
2526
html_logo = "phdoc_static/project_ico.png"
2627
html_sidebars = {}
2728
language = "en"
File renamed without changes.

_unittests/ut_mlmodel/test_categories_to_integers.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,11 @@ def test_categories_to_integers_grid_search(self):
119119
LogisticRegression())
120120
self.assertRaise(lambda: test_sklearn_grid_search_cv(
121121
lambda: pipe, df), ValueError)
122-
self.assertRaise(
123-
lambda: test_sklearn_grid_search_cv(
124-
lambda: pipe, X, y, categoriestointegers__single=[True, False]),
125-
ValueError, "Unable to find category value")
122+
if compare_module_version(sklver, "0.24") >= 0:
123+
self.assertRaise(
124+
lambda: test_sklearn_grid_search_cv(
125+
lambda: pipe, X, y, categoriestointegers__single=[True, False]),
126+
ValueError, "Unable to find category value")
126127
pipe = make_pipeline(CategoriesToIntegers(),
127128
Imputer(strategy='most_frequent'),
128129
LogisticRegression(n_jobs=1))

_unittests/ut_mlmodel/test_classification_kmeans.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ def test_classification_kmeans_intercept_weights(self):
5757
def test_classification_kmeans_pickle(self):
5858
iris = datasets.load_iris()
5959
X, y = iris.data, iris.target
60-
test_sklearn_pickle(lambda: ClassifierAfterKMeans(), X, y)
60+
try:
61+
test_sklearn_pickle(lambda: ClassifierAfterKMeans(), X, y)
62+
except AttributeError as e:
63+
if compare_module_version(sklver, "0.24") < 0:
64+
return
65+
raise e
6166

6267
def test_classification_kmeans_clone(self):
6368
self.maxDiff = None

_unittests/ut_mlmodel/test_piecewise_regressor.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from numpy.random import random
88
import pandas
99
from sklearn.linear_model import LinearRegression
10+
from sklearn.datasets import make_regression
11+
from sklearn.tree import DecisionTreeRegressor
1012
from pyquickhelper.pycode import ExtTestCase, ignore_warnings
1113
from mlinsights.mlmodel import test_sklearn_pickle, test_sklearn_clone, test_sklearn_grid_search_cv
1214
from mlinsights.mlmodel.piecewise_estimator import PiecewiseRegressor
@@ -148,6 +150,23 @@ def test_piecewise_regressor_grid_search(self):
148150
self.assertGreater(res['score'], 0)
149151
self.assertLesser(res['score'], 1)
150152

153+
def test_piecewise_regressor_issue(self):
154+
X, y = make_regression(10000, n_features=1, n_informative=1, # pylint: disable=W0632
155+
n_targets=1)
156+
y = y.reshape((-1, 1))
157+
model = PiecewiseRegressor(
158+
binner=DecisionTreeRegressor(min_samples_leaf=300))
159+
model.fit(X, y)
160+
vvc = model.predict(X)
161+
self.assertEqual(vvc.shape, (X.shape[0], ))
162+
163+
def test_piecewise_regressor_raise(self):
164+
X, y = make_regression(10000, n_features=2, n_informative=2, # pylint: disable=W0632
165+
n_targets=2)
166+
model = PiecewiseRegressor(
167+
binner=DecisionTreeRegressor(min_samples_leaf=300))
168+
self.assertRaise(lambda: model.fit(X, y), RuntimeError)
169+
151170

152171
if __name__ == "__main__":
153172
unittest.main()

mlinsights/mlmodel/_kmeans_022.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from sklearn.utils.sparsefuncs_fast import assign_rows_csr # pylint: disable=W0611,E0611
1010
try:
1111
from sklearn.cluster._kmeans import _check_sample_weight
12-
except ImportError:
12+
except ImportError: # pragma: no cover
1313
from sklearn.cluster._kmeans import (
1414
_check_normalize_sample_weight as _check_sample_weight)
1515
from sklearn.metrics.pairwise import pairwise_distances_argmin_min

mlinsights/mlmodel/_kmeans_constraint_.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ def _compute_strategy_coefficient(distances, strategy, labels):
234234
ar = numpy.arange(distances.shape[0])
235235
dist = distances[ar, labels]
236236
return distances - dist[:, numpy.newaxis]
237-
raise ValueError("Unknwon strategy '{0}'.".format(strategy))
237+
raise ValueError( # pragma: no cover
238+
"Unknwon strategy '{0}'.".format(strategy))
238239

239240

240241
def _randomize_index(index, weights):

mlinsights/mlmodel/decision_tree_logreg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ def _fit_parallel(self, X, y, sample_weight):
422422

423423
def _fit_perpendicular(self, X, y, sample_weight):
424424
"Implements the perpendicular strategy."
425-
raise NotImplementedError()
425+
raise NotImplementedError() # pragma: no cover
426426

427427
def predict(self, X):
428428
"""

mlinsights/mlmodel/extended_features.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def _get_feature_names_poly(self, input_features=None):
7171
input_features = ["x%d" %
7272
i for i in range(0, self.n_input_features_)]
7373
elif len(input_features) != self.n_input_features_:
74-
raise ValueError(
74+
raise ValueError( # pragma: no cover
7575
"input_features should contain {} strings.".format(
7676
self.n_input_features_))
7777

@@ -125,7 +125,7 @@ def fit(self, X, y=None):
125125
return self._fit_poly(X, y)
126126
elif self.kind == 'poly-slow':
127127
return self._fit_poly(X, y)
128-
raise ValueError(
128+
raise ValueError( # pragma: no cover
129129
"Unknown extended features '{}'.".format(self.kind))
130130

131131
def _fit_poly(self, X, y=None):
@@ -148,7 +148,8 @@ def transform(self, X):
148148
"""
149149
n_features = X.shape[1]
150150
if n_features != self.n_input_features_:
151-
raise ValueError("X shape does not match training shape")
151+
raise ValueError( # pragma: no cover
152+
"X shape does not match training shape")
152153
if self.kind == 'poly':
153154
return self._transform_poly(X)
154155
if self.kind == 'poly-slow':

0 commit comments

Comments
 (0)