Skip to content

Make error message uniform when calling get_feature_names_out before fit #24916

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
36 tasks done
glemaitre opened this issue Nov 14, 2022 · 33 comments · Fixed by #25308
Closed
36 tasks done

Make error message uniform when calling get_feature_names_out before fit #24916

glemaitre opened this issue Nov 14, 2022 · 33 comments · Fixed by #25308
Labels
Enhancement help wanted Meta-issue General issue associated to an identified list of tasks New Feature

Comments

@glemaitre
Copy link
Member

glemaitre commented Nov 14, 2022

While working #24838, we found out that we are not consistent with the error type and message when calling get_feature_names_out before fit.

From @jpangas:

Here is the updated list of the estimators that raise inconsistent errors when get_feature_names_out is called before fit. Currently, these estimators have been whitelisted. Before we submit any PR for a particular estimator, we can remove the estimator from the list and run the test in #25223 to check if the code we submitted has raised the correct NotFittedError.

Remember to add your estimator and PR in the same change log entry in v1.3.rst introduced in #25294.
Please link the PRs you'll make with this issue so that I can update this list for all of us to know which estimators have been worked on:

> pytest -vsl sklearn/tests/test_common.py -k error_get_feature_names_out
==================================================================================== test session starts ====================================================================================
platform darwin -- Python 3.10.6, pytest-7.2.0, pluggy-1.0.0 -- /Users/glemaitre/mambaforge/envs/dev/bin/python3.10
cachedir: .pytest_cache
rootdir: /Users/glemaitre/Documents/packages/scikit-learn, configfile: setup.cfg
plugins: xdist-3.0.2, anyio-3.6.2
collected 9473 items / 9275 deselected / 198 selected                                                                                                                                       

sklearn/tests/test_common.py::test_estimators[ARDRegression()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[AdaBoostClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[AdaBoostRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[AdditiveChi2Sampler()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[AffinityPropagation()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[AgglomerativeClustering()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[BaggingClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[BaggingRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[BayesianGaussianMixture()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[BayesianRidge()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[BernoulliNB()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[BernoulliRBM()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This BernoulliRBM instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[Binarizer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[Birch()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This Birch instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[BisectingKMeans()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This BisectingKMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[CCA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This CCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[CalibratedClassifierCV(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[CategoricalNB()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ComplementNB()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[DBSCAN()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[DecisionTreeClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[DecisionTreeRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[DictionaryLearning()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This DictionaryLearning instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[DummyClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[DummyRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ElasticNet()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ElasticNetCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[EllipticEnvelope()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[EmpiricalCovariance()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ExtraTreeClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ExtraTreeRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ExtraTreesClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[ExtraTreesRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[FactorAnalysis()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This FactorAnalysis instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[FastICA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This FastICA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[FeatureAgglomeration()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This FeatureAgglomeration instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[FunctionTransformer()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GammaRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GaussianMixture()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GaussianNB()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GaussianProcessClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GaussianProcessRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GaussianRandomProjection()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GenericUnivariateSelect()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[GradientBoostingClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GradientBoostingRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GraphicalLasso()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[GraphicalLassoCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[HistGradientBoostingClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[HistGradientBoostingRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[HuberRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[IncrementalPCA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This IncrementalPCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[IsolationForest()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[Isomap()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This Isomap instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[KBinsDiscretizer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[KMeans()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This KMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[KNNImputer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[KNeighborsClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[KNeighborsRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[KNeighborsTransformer()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This KNeighborsTransformer instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[KernelCenterer()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This KernelCenterer instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[KernelDensity()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[KernelPCA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This KernelPCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[KernelRidge()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LabelPropagation()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LabelSpreading()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[Lars()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LarsCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[Lasso()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LassoCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LassoLars()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LassoLarsCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LassoLarsIC()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LatentDirichletAllocation()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This LatentDirichletAllocation instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[LedoitWolf()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LinearDiscriminantAnalysis()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This LinearDiscriminantAnalysis instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[LinearRegression()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LinearSVC()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LinearSVR()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LocalOutlierFactor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LocallyLinearEmbedding()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This LocallyLinearEmbedding instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[LogisticRegression()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[LogisticRegressionCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MDS()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MLPClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MLPRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MaxAbsScaler()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[MeanShift()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MinCovDet()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MinMaxScaler()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[MiniBatchDictionaryLearning()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This MiniBatchDictionaryLearning instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[MiniBatchKMeans()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This MiniBatchKMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[MiniBatchNMF()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This MiniBatchNMF instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[MiniBatchSparsePCA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This MiniBatchSparsePCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[MissingIndicator()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[MultiOutputRegressor(estimator=Ridge())-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MultiTaskElasticNet()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MultiTaskElasticNetCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MultiTaskLasso()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MultiTaskLassoCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[MultinomialNB()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[NMF()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This NMF instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[NearestCentroid()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[NearestNeighbors()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[NeighborhoodComponentsAnalysis()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This NeighborhoodComponentsAnalysis instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[Normalizer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[NuSVC()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[NuSVR()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[Nystroem()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This Nystroem instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[OAS()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OPTICS()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OneClassSVM()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OneVsOneClassifier(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OneVsRestClassifier(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OrthogonalMatchingPursuit()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OrthogonalMatchingPursuitCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[OutputCodeClassifier(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[PCA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This PCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[PLSCanonical()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This PLSCanonical instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[PLSRegression()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This PLSRegression instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[PLSSVD()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This PLSSVD instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[PassiveAggressiveClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[PassiveAggressiveRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[Perceptron()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[PoissonRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[PolynomialCountSketch()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This PolynomialCountSketch instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[PolynomialFeatures()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This PolynomialFeatures instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[PowerTransformer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[QuadraticDiscriminantAnalysis()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[QuantileRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[QuantileTransformer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[RANSACRegressor(estimator=LinearRegression())-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RBFSampler()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This RBFSampler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[RFE(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[RFECV(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[RadiusNeighborsClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RadiusNeighborsRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RadiusNeighborsTransformer()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This RadiusNeighborsTransformer instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[RandomForestClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RandomForestRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RandomTreesEmbedding()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This RandomTreesEmbedding instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[RegressorChain(base_estimator=Ridge())-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[Ridge()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RidgeCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RidgeClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RidgeClassifierCV()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[RobustScaler()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SGDClassifier()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SGDOneClassSVM()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SGDRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SVC()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SVR()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SelectFdr()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SelectFpr()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SelectFromModel(estimator=SGDRegressor(random_state=0))-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SelectFwe()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SelectKBest()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SelectPercentile()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SelfTrainingClassifier(base_estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SequentialFeatureSelector(estimator=LogisticRegression(C=1))-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[ShrunkCovariance()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SimpleImputer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[SkewedChi2Sampler()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This SkewedChi2Sampler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[SparsePCA()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This SparsePCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[SparseRandomProjection()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SpectralBiclustering()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SpectralClustering()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SpectralCoclustering()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SpectralEmbedding()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[SplineTransformer()-check_error_get_feature_names_out_not_fitted] 

<class 'AttributeError'>
'SplineTransformer' object has no attribute 'bsplines_'

PASSED
sklearn/tests/test_common.py::test_estimators[StackingClassifier(estimators=[('est1',LogisticRegression(C=0.1)),('est2',LogisticRegression(C=1))])-check_error_get_feature_names_out_not_fitted] 

<class 'AttributeError'>
'StackingClassifier' object has no attribute '_n_feature_outs'

PASSED
sklearn/tests/test_common.py::test_estimators[StackingRegressor(estimators=[('est1',Ridge(alpha=0.1)),('est2',Ridge(alpha=1))])-check_error_get_feature_names_out_not_fitted] 

<class 'AttributeError'>
'StackingRegressor' object has no attribute '_n_feature_outs'

PASSED
sklearn/tests/test_common.py::test_estimators[StandardScaler()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[TSNE()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[TfidfTransformer()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[TheilSenRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[TransformedTargetRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[TruncatedSVD()-check_error_get_feature_names_out_not_fitted] 

<class 'sklearn.exceptions.NotFittedError'>
This TruncatedSVD instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

PASSED
sklearn/tests/test_common.py::test_estimators[TweedieRegressor()-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[VarianceThreshold()-check_error_get_feature_names_out_not_fitted] 

<class 'ValueError'>
Unable to generate feature names without n_features_in_

PASSED
sklearn/tests/test_common.py::test_estimators[VotingClassifier(estimators=[('est1',LogisticRegression(C=0.1)),('est2',LogisticRegression(C=1))])-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_estimators[VotingRegressor(estimators=[('est1',Ridge(alpha=0.1)),('est2',Ridge(alpha=1))])-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[GridSearchCV(cv=2,estimator=Ridge(),param_grid={'alpha':[0.1,1.0]})-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[GridSearchCV(cv=2,estimator=LogisticRegression(),param_grid={'C':[0.1,1.0]})-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingGridSearchCV(cv=2,estimator=Ridge(),min_resources='smallest',param_grid={'alpha':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted0] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingGridSearchCV(cv=2,estimator=LogisticRegression(),min_resources='smallest',param_grid={'C':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted0] PASSED
sklearn/tests/test_common.py::test_search_cv[RandomizedSearchCV(cv=2,estimator=Ridge(),param_distributions={'alpha':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[RandomizedSearchCV(cv=2,estimator=LogisticRegression(),param_distributions={'C':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingGridSearchCV(cv=2,estimator=Ridge(),min_resources='smallest',param_grid={'alpha':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted1] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingGridSearchCV(cv=2,estimator=LogisticRegression(),min_resources='smallest',param_grid={'C':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted1] PASSED
sklearn/tests/test_common.py::test_search_cv[GridSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('ridge',Ridge())]),param_grid={'ridge__alpha':[0.1,1.0]})-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[GridSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('logisticregression',LogisticRegression())]),param_grid={'logisticregression__C':[0.1,1.0]})-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingGridSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('ridge',Ridge())]),min_resources='smallest',param_grid={'ridge__alpha':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingGridSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('logisticregression',LogisticRegression())]),min_resources='smallest',param_grid={'logisticregression__C':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[RandomizedSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('ridge',Ridge())]),param_distributions={'ridge__alpha':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[RandomizedSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('logisticregression',LogisticRegression())]),param_distributions={'logisticregression__C':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingRandomSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('ridge',Ridge())]),param_distributions={'ridge__alpha':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED
sklearn/tests/test_common.py::test_search_cv[HalvingRandomSearchCV(cv=2,error_score='raise',estimator=Pipeline(steps=[('pca',PCA()),('logisticregression',LogisticRegression())]),param_distributions={'logisticregression__C':[0.1,1.0]},random_state=0)-check_error_get_feature_names_out_not_fitted] PASSED

I assume that the most adequate error should be a NotFittedError asking to fit the estimator.

@scikit-learn/core-devs WDYT?

@github-actions github-actions bot added the Needs Triage Issue requires triage label Nov 14, 2022
@jjerphan
Copy link
Member

Thank you for reporting this.

What you propose, that is:

I assume that the most adequate error should be a NotFittedError asking to fit the estimator.

seems like the best solution to me.

@adrinjalali
Copy link
Member

yep, adding a check_is_fitted(self) at the beginning of each get_feature_names_out seems reasonable to me.

@thomasjpfan
Copy link
Member

I agree with raising a NotFittedError if the estimator is not fitted.

@jpangas
Copy link
Contributor

jpangas commented Nov 17, 2022

@glemaitre , I would like to help solve this issue. Any tips you would like to share before I start ?

@glemaitre
Copy link
Member Author

The best would be to create a common test running for all estimators having get_feature_names_out. It will help to identify which part of the code to change.

@jpangas
Copy link
Contributor

jpangas commented Nov 21, 2022

I am going to work on this. I will share updates if any.

@albuzenet
Copy link
Contributor

Hi @JohnPCode, I would like to work on this issue. Are you still working on it ? Can I start working on it ? Let me know.

@jpangas
Copy link
Contributor

jpangas commented Dec 11, 2022

@glemaitre , I have tried to run tests on all estimators with get_feature_names_out. However, it seems the code may have been changed while I was away. Could someone else have worked on the issue already?

@glemaitre
Copy link
Member Author

I don't think so. Otherwise, a pull request would be associated with this issue.

@albuzenet
Copy link
Contributor

albuzenet commented Dec 12, 2022

@glemaitre Do you actually expect some kind of pytest test to be implemented ?

@glemaitre
Copy link
Member Author

Do you actually expect some kind of pytest test to be implemented ?

Yes I expect to have a common test where we make sure to raise a NotFittedError and make the necessary changes in the estimators.

@jpangas
Copy link
Contributor

jpangas commented Dec 13, 2022

@AlexBuzenet, I created a common test and ran it on all estimators with get feature names out. Please take a look at the details below. You can see the estimators which raise a NotFittedError and those that raise other types of Errors.

(sklearn-dev) john@SwiftyXSwaggy:~/Documents/Local_Code/scikit-learn$ pytest -vsl sklearn/tests/test_common.py -k error_check_get_feature_names_out
============================================================================ test session starts ============================================================================
platform linux -- Python 3.9.15, pytest-7.2.0, pluggy-1.0.0 -- /home/john/miniconda3/envs/sklearn-dev/bin/python3.9
cachedir: .pytest_cache
rootdir: /home/john/Documents/Local_Code/scikit-learn, configfile: setup.cfg
plugins: cov-4.0.0, xdist-3.1.0
collected 9597 items / 9400 deselected / 197 selected                                                                                                                       

sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ARDRegression()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[AdaBoostClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[AdaBoostRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[AdditiveChi2Sampler()] ('AdditiveChi2Sampler', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[AffinityPropagation()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[AgglomerativeClustering()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BaggingClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BaggingRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BayesianGaussianMixture()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BayesianRidge()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BernoulliNB()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BernoulliRBM()] ('BernoulliRBM', NotFittedError("This BernoulliRBM instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Binarizer()] ('Binarizer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Birch()] ('Birch', NotFittedError("This Birch instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[BisectingKMeans()] ('BisectingKMeans', NotFittedError("This BisectingKMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[CCA()] ('CCA', NotFittedError("This CCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[CalibratedClassifierCV(estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[CategoricalNB()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ClassifierChain(base_estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ComplementNB()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[CountVectorizer()] ('CountVectorizer', NotFittedError('Vocabulary not fitted or provided'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DBSCAN()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DecisionTreeClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DecisionTreeRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DictVectorizer()] ('DictVectorizer', AttributeError("'DictVectorizer' object has no attribute 'feature_names_'"))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DictionaryLearning()] ('DictionaryLearning', NotFittedError("This DictionaryLearning instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DummyClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[DummyRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ElasticNet()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ElasticNetCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[EllipticEnvelope()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[EmpiricalCovariance()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ExtraTreeClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ExtraTreeRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ExtraTreesClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ExtraTreesRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[FactorAnalysis()] ('FactorAnalysis', NotFittedError("This FactorAnalysis instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[FastICA()] ('FastICA', NotFittedError("This FastICA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[FeatureAgglomeration()] ('FeatureAgglomeration', NotFittedError("This FeatureAgglomeration instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[FeatureHasher()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[FunctionTransformer()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GammaRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GaussianMixture()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GaussianNB()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GaussianProcessClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GaussianProcessRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GaussianRandomProjection()] ('GaussianRandomProjection', TypeError("'str' object cannot be interpreted as an integer"))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GenericUnivariateSelect()] ('GenericUnivariateSelect', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GradientBoostingClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GradientBoostingRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GraphicalLasso()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[GraphicalLassoCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[HashingVectorizer()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[HistGradientBoostingClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[HistGradientBoostingRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[HuberRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[IncrementalPCA()] ('IncrementalPCA', NotFittedError("This IncrementalPCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[IsolationForest()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Isomap()] ('Isomap', NotFittedError("This Isomap instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[IsotonicRegression()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[IterativeImputer()] ('IterativeImputer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KBinsDiscretizer()] ('KBinsDiscretizer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KMeans()] ('KMeans', NotFittedError("This KMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KNNImputer()] ('KNNImputer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KNeighborsClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KNeighborsRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KNeighborsTransformer()] ('KNeighborsTransformer', NotFittedError("This KNeighborsTransformer instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KernelCenterer()] ('KernelCenterer', NotFittedError("This KernelCenterer instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KernelDensity()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KernelPCA()] ('KernelPCA', NotFittedError("This KernelPCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[KernelRidge()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LabelBinarizer()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LabelEncoder()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LabelPropagation()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LabelSpreading()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Lars()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LarsCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Lasso()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LassoCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LassoLars()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LassoLarsCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LassoLarsIC()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LatentDirichletAllocation()] ('LatentDirichletAllocation', NotFittedError("This LatentDirichletAllocation instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LedoitWolf()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LinearDiscriminantAnalysis()] ('LinearDiscriminantAnalysis', NotFittedError("This LinearDiscriminantAnalysis instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LinearRegression()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LinearSVC()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LinearSVR()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LocalOutlierFactor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LocallyLinearEmbedding()] ('LocallyLinearEmbedding', NotFittedError("This LocallyLinearEmbedding instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LogisticRegression()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[LogisticRegressionCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MDS()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MLPClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MLPRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MaxAbsScaler()] ('MaxAbsScaler', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MeanShift()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MinCovDet()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MinMaxScaler()] ('MinMaxScaler', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MiniBatchDictionaryLearning()] ('MiniBatchDictionaryLearning', NotFittedError("This MiniBatchDictionaryLearning instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MiniBatchKMeans()] ('MiniBatchKMeans', NotFittedError("This MiniBatchKMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MiniBatchNMF()] ('MiniBatchNMF', NotFittedError("This MiniBatchNMF instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MiniBatchSparsePCA()] ('MiniBatchSparsePCA', NotFittedError("This MiniBatchSparsePCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MissingIndicator()] ('MissingIndicator', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiLabelBinarizer()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiOutputClassifier(estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiOutputRegressor(estimator=Ridge())] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiTaskElasticNet()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiTaskElasticNetCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiTaskLasso()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultiTaskLassoCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[MultinomialNB()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[NMF()] ('NMF', NotFittedError("This NMF instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[NearestCentroid()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[NearestNeighbors()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[NeighborhoodComponentsAnalysis()] ('NeighborhoodComponentsAnalysis', NotFittedError("This NeighborhoodComponentsAnalysis instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Normalizer()] ('Normalizer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[NuSVC()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[NuSVR()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Nystroem()] ('Nystroem', NotFittedError("This Nystroem instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OAS()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OPTICS()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OneClassSVM()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OneHotEncoder()] ('OneHotEncoder', NotFittedError("This OneHotEncoder instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OneVsOneClassifier(estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OneVsRestClassifier(estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OrdinalEncoder()] ('OrdinalEncoder', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OrthogonalMatchingPursuit()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OrthogonalMatchingPursuitCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[OutputCodeClassifier(estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PCA()] ('PCA', NotFittedError("This PCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PLSCanonical()] ('PLSCanonical', NotFittedError("This PLSCanonical instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PLSRegression()] ('PLSRegression', NotFittedError("This PLSRegression instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PLSSVD()] ('PLSSVD', NotFittedError("This PLSSVD instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PassiveAggressiveClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PassiveAggressiveRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PatchExtractor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Perceptron()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PoissonRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PolynomialCountSketch()] ('PolynomialCountSketch', NotFittedError("This PolynomialCountSketch instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PolynomialFeatures()] ('PolynomialFeatures', NotFittedError("This PolynomialFeatures instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[PowerTransformer()] ('PowerTransformer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[QuadraticDiscriminantAnalysis()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[QuantileRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[QuantileTransformer()] ('QuantileTransformer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RANSACRegressor(estimator=LinearRegression())] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RBFSampler()] ('RBFSampler', NotFittedError("This RBFSampler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RFE(estimator=LogisticRegression(C=1))] ('RFE', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RFECV(estimator=LogisticRegression(C=1))] ('RFECV', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RadiusNeighborsClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RadiusNeighborsRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RadiusNeighborsTransformer()] ('RadiusNeighborsTransformer', NotFittedError("This RadiusNeighborsTransformer instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RandomForestClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RandomForestRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RandomTreesEmbedding()] ('RandomTreesEmbedding', NotFittedError("This RandomTreesEmbedding instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RegressorChain(base_estimator=Ridge())] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[Ridge()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RidgeCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RidgeClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RidgeClassifierCV()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[RobustScaler()] ('RobustScaler', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SGDClassifier()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SGDOneClassSVM()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SGDRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SVC()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SVR()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelectFdr()] ('SelectFdr', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelectFpr()] ('SelectFpr', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelectFromModel(estimator=SGDRegressor(random_state=0))] ('SelectFromModel', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelectFwe()] ('SelectFwe', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelectKBest()] ('SelectKBest', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelectPercentile()] ('SelectPercentile', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SelfTrainingClassifier(base_estimator=LogisticRegression(C=1))] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SequentialFeatureSelector(estimator=LogisticRegression(C=1))] ('SequentialFeatureSelector', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[ShrunkCovariance()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SimpleImputer()] ('SimpleImputer', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SkewedChi2Sampler()] ('SkewedChi2Sampler', NotFittedError("This SkewedChi2Sampler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SparsePCA()] ('SparsePCA', NotFittedError("This SparsePCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SparseRandomProjection()] ('SparseRandomProjection', TypeError("'str' object cannot be interpreted as an integer"))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SpectralBiclustering()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SpectralClustering()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SpectralCoclustering()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SpectralEmbedding()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[SplineTransformer()] ('SplineTransformer', AttributeError("'SplineTransformer' object has no attribute 'bsplines_'"))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[StackingClassifier(estimators=[('est1',LogisticRegression(C=0.1)),('est2',LogisticRegression(C=1))])] ('StackingClassifier', AttributeError("'StackingClassifier' object has no attribute 'n_feature_outs'"))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[StackingRegressor(estimators=[('est1',Ridge(alpha=0.1)),('est2',Ridge(alpha=1))])] ('StackingRegressor', AttributeError("'StackingRegressor' object has no attribute 'n_feature_outs'"))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[StandardScaler()] ('StandardScaler', ValueError('Unable to generate feature names without n_features_in
'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TSNE()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TfidfTransformer()] ('TfidfTransformer', ValueError('Unable to generate feature names without n_features_in
'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TfidfVectorizer()] ('TfidfVectorizer', NotFittedError('Vocabulary not fitted or provided'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TheilSenRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TransformedTargetRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TruncatedSVD()] ('TruncatedSVD', NotFittedError("This TruncatedSVD instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator."))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[TweedieRegressor()] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[VarianceThreshold()] ('VarianceThreshold', ValueError('Unable to generate feature names without n_features_in_'))
PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[VotingClassifier(estimators=[('est1',LogisticRegression(C=0.1)),('est2',LogisticRegression(C=1))])] PASSED
sklearn/tests/test_common.py::test_error_check_get_feature_names_out[VotingRegressor(estimators=[('est1',Ridge(alpha=0.1)),('est2',Ridge(alpha=1))])] PASSED

============================================================= 197 passed, 9400 deselected, 76 warnings in 3.57s =============================================================

@albuzenet
Copy link
Contributor

@jpangas Maybe you can start with one PR with the new test in test_common.py ? We will need it to verify that the fixes are correctly implemented.

@Kshitij68
Copy link
Contributor

I agree with @albuzenet .

You can start with one PR that contains the test which runs for all estimators (in a parameterized way).
For each estimator assert that NotFittedError is raised.
For the ones where this is not raised, you can simply xfail the test ( for e.g

pytest.mark.xfail(run=False, reason="TODO pass numpydoc validation")
)

If you wish to collaborate on this, hit me up on scikit-learn discord channel :)

@Kshitij68
Copy link
Contributor

I raised a PR #25221 containing test case.

@jpangas The list you posted is incomplete. Can you update the list using the CLASS_NOT_FITTED_ERROR_IGNORE_LIST in my PR?

@scikit-learn/core-devs I believe once this PR is merged, it could qualify as Easy / good first issue. WDYT?

@jpangas
Copy link
Contributor

jpangas commented Jan 1, 2023

Update: The test that checks and ensures a NotFittedError is raised was successfully merged in PR #25223 . We can now work on the estimators that produce inconsistent errors @Kshitij68 @albuzenet

@jpangas
Copy link
Contributor

jpangas commented Jan 1, 2023

(The content of this message had been moved to the description of this PR.)

@rprkh
Copy link
Contributor

rprkh commented Jan 4, 2023

Working on AdditiveChi2Sampler, StackingClassifier and StackingRegressor, IterativeImputer, KNNImputer, SimpleImputer

@jpangas
Copy link
Contributor

jpangas commented Jan 5, 2023

Working on estimators that inherit from ClassNamePrefixFeaturesOutMixin and SelectorMixin.

@jpangas
Copy link
Contributor

jpangas commented Jan 11, 2023

@adrinjalali and @glemaitre, please help review the changes in PR #25308 and #25324

@jpangas
Copy link
Contributor

jpangas commented Jan 14, 2023

Thanks @rprkh ,I will now work on the final estimators so we can finally close this issue.
-SplineTransformer()
-DictVectorizer()
-KBinsDiscretizer()
-MissingIndicator()

@albuzenet
Copy link
Contributor

@jpangas May I work on KBinsDiscretizer, MissingIndicator ? I'd like to contribute before the issue is closed ?

@jpangas
Copy link
Contributor

jpangas commented Jan 14, 2023

@albuzenet , Sure go ahead and work on those estimators. It would be better if you could work on SplineTransformer and Dict Vectorizer as well. With one PR, we can finally close the issue without need for multiple reviews.

@rprkh
Copy link
Contributor

rprkh commented Jan 14, 2023

@jpangas I was going through the list of estimators in #24916 (comment) and I think need to include these ones as well:

"VotingClassifier",
"VotingRegressor",

I'll make a PR for this.

@jpangas
Copy link
Contributor

jpangas commented Jan 14, 2023

Great to hear that @rprkh . I suggest you include them in the PR #25324, it hasn’t yet been reviewed. All changes in that PR can be reviewed alongside the small change you’ll make for VotingClassifier and VotingRegressor

@rprkh
Copy link
Contributor

rprkh commented Jan 14, 2023

My bad @jpangas I saw your comment once my PR #25398 was already done :/

I'll close it and update the changes in PR #25324 so that it's easier to review

@jpangas
Copy link
Contributor

jpangas commented Jan 14, 2023

@rprkh, I see you have included the changes for VotingClassifier and VotingRegressor in #25324. Let’s wait they review the PR. We shall be done after @albuzenet submits his changes.

@jpangas
Copy link
Contributor

jpangas commented Jan 17, 2023

@rprkh , is it possible for you to take up IsotonicRegression and include it in your PR #25367 ?

@rprkh
Copy link
Contributor

rprkh commented Jan 17, 2023

Sure @jpangas, I'll update the PR by EOD.

@jjerphan
Copy link
Member

@jpangas: is it OK for you if I move the list you wrote in #24916 (comment) in the description of this issue so that we have a better overview and a list of subtasks?

@jjerphan jjerphan added the Meta-issue General issue associated to an identified list of tasks label Jan 18, 2023
@jpangas
Copy link
Contributor

jpangas commented Jan 18, 2023

@jjerphan, yes. It's absolutely okay. Thank you. It will help track easily.

@jpangas
Copy link
Contributor

jpangas commented Jan 24, 2023

Thanks @albuzenet and @rprkh for working alongside this issue with me. Thanks @glemaitre , @adrinjalali, @thomasjpfan , @jjerphan for the guidance and quick reviews. Onto the next. 💪

@rprkh
Copy link
Contributor

rprkh commented Jan 24, 2023

It was nice collaborating with everyone. Thank you for the help and quick reviews🙂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement help wanted Meta-issue General issue associated to an identified list of tasks New Feature
Projects
None yet
8 participants