Make all estimators use `_validate_params`

PR #22722 introduced a common method for the validation of the parameters of an estimator. We now need to use it in all estimators.

Please open one PR per estimator or family of estimators (if one inherits from another). The title of the PR must mention which estimator it's dealing with. We recommend using the following pattern for titles:

```
MAINT Parameters validation for <Estimator>
```

where `<Estimator>` is a placeholder to be replaced with the Estimator you chose.

The description of the PR must begin with `Towards #23462` so that this issue and the PR are mutually crossed-linked.

### Steps
- The estimator must define a class attribute `_parameter_constraints` that defines the valid types and values for the parameters of the estimator. **Do not rely only on the docstring of the estimator to define it**: although it can help, it's important to primarily rely on the implementation to find the valid values because the docstring might not be completely accurate. See how it's done in KMeans for instance https://github.com/scikit-learn/scikit-learn/blob/02ebf9e68fe1fc7687d9e1047b9e465ae0fd945e/sklearn/cluster/_kmeans.py#L835-L847
- If the estimator class inherits from a base class that already defines `_parameter_constraints`, we just need to extend it.
- Then, the first thing that `fit` and `partial_fit` should do is call `self._validate_params`.
- All existing simple param validation can now be removed. (simple means that does not depend on the input data or that does not depend on the value of another parameter for instance). Missing removal of such validation should be easy to spot with codecov since they become unreachable code.
- Tests that checks error messages from simple param validation can also be removed (carefully: we need to keep the tests checking for more complex param validation !).
- Finally, remove the estimator from the list of skipped estimators for the common param validation test https://github.com/scikit-learn/scikit-learn/blob/ec5d2ed9e5bfb6b0baff57ff1f994310e9a31ad9/sklearn/tests/test_common.py#L448
      and make sure the test passes: `pytest -vl sklearn/tests/test_common.py -k check_param_validation`

### Estimators to update
- [x] ARDRegression
- [x] AdaBoostClassifier
- [x] AdaBoostRegressor
- [x] AdditiveChi2Sampler
- [x] AffinityPropagation
- [x] AgglomerativeClustering
- [x] BaggingClassifier
- [x] BaggingRegressor
- [x] BayesianGaussianMixture
- [x] BayesianRidge
- [x] BernoulliNB
- [x] BernoulliRBM
- [x] Binarizer
- [x] Birch
- [x] CCA
- [x] CalibratedClassifierCV
- [x] CategoricalNB
- [x] ClassifierChain
- [x] ComplementNB
- [x] CountVectorizer
- [x] DBSCAN
- [x] DecisionTreeClassifier
- [x] DecisionTreeRegressor
- [x] DictVectorizer
- [x] DictionaryLearning
- [x] DummyClassifier
- [x] DummyRegressor
- [x] ElasticNet
- [x] ElasticNetCV
- [x] EllipticEnvelope
- [x] EmpiricalCovariance
- [x] ExtraTreeClassifier
- [x] ExtraTreeRegressor
- [x] ExtraTreesClassifier
- [x] ExtraTreesRegressor
- [x] FactorAnalysis
- [x] FastICA
- [x] FeatureAgglomeration
- [x] FeatureHasher
- [x] FunctionTransformer
- [x] GammaRegressor
- [x] GaussianMixture
- [x] GaussianNB
- [x] GaussianProcessClassifier
- [x] GaussianProcessRegressor
- [x] GaussianRandomProjection
- [x] GenericUnivariateSelect
- [x] GradientBoostingClassifier
- [x] GradientBoostingRegressor
- [x] GraphicalLasso
- [x] GraphicalLassoCV
- [x] HashingVectorizer
- [x] HistGradientBoostingClassifier
- [x] HistGradientBoostingRegressor
- [x] HuberRegressor
- [x] IncrementalPCA
- [x] IsolationForest
- [x] Isomap
- [x] IsotonicRegression
- [x] IterativeImputer
- [x] KBinsDiscretizer
- [x] KNNImputer
- [x] KNeighborsClassifier
- [x] KNeighborsRegressor
- [x] KNeighborsTransformer
- [x] KernelDensity
- [x] KernelPCA
- [x] KernelRidge
- [x] LabelBinarizer
- [x] LabelPropagation
- [x] LabelSpreading
- [x] Lars
- [x] LarsCV
- [x] Lasso
- [x] LassoCV
- [x] LassoLars
- [x] LassoLarsCV
- [x] LassoLarsIC
- [x] LatentDirichletAllocation
- [x] LedoitWolf
- [x] LinearDiscriminantAnalysis
- [x] LinearRegression
- [x] LinearSVC
- [x] LinearSVR
- [x] LocalOutlierFactor
- [x] LocallyLinearEmbedding
- [x] LogisticRegression
- [x] LogisticRegressionCV
- [x] MDS
- [x] MLPClassifier
- [x] MLPRegressor
- [x] MaxAbsScaler
- [x] MeanShift
- [x] MinCovDet
- [x] MinMaxScaler
- [x] MiniBatchDictionaryLearning
- [x] MiniBatchNMF
- [x] MiniBatchSparsePCA
- [x] MissingIndicator
- [x] MultiLabelBinarizer
- [x] MultiOutputClassifier
- [x] MultiOutputRegressor
- [x] MultiTaskElasticNet
- [x] MultiTaskElasticNetCV
- [x] MultiTaskLasso
- [x] MultiTaskLassoCV
- [x] MultinomialNB
- [x] NMF
- [x] NearestCentroid
- [x] NearestNeighbors
- [x] NeighborhoodComponentsAnalysis
- [x] Normalizer
- [x] NuSVC
- [x] NuSVR
- [x] Nystroem
- [x] OAS
- [x] OPTICS
- [x] OneClassSVM
- [x] OneHotEncoder
- [x] OneVsOneClassifier
- [x] OneVsRestClassifier
- [x] OrdinalEncoder
- [x] OrthogonalMatchingPursuit
- [x] OrthogonalMatchingPursuitCV
- [x] OutputCodeClassifier
- [x] PCA
- [x] PLSCanonical
- [x] PLSRegression
- [x] PLSSVD
- [x] PassiveAggressiveClassifier
- [x] PassiveAggressiveRegressor
- [x] PatchExtractor
- [x] Perceptron
- [x] PoissonRegressor
- [x] PolynomialCountSketch
- [x] PolynomialFeatures
- [x] PowerTransformer
- [x] QuadraticDiscriminantAnalysis
- [x] QuantileRegressor
- [x] QuantileTransformer
- [x] RANSACRegressor
- [x] RBFSampler
- [x] RFE
- [x] RFECV
- [x] RadiusNeighborsClassifier
- [x] RadiusNeighborsRegressor
- [x] RadiusNeighborsTransformer
- [x] RandomForestClassifier
- [x] RandomForestRegressor
- [x] RandomTreesEmbedding
- [x] RegressorChain
- [x] Ridge
- [x] RidgeCV
- [x] RidgeClassifier
- [x] RidgeClassifierCV
- [x] RobustScaler
- [x] SGDClassifier
- [x] SGDOneClassSVM
- [x] SGDRegressor
- [x] SVC
- [x] SVR
- [x] SelectFdr
- [x] SelectFpr
- [x] SelectFromModel
- [x] SelectFwe
- [x] SelectKBest
- [x] SelectPercentile
- [x] SelfTrainingClassifier
- [x] SequentialFeatureSelector
- [x] ShrunkCovariance
- [x] SimpleImputer
- [x] SkewedChi2Sampler
- [x] SparsePCA
- [x] SparseRandomProjection
- [x] SpectralBiclustering
- [x] SpectralClustering
- [x] SpectralCoclustering
- [x] SpectralEmbedding
- [x] SplineTransformer
- [x] StackingClassifier
- [x] StackingRegressor
- [x] StandardScaler
- [x] TSNE
- [x] TfidfTransformer
- [x] TfidfVectorizer
- [x] TheilSenRegressor
- [x] TransformedTargetRegressor
- [x] TruncatedSVD
- [x] TweedieRegressor
- [x] VarianceThreshold
- [x] VotingClassifier
- [x] VotingRegressor

COMMENT:
> Hi @Diadochokinetic , Try "dtype": [np.float64]

Hi @Nwanna-Joseph ,

thanks for the idea. I already tried that without success. We figured that numpy accepts too many different ways of constructing a numerical dtype to cover with the current methods available. @jeremiedbb is currently working on a way to skip validation for such cases https://github.com/scikit-learn/scikit-learn/pull/23602

Labels: Easy, good first issue, Meta-issue, Validation