ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ΅ΡΠΊΠ΅ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ None
Π΄Π»Ρ ΡΠ°Π³Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ AttributeError
. ΠΡΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π½ΠΈΠΆΠ΅ ΡΠ°Π½Π΅Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π» Ρ scikit-learn==0.23.2
Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ 0.24.dev0
.
from sklearn.datasets import load_iris
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
iris = load_iris()
X, y = iris.data, iris.target
pipe = Pipeline([("setup", None), ("svc", SVC(kernel="linear", random_state=0))])
param_grid = [
{"svc__C": [0.1, 0.1]},
{"setup": [StandardScaler()]},
]
gs = GridSearchCV(pipe, param_grid=param_grid, return_train_score=True, cv=3)
gs.fit(X, y)
ΠΡΠ·ΠΎΠ² GridSearchCV.fit
ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° (Ρ Π²ΠΊΠ»ΡΡΠΈΠ» ΠΏΠΎΠ»Π½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π½ΠΈΠΆΠ΅):
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/base.py", line 863, in _is_pairwise
pairwise_tag = estimator._get_tags().get('pairwise', False)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/base.py", line 348, in _get_tags
more_tags = base_class._more_tags(self)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/pipeline.py", line 626, in _more_tags
estimator_tags = self.steps[0][1]._get_tags()
AttributeError: 'NoneType' object has no attribute '_get_tags'
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° _is_pairwise
Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Ρ None
Π΄Π»Ρ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠ³ΠΎ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΎΡΠ°.
ΠΠΎΠ»Π½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°:
Traceback (most recent call last):
File "test-pipeline.py", line 18, in <module>
gs.fit(X, y)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/utils/validation.py", line 60, in inner_f
return f(*args, **kwargs)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/model_selection/_search.py", line 841, in fit
self._run_search(evaluate_candidates)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/model_selection/_search.py", line 1288, in _run_search
evaluate_candidates(ParameterGrid(self.param_grid))
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/model_selection/_search.py", line 795, in evaluate_candidates
out = parallel(delayed(_fit_and_score)(clone(base_estimator),
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/parallel.py", line 1048, in __call__
if self.dispatch_one_batch(iterator):
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/parallel.py", line 866, in dispatch_one_batch
self._dispatch(tasks)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/parallel.py", line 784, in _dispatch
job = self._backend.apply_async(batch, callback=cb)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/_parallel_backends.py", line 208, in apply_async
result = ImmediateResult(func)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/_parallel_backends.py", line 572, in __init__
self.results = batch()
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/parallel.py", line 262, in __call__
return [func(*args, **kwargs)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/joblib/parallel.py", line 262, in <listcomp>
return [func(*args, **kwargs)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/utils/fixes.py", line 222, in __call__
return self.function(*args, **kwargs)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/model_selection/_validation.py", line 585, in _fit_and_score
X_train, y_train = _safe_split(estimator, X, y, train)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/utils/metaestimators.py", line 198, in _safe_split
if _is_pairwise(estimator):
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/base.py", line 863, in _is_pairwise
pairwise_tag = estimator._get_tags().get('pairwise', False)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/base.py", line 348, in _get_tags
more_tags = base_class._more_tags(self)
File "/Users/james/miniforge3/envs/dask-ml/lib/python3.8/site-packages/sklearn/pipeline.py", line 626, in _more_tags
estimator_tags = self.steps[0][1]._get_tags()
AttributeError: 'NoneType' object has no attribute '_get_tags'
System:
python: 3.8.6 | packaged by conda-forge | (default, Oct 7 2020, 18:42:56) [Clang 10.0.1 ]
executable: /Users/james/miniforge3/envs/dask-ml/bin/python3.8
machine: macOS-10.15.5-x86_64-i386-64bit
Python dependencies:
pip: 20.2.4
setuptools: 49.6.0.post20201009
sklearn: 0.24.dev0
numpy: 1.19.4
scipy: 1.5.3
Cython: None
pandas: 1.1.4
matplotlib: None
joblib: 0.17.0
threadpoolctl: 2.1.0
Built with OpenMP: True
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΡΠ΅Ρ @jrbourbeau , ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π΅Π³ΠΎ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΡ ΠΈΡΠ΅ΠΌ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²ΡΡΠ΅.
Π― ΠΏΠΎΠΌΠ΅ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ None
, Π½ΠΎ ΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ°Π³Π°, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° _get_tags
(Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ BaseEstimator
)
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ # 18797. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠ²ΠΎΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΎΡΡΠ΅Ρ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― ΠΏΠΎΠΌΠ΅ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
None
, Π½ΠΎ ΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ°Π³Π°, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°_get_tags
(Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡBaseEstimator
)