1278 lines
56 KiB
ReStructuredText
1278 lines
56 KiB
ReStructuredText
.. include:: _contributors.rst
|
||
|
||
.. currentmodule:: sklearn
|
||
|
||
.. _release_notes_1_0:
|
||
|
||
===========
|
||
Version 1.0
|
||
===========
|
||
|
||
For a short description of the main highlights of the release, please refer to
|
||
:ref:`sphx_glr_auto_examples_release_highlights_plot_release_highlights_1_0_0.py`.
|
||
|
||
.. include:: changelog_legend.inc
|
||
|
||
.. _changes_1_0_2:
|
||
|
||
Version 1.0.2
|
||
=============
|
||
|
||
**December 2021**
|
||
|
||
- |Fix| :class:`cluster.Birch`,
|
||
:class:`feature_selection.RFECV`, :class:`ensemble.RandomForestRegressor`,
|
||
:class:`ensemble.RandomForestClassifier`,
|
||
:class:`ensemble.GradientBoostingRegressor`, and
|
||
:class:`ensemble.GradientBoostingClassifier` do not raise warning when fitted
|
||
on a pandas DataFrame anymore. :pr:`21578` by `Thomas Fan`_.
|
||
|
||
Changelog
|
||
---------
|
||
|
||
:mod:`sklearn.cluster`
|
||
......................
|
||
|
||
- |Fix| Fixed an infinite loop in :func:`cluster.SpectralClustering` by
|
||
moving an iteration counter from try to except.
|
||
:pr:`21271` by :user:`Tyler Martin <martintb>`.
|
||
|
||
:mod:`sklearn.datasets`
|
||
.......................
|
||
|
||
- |Fix| :func:`datasets.fetch_openml` is now thread safe. Data is first
|
||
downloaded to a temporary subfolder and then renamed.
|
||
:pr:`21833` by :user:`Siavash Rezazadeh <siavrez>`.
|
||
|
||
:mod:`sklearn.decomposition`
|
||
............................
|
||
|
||
- |Fix| Fixed the constraint on the objective function of
|
||
:class:`decomposition.DictionaryLearning`,
|
||
:class:`decomposition.MiniBatchDictionaryLearning`, :class:`decomposition.SparsePCA`
|
||
and :class:`decomposition.MiniBatchSparsePCA` to be convex and match the referenced
|
||
article. :pr:`19210` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
:mod:`sklearn.ensemble`
|
||
.......................
|
||
|
||
- |Fix| :class:`ensemble.RandomForestClassifier`,
|
||
:class:`ensemble.RandomForestRegressor`,
|
||
:class:`ensemble.ExtraTreesClassifier`, :class:`ensemble.ExtraTreesRegressor`,
|
||
and :class:`ensemble.RandomTreesEmbedding` now raise a ``ValueError`` when
|
||
``bootstrap=False`` and ``max_samples`` is not ``None``.
|
||
:pr:`21295` :user:`Haoyin Xu <PSSF23>`.
|
||
|
||
- |Fix| Solve a bug in :class:`ensemble.GradientBoostingClassifier` where the
|
||
exponential loss was computing the positive gradient instead of the
|
||
negative one.
|
||
:pr:`22050` by :user:`Guillaume Lemaitre <glemaitre>`.
|
||
|
||
:mod:`sklearn.feature_selection`
|
||
................................
|
||
|
||
- |Fix| Fixed :class:`feature_selection.SelectFromModel` by improving support
|
||
for base estimators that do not set `feature_names_in_`. :pr:`21991` by
|
||
`Thomas Fan`_.
|
||
|
||
:mod:`sklearn.impute`
|
||
.....................
|
||
|
||
- |Fix| Fix a bug in :class:`linear_model.RidgeClassifierCV` where the method
|
||
`predict` was performing an `argmax` on the scores obtained from
|
||
`decision_function` instead of returning the multilabel indicator matrix.
|
||
:pr:`19869` by :user:`Guillaume Lemaitre <glemaitre>`.
|
||
|
||
:mod:`sklearn.linear_model`
|
||
...........................
|
||
|
||
- |Fix| :class:`linear_model.LassoLarsIC` now correctly computes AIC
|
||
and BIC. An error is now raised when `n_features > n_samples` and
|
||
when the noise variance is not provided.
|
||
:pr:`21481` by :user:`Guillaume Lemaitre <glemaitre>` and
|
||
:user:`Andrés Babino <ababino>`.
|
||
|
||
:mod:`sklearn.manifold`
|
||
.......................
|
||
|
||
- |Fix| Fixed an unnecessary error when fitting :class:`manifold.Isomap` with a
|
||
precomputed dense distance matrix where the neighbors graph has multiple
|
||
disconnected components. :pr:`21915` by `Tom Dupre la Tour`_.
|
||
|
||
:mod:`sklearn.metrics`
|
||
......................
|
||
|
||
- |Fix| All :class:`sklearn.metrics.DistanceMetric` subclasses now correctly support
|
||
read-only buffer attributes.
|
||
This fixes a regression introduced in 1.0.0 with respect to 0.24.2.
|
||
:pr:`21694` by :user:`Julien Jerphanion <jjerphan>`.
|
||
|
||
- |Fix| All `sklearn.metrics.MinkowskiDistance` now accepts a weight
|
||
parameter that makes it possible to write code that behaves consistently both
|
||
with scipy 1.8 and earlier versions. In turns this means that all
|
||
neighbors-based estimators (except those that use `algorithm="kd_tree"`) now
|
||
accept a weight parameter with `metric="minknowski"` to yield results that
|
||
are always consistent with `scipy.spatial.distance.cdist`.
|
||
:pr:`21741` by :user:`Olivier Grisel <ogrisel>`.
|
||
|
||
:mod:`sklearn.multiclass`
|
||
.........................
|
||
|
||
- |Fix| :meth:`multiclass.OneVsRestClassifier.predict_proba` does not error when
|
||
fitted on constant integer targets. :pr:`21871` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.neighbors`
|
||
........................
|
||
|
||
- |Fix| :class:`neighbors.KDTree` and :class:`neighbors.BallTree` correctly supports
|
||
read-only buffer attributes. :pr:`21845` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.preprocessing`
|
||
............................
|
||
|
||
- |Fix| Fixes compatibility bug with NumPy 1.22 in :class:`preprocessing.OneHotEncoder`.
|
||
:pr:`21517` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.tree`
|
||
...................
|
||
|
||
- |Fix| Prevents :func:`tree.plot_tree` from drawing out of the boundary of
|
||
the figure. :pr:`21917` by `Thomas Fan`_.
|
||
|
||
- |Fix| Support loading pickles of decision tree models when the pickle has
|
||
been generated on a platform with a different bitness. A typical example is
|
||
to train and pickle the model on 64 bit machine and load the model on a 32
|
||
bit machine for prediction. :pr:`21552` by :user:`Loïc Estève <lesteve>`.
|
||
|
||
:mod:`sklearn.utils`
|
||
....................
|
||
|
||
- |Fix| :func:`utils.estimator_html_repr` now escapes all the estimator
|
||
descriptions in the generated HTML. :pr:`21493` by
|
||
:user:`Aurélien Geron <ageron>`.
|
||
|
||
.. _changes_1_0_1:
|
||
|
||
Version 1.0.1
|
||
=============
|
||
|
||
**October 2021**
|
||
|
||
Fixed models
|
||
------------
|
||
|
||
- |Fix| Non-fit methods in the following classes do not raise a UserWarning
|
||
when fitted on DataFrames with valid feature names:
|
||
:class:`covariance.EllipticEnvelope`, :class:`ensemble.IsolationForest`,
|
||
:class:`ensemble.AdaBoostClassifier`, :class:`neighbors.KNeighborsClassifier`,
|
||
:class:`neighbors.KNeighborsRegressor`,
|
||
:class:`neighbors.RadiusNeighborsClassifier`,
|
||
:class:`neighbors.RadiusNeighborsRegressor`. :pr:`21199` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.calibration`
|
||
..........................
|
||
|
||
- |Fix| Fixed :class:`calibration.CalibratedClassifierCV` to take into account
|
||
`sample_weight` when computing the base estimator prediction when
|
||
`ensemble=False`.
|
||
:pr:`20638` by :user:`Julien Bohné <JulienB-78>`.
|
||
|
||
- |Fix| Fixed a bug in :class:`calibration.CalibratedClassifierCV` with
|
||
`method="sigmoid"` that was ignoring the `sample_weight` when computing the
|
||
the Bayesian priors.
|
||
:pr:`21179` by :user:`Guillaume Lemaitre <glemaitre>`.
|
||
|
||
:mod:`sklearn.cluster`
|
||
......................
|
||
|
||
- |Fix| Fixed a bug in :class:`cluster.KMeans`, ensuring reproducibility and equivalence
|
||
between sparse and dense input. :pr:`21195`
|
||
by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
:mod:`sklearn.ensemble`
|
||
.......................
|
||
|
||
- |Fix| Fixed a bug that could produce a segfault in rare cases for
|
||
:class:`ensemble.HistGradientBoostingClassifier` and
|
||
:class:`ensemble.HistGradientBoostingRegressor`.
|
||
:pr:`21130` :user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
:mod:`sklearn.gaussian_process`
|
||
...............................
|
||
|
||
- |Fix| Compute `y_std` properly with multi-target in
|
||
:class:`sklearn.gaussian_process.GaussianProcessRegressor` allowing
|
||
proper normalization in multi-target scene.
|
||
:pr:`20761` by :user:`Patrick de C. T. R. Ferreira <patrickctrf>`.
|
||
|
||
:mod:`sklearn.feature_extraction`
|
||
.................................
|
||
|
||
- |Efficiency| Fixed an efficiency regression introduced in version 1.0.0 in the
|
||
`transform` method of :class:`feature_extraction.text.CountVectorizer` which no
|
||
longer checks for uppercase characters in the provided vocabulary. :pr:`21251`
|
||
by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |Fix| Fixed a bug in :class:`feature_extraction.text.CountVectorizer` and
|
||
:class:`feature_extraction.text.TfidfVectorizer` by raising an
|
||
error when 'min_idf' or 'max_idf' are floating-point numbers greater than 1.
|
||
:pr:`20752` by :user:`Alek Lefebvre <AlekLefebvre>`.
|
||
|
||
:mod:`sklearn.linear_model`
|
||
...........................
|
||
|
||
- |Fix| Improves stability of :class:`linear_model.LassoLars` for different
|
||
versions of openblas. :pr:`21340` by `Thomas Fan`_.
|
||
|
||
- |Fix| :class:`linear_model.LogisticRegression` now raises a better error
|
||
message when the solver does not support sparse matrices with int64 indices.
|
||
:pr:`21093` by `Tom Dupre la Tour`_.
|
||
|
||
:mod:`sklearn.neighbors`
|
||
........................
|
||
|
||
- |Fix| :class:`neighbors.KNeighborsClassifier`,
|
||
:class:`neighbors.KNeighborsRegressor`,
|
||
:class:`neighbors.RadiusNeighborsClassifier`,
|
||
:class:`neighbors.RadiusNeighborsRegressor` with `metric="precomputed"` raises
|
||
an error for `bsr` and `dok` sparse matrices in methods: `fit`, `kneighbors`
|
||
and `radius_neighbors`, due to handling of explicit zeros in `bsr` and `dok`
|
||
:term:`sparse graph` formats. :pr:`21199` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.pipeline`
|
||
.......................
|
||
|
||
- |Fix| :meth:`pipeline.Pipeline.get_feature_names_out` correctly passes feature
|
||
names out from one step of a pipeline to the next. :pr:`21351` by
|
||
`Thomas Fan`_.
|
||
|
||
:mod:`sklearn.svm`
|
||
..................
|
||
|
||
- |Fix| :class:`svm.SVC` and :class:`svm.SVR` check for an inconsistency
|
||
in its internal representation and raise an error instead of segfaulting.
|
||
This fix also resolves
|
||
`CVE-2020-28975 <https://nvd.nist.gov/vuln/detail/CVE-2020-28975>`__.
|
||
:pr:`21336` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.utils`
|
||
....................
|
||
|
||
- |Enhancement| `utils.validation._check_sample_weight` can perform a
|
||
non-negativity check on the sample weights. It can be turned on
|
||
using the only_non_negative bool parameter.
|
||
Estimators that check for non-negative weights are updated:
|
||
:func:`linear_model.LinearRegression` (here the previous
|
||
error message was misleading),
|
||
:func:`ensemble.AdaBoostClassifier`,
|
||
:func:`ensemble.AdaBoostRegressor`,
|
||
:func:`neighbors.KernelDensity`.
|
||
:pr:`20880` by :user:`Guillaume Lemaitre <glemaitre>`
|
||
and :user:`András Simon <simonandras>`.
|
||
|
||
- |Fix| Solve a bug in ``sklearn.utils.metaestimators.if_delegate_has_method``
|
||
where the underlying check for an attribute did not work with NumPy arrays.
|
||
:pr:`21145` by :user:`Zahlii <Zahlii>`.
|
||
|
||
Miscellaneous
|
||
.............
|
||
|
||
- |Fix| Fitting an estimator on a dataset that has no feature names, that was previously
|
||
fitted on a dataset with feature names no longer keeps the old feature names stored in
|
||
the `feature_names_in_` attribute. :pr:`21389` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
.. _changes_1_0:
|
||
|
||
Version 1.0.0
|
||
=============
|
||
|
||
**September 2021**
|
||
|
||
Minimal dependencies
|
||
--------------------
|
||
|
||
Version 1.0.0 of scikit-learn requires python 3.7+, numpy 1.14.6+ and
|
||
scipy 1.1.0+. Optional minimal dependency is matplotlib 2.2.2+.
|
||
|
||
Enforcing keyword-only arguments
|
||
--------------------------------
|
||
|
||
In an effort to promote clear and non-ambiguous use of the library, most
|
||
constructor and function parameters must now be passed as keyword arguments
|
||
(i.e. using the `param=value` syntax) instead of positional. If a keyword-only
|
||
parameter is used as positional, a `TypeError` is now raised.
|
||
:issue:`15005` :pr:`20002` by `Joel Nothman`_, `Adrin Jalali`_, `Thomas Fan`_,
|
||
`Nicolas Hug`_, and `Tom Dupre la Tour`_. See `SLEP009
|
||
<https://scikit-learn-enhancement-proposals.readthedocs.io/en/latest/slep009/proposal.html>`_
|
||
for more details.
|
||
|
||
Changed models
|
||
--------------
|
||
|
||
The following estimators and functions, when fit with the same data and
|
||
parameters, may produce different models from the previous version. This often
|
||
occurs due to changes in the modelling logic (bug fixes or enhancements), or in
|
||
random sampling procedures.
|
||
|
||
- |Fix| :class:`manifold.TSNE` now avoids numerical underflow issues during
|
||
affinity matrix computation.
|
||
|
||
- |Fix| :class:`manifold.Isomap` now connects disconnected components of the
|
||
neighbors graph along some minimum distance pairs, instead of changing
|
||
every infinite distances to zero.
|
||
|
||
- |Fix| The splitting criterion of :class:`tree.DecisionTreeClassifier` and
|
||
:class:`tree.DecisionTreeRegressor` can be impacted by a fix in the handling
|
||
of rounding errors. Previously some extra spurious splits could occur.
|
||
|
||
- |Fix| :func:`model_selection.train_test_split` with a `stratify` parameter
|
||
and :class:`model_selection.StratifiedShuffleSplit` may lead to slightly
|
||
different results.
|
||
|
||
Details are listed in the changelog below.
|
||
|
||
(While we are trying to better inform users by providing this information, we
|
||
cannot assure that this list is complete.)
|
||
|
||
|
||
Changelog
|
||
---------
|
||
|
||
..
|
||
Entries should be grouped by module (in alphabetic order) and prefixed with
|
||
one of the labels: |MajorFeature|, |Feature|, |Efficiency|, |Enhancement|,
|
||
|Fix| or |API| (see whats_new.rst for descriptions).
|
||
Entries should be ordered by those labels (e.g. |Fix| after |Efficiency|).
|
||
Changes not specific to a module should be listed under *Multiple Modules*
|
||
or *Miscellaneous*.
|
||
Entries should end with:
|
||
:pr:`123456` by :user:`Joe Bloggs <joeongithub>`.
|
||
where 123456 is the *pull request* number, not the issue number.
|
||
|
||
- |API| The option for using the squared error via ``loss`` and
|
||
``criterion`` parameters was made more consistent. The preferred way is by
|
||
setting the value to `"squared_error"`. Old option names are still valid,
|
||
produce the same models, but are deprecated and will be removed in version
|
||
1.2.
|
||
:pr:`19310` by :user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
- For :class:`ensemble.ExtraTreesRegressor`, `criterion="mse"` is deprecated,
|
||
use `"squared_error"` instead which is now the default.
|
||
|
||
- For :class:`ensemble.GradientBoostingRegressor`, `loss="ls"` is deprecated,
|
||
use `"squared_error"` instead which is now the default.
|
||
|
||
- For :class:`ensemble.RandomForestRegressor`, `criterion="mse"` is deprecated,
|
||
use `"squared_error"` instead which is now the default.
|
||
|
||
- For :class:`ensemble.HistGradientBoostingRegressor`, `loss="least_squares"`
|
||
is deprecated, use `"squared_error"` instead which is now the default.
|
||
|
||
- For :class:`linear_model.RANSACRegressor`, `loss="squared_loss"` is
|
||
deprecated, use `"squared_error"` instead.
|
||
|
||
- For :class:`linear_model.SGDRegressor`, `loss="squared_loss"` is
|
||
deprecated, use `"squared_error"` instead which is now the default.
|
||
|
||
- For :class:`tree.DecisionTreeRegressor`, `criterion="mse"` is deprecated,
|
||
use `"squared_error"` instead which is now the default.
|
||
|
||
- For :class:`tree.ExtraTreeRegressor`, `criterion="mse"` is deprecated,
|
||
use `"squared_error"` instead which is now the default.
|
||
|
||
- |API| The option for using the absolute error via ``loss`` and
|
||
``criterion`` parameters was made more consistent. The preferred way is by
|
||
setting the value to `"absolute_error"`. Old option names are still valid,
|
||
produce the same models, but are deprecated and will be removed in version
|
||
1.2.
|
||
:pr:`19733` by :user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
- For :class:`ensemble.ExtraTreesRegressor`, `criterion="mae"` is deprecated,
|
||
use `"absolute_error"` instead.
|
||
|
||
- For :class:`ensemble.GradientBoostingRegressor`, `loss="lad"` is deprecated,
|
||
use `"absolute_error"` instead.
|
||
|
||
- For :class:`ensemble.RandomForestRegressor`, `criterion="mae"` is deprecated,
|
||
use `"absolute_error"` instead.
|
||
|
||
- For :class:`ensemble.HistGradientBoostingRegressor`,
|
||
`loss="least_absolute_deviation"` is deprecated, use `"absolute_error"`
|
||
instead.
|
||
|
||
- For :class:`linear_model.RANSACRegressor`, `loss="absolute_loss"` is
|
||
deprecated, use `"absolute_error"` instead which is now the default.
|
||
|
||
- For :class:`tree.DecisionTreeRegressor`, `criterion="mae"` is deprecated,
|
||
use `"absolute_error"` instead.
|
||
|
||
- For :class:`tree.ExtraTreeRegressor`, `criterion="mae"` is deprecated,
|
||
use `"absolute_error"` instead.
|
||
|
||
- |API| `np.matrix` usage is deprecated in 1.0 and will raise a `TypeError` in
|
||
1.2. :pr:`20165` by `Thomas Fan`_.
|
||
|
||
- |API| :term:`get_feature_names_out` has been added to the transformer API
|
||
to get the names of the output features. `get_feature_names` has in
|
||
turn been deprecated. :pr:`18444` by `Thomas Fan`_.
|
||
|
||
- |API| All estimators store `feature_names_in_` when fitted on pandas Dataframes.
|
||
These feature names are compared to names seen in non-`fit` methods, e.g.
|
||
`transform` and will raise a `FutureWarning` if they are not consistent.
|
||
These ``FutureWarning`` s will become ``ValueError`` s in 1.2. :pr:`18010` by
|
||
`Thomas Fan`_.
|
||
|
||
:mod:`sklearn.base`
|
||
...................
|
||
|
||
- |Fix| :func:`config_context` is now threadsafe. :pr:`18736` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.calibration`
|
||
..........................
|
||
|
||
- |Feature| :func:`calibration.CalibrationDisplay` added to plot
|
||
calibration curves. :pr:`17443` by :user:`Lucy Liu <lucyleeow>`.
|
||
|
||
- |Fix| The ``predict`` and ``predict_proba`` methods of
|
||
:class:`calibration.CalibratedClassifierCV` can now properly be used on
|
||
prefitted pipelines. :pr:`19641` by :user:`Alek Lefebvre <AlekLefebvre>`.
|
||
|
||
- |Fix| Fixed an error when using a :class:`ensemble.VotingClassifier`
|
||
as `base_estimator` in :class:`calibration.CalibratedClassifierCV`.
|
||
:pr:`20087` by :user:`Clément Fauchereau <clement-f>`.
|
||
|
||
|
||
:mod:`sklearn.cluster`
|
||
......................
|
||
|
||
- |Efficiency| The ``"k-means++"`` initialization of :class:`cluster.KMeans`
|
||
and :class:`cluster.MiniBatchKMeans` is now faster, especially in multicore
|
||
settings. :pr:`19002` by :user:`Jon Crall <Erotemic>` and :user:`Jérémie du
|
||
Boisberranger <jeremiedbb>`.
|
||
|
||
- |Efficiency| :class:`cluster.KMeans` with `algorithm='elkan'` is now faster
|
||
in multicore settings. :pr:`19052` by
|
||
:user:`Yusuke Nagasaka <YusukeNagasaka>`.
|
||
|
||
- |Efficiency| :class:`cluster.MiniBatchKMeans` is now faster in multicore
|
||
settings. :pr:`17622` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |Efficiency| :class:`cluster.OPTICS` can now cache the output of the
|
||
computation of the tree, using the `memory` parameter. :pr:`19024` by
|
||
:user:`Frankie Robertson <frankier>`.
|
||
|
||
- |Enhancement| The `predict` and `fit_predict` methods of
|
||
:class:`cluster.AffinityPropagation` now accept sparse data type for input
|
||
data.
|
||
:pr:`20117` by :user:`Venkatachalam Natchiappan <venkyyuvy>`
|
||
|
||
- |Fix| Fixed a bug in :class:`cluster.MiniBatchKMeans` where the sample
|
||
weights were partially ignored when the input is sparse. :pr:`17622` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |Fix| Improved convergence detection based on center change in
|
||
:class:`cluster.MiniBatchKMeans` which was almost never achievable.
|
||
:pr:`17622` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |FIX| :class:`cluster.AgglomerativeClustering` now supports readonly
|
||
memory-mapped datasets.
|
||
:pr:`19883` by :user:`Julien Jerphanion <jjerphan>`.
|
||
|
||
- |Fix| :class:`cluster.AgglomerativeClustering` correctly connects components
|
||
when connectivity and affinity are both precomputed and the number
|
||
of connected components is greater than 1. :pr:`20597` by
|
||
`Thomas Fan`_.
|
||
|
||
- |Fix| :class:`cluster.FeatureAgglomeration` does not accept a ``**params`` kwarg in
|
||
the ``fit`` function anymore, resulting in a more concise error message. :pr:`20899`
|
||
by :user:`Adam Li <adam2392>`.
|
||
|
||
- |Fix| Fixed a bug in :class:`cluster.KMeans`, ensuring reproducibility and equivalence
|
||
between sparse and dense input. :pr:`20200`
|
||
by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |API| :class:`cluster.Birch` attributes, `fit_` and `partial_fit_`, are
|
||
deprecated and will be removed in 1.2. :pr:`19297` by `Thomas Fan`_.
|
||
|
||
- |API| the default value for the `batch_size` parameter of
|
||
:class:`cluster.MiniBatchKMeans` was changed from 100 to 1024 due to
|
||
efficiency reasons. The `n_iter_` attribute of
|
||
:class:`cluster.MiniBatchKMeans` now reports the number of started epochs and
|
||
the `n_steps_` attribute reports the number of mini batches processed.
|
||
:pr:`17622` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |API| :func:`cluster.spectral_clustering` raises an improved error when passed
|
||
a `np.matrix`. :pr:`20560` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.compose`
|
||
......................
|
||
|
||
- |Enhancement| :class:`compose.ColumnTransformer` now records the output
|
||
of each transformer in `output_indices_`. :pr:`18393` by
|
||
:user:`Luca Bittarello <lbittarello>`.
|
||
|
||
- |Enhancement| :class:`compose.ColumnTransformer` now allows DataFrame input to
|
||
have its columns appear in a changed order in `transform`. Further, columns that
|
||
are dropped will not be required in transform, and additional columns will be
|
||
ignored if `remainder='drop'`. :pr:`19263` by `Thomas Fan`_.
|
||
|
||
- |Enhancement| Adds `**predict_params` keyword argument to
|
||
:meth:`compose.TransformedTargetRegressor.predict` that passes keyword
|
||
argument to the regressor.
|
||
:pr:`19244` by :user:`Ricardo <ricardojnf>`.
|
||
|
||
- |FIX| `compose.ColumnTransformer.get_feature_names` supports
|
||
non-string feature names returned by any of its transformers. However, note
|
||
that ``get_feature_names`` is deprecated, use ``get_feature_names_out``
|
||
instead. :pr:`18459` by :user:`Albert Villanova del Moral <albertvillanova>`
|
||
and :user:`Alonso Silva Allende <alonsosilvaallende>`.
|
||
|
||
- |Fix| :class:`compose.TransformedTargetRegressor` now takes nD targets with
|
||
an adequate transformer.
|
||
:pr:`18898` by :user:`Oras Phongpanagnam <panangam>`.
|
||
|
||
- |API| Adds `verbose_feature_names_out` to :class:`compose.ColumnTransformer`.
|
||
This flag controls the prefixing of feature names out in
|
||
:term:`get_feature_names_out`. :pr:`18444` and :pr:`21080` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.covariance`
|
||
.........................
|
||
|
||
- |Fix| Adds arrays check to :func:`covariance.ledoit_wolf` and
|
||
:func:`covariance.ledoit_wolf_shrinkage`. :pr:`20416` by :user:`Hugo Defois
|
||
<defoishugo>`.
|
||
|
||
- |API| Deprecates the following keys in `cv_results_`: `'mean_score'`,
|
||
`'std_score'`, and `'split(k)_score'` in favor of `'mean_test_score'`
|
||
`'std_test_score'`, and `'split(k)_test_score'`. :pr:`20583` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.datasets`
|
||
.......................
|
||
|
||
- |Enhancement| :func:`datasets.fetch_openml` now supports categories with
|
||
missing values when returning a pandas dataframe. :pr:`19365` by
|
||
`Thomas Fan`_ and :user:`Amanda Dsouza <amy12xx>` and
|
||
:user:`EL-ATEIF Sara <elateifsara>`.
|
||
|
||
- |Enhancement| :func:`datasets.fetch_kddcup99` raises a better message
|
||
when the cached file is invalid. :pr:`19669` `Thomas Fan`_.
|
||
|
||
- |Enhancement| Replace usages of ``__file__`` related to resource file I/O
|
||
with ``importlib.resources`` to avoid the assumption that these resource
|
||
files (e.g. ``iris.csv``) already exist on a filesystem, and by extension
|
||
to enable compatibility with tools such as ``PyOxidizer``.
|
||
:pr:`20297` by :user:`Jack Liu <jackzyliu>`.
|
||
|
||
- |Fix| Shorten data file names in the openml tests to better support
|
||
installing on Windows and its default 260 character limit on file names.
|
||
:pr:`20209` by `Thomas Fan`_.
|
||
|
||
- |Fix| :func:`datasets.fetch_kddcup99` returns dataframes when
|
||
`return_X_y=True` and `as_frame=True`. :pr:`19011` by `Thomas Fan`_.
|
||
|
||
- |API| Deprecates `datasets.load_boston` in 1.0 and it will be removed
|
||
in 1.2. Alternative code snippets to load similar datasets are provided.
|
||
Please report to the docstring of the function for details.
|
||
:pr:`20729` by `Guillaume Lemaitre`_.
|
||
|
||
|
||
:mod:`sklearn.decomposition`
|
||
............................
|
||
|
||
- |Enhancement| added a new approximate solver (randomized SVD, available with
|
||
`eigen_solver='randomized'`) to :class:`decomposition.KernelPCA`. This
|
||
significantly accelerates computation when the number of samples is much
|
||
larger than the desired number of components.
|
||
:pr:`12069` by :user:`Sylvain Marié <smarie>`.
|
||
|
||
- |Fix| Fixes incorrect multiple data-conversion warnings when clustering
|
||
boolean data. :pr:`19046` by :user:`Surya Prakash <jdsurya>`.
|
||
|
||
- |Fix| Fixed :func:`decomposition.dict_learning`, used by
|
||
:class:`decomposition.DictionaryLearning`, to ensure determinism of the
|
||
output. Achieved by flipping signs of the SVD output which is used to
|
||
initialize the code. :pr:`18433` by :user:`Bruno Charron <brcharron>`.
|
||
|
||
- |Fix| Fixed a bug in :class:`decomposition.MiniBatchDictionaryLearning`,
|
||
:class:`decomposition.MiniBatchSparsePCA` and
|
||
:func:`decomposition.dict_learning_online` where the update of the dictionary
|
||
was incorrect. :pr:`19198` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |Fix| Fixed a bug in :class:`decomposition.DictionaryLearning`,
|
||
:class:`decomposition.SparsePCA`,
|
||
:class:`decomposition.MiniBatchDictionaryLearning`,
|
||
:class:`decomposition.MiniBatchSparsePCA`,
|
||
:func:`decomposition.dict_learning` and
|
||
:func:`decomposition.dict_learning_online` where the restart of unused atoms
|
||
during the dictionary update was not working as expected. :pr:`19198` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |API| In :class:`decomposition.DictionaryLearning`,
|
||
:class:`decomposition.MiniBatchDictionaryLearning`,
|
||
:func:`decomposition.dict_learning` and
|
||
:func:`decomposition.dict_learning_online`, `transform_alpha` will be equal
|
||
to `alpha` instead of 1.0 by default starting from version 1.2 :pr:`19159` by
|
||
:user:`Benoît Malézieux <bmalezieux>`.
|
||
|
||
- |API| Rename variable names in :class:`decomposition.KernelPCA` to improve
|
||
readability. `lambdas_` and `alphas_` are renamed to `eigenvalues_`
|
||
and `eigenvectors_`, respectively. `lambdas_` and `alphas_` are
|
||
deprecated and will be removed in 1.2.
|
||
:pr:`19908` by :user:`Kei Ishikawa <kstoneriv3>`.
|
||
|
||
- |API| The `alpha` and `regularization` parameters of :class:`decomposition.NMF` and
|
||
:func:`decomposition.non_negative_factorization` are deprecated and will be removed
|
||
in 1.2. Use the new parameters `alpha_W` and `alpha_H` instead. :pr:`20512` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
:mod:`sklearn.dummy`
|
||
....................
|
||
|
||
- |API| Attribute `n_features_in_` in :class:`dummy.DummyRegressor` and
|
||
:class:`dummy.DummyRegressor` is deprecated and will be removed in 1.2.
|
||
:pr:`20960` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.ensemble`
|
||
.......................
|
||
|
||
- |Enhancement| :class:`~sklearn.ensemble.HistGradientBoostingClassifier` and
|
||
:class:`~sklearn.ensemble.HistGradientBoostingRegressor` take cgroups quotas
|
||
into account when deciding the number of threads used by OpenMP. This
|
||
avoids performance problems caused by over-subscription when using those
|
||
classes in a docker container for instance. :pr:`20477`
|
||
by `Thomas Fan`_.
|
||
|
||
- |Enhancement| :class:`~sklearn.ensemble.HistGradientBoostingClassifier` and
|
||
:class:`~sklearn.ensemble.HistGradientBoostingRegressor` are no longer
|
||
experimental. They are now considered stable and are subject to the same
|
||
deprecation cycles as all other estimators. :pr:`19799` by `Nicolas Hug`_.
|
||
|
||
- |Enhancement| Improve the HTML rendering of the
|
||
:class:`ensemble.StackingClassifier` and :class:`ensemble.StackingRegressor`.
|
||
:pr:`19564` by `Thomas Fan`_.
|
||
|
||
- |Enhancement| Added Poisson criterion to
|
||
:class:`ensemble.RandomForestRegressor`. :pr:`19836` by :user:`Brian Sun
|
||
<bsun94>`.
|
||
|
||
- |Fix| Do not allow to compute out-of-bag (OOB) score in
|
||
:class:`ensemble.RandomForestClassifier` and
|
||
:class:`ensemble.ExtraTreesClassifier` with multiclass-multioutput target
|
||
since scikit-learn does not provide any metric supporting this type of
|
||
target. Additional private refactoring was performed.
|
||
:pr:`19162` by :user:`Guillaume Lemaitre <glemaitre>`.
|
||
|
||
- |Fix| Improve numerical precision for weights boosting in
|
||
:class:`ensemble.AdaBoostClassifier` and :class:`ensemble.AdaBoostRegressor`
|
||
to avoid underflows.
|
||
:pr:`10096` by :user:`Fenil Suchak <fenilsuchak>`.
|
||
|
||
- |Fix| Fixed the range of the argument ``max_samples`` to be ``(0.0, 1.0]``
|
||
in :class:`ensemble.RandomForestClassifier`,
|
||
:class:`ensemble.RandomForestRegressor`, where `max_samples=1.0` is
|
||
interpreted as using all `n_samples` for bootstrapping. :pr:`20159` by
|
||
:user:`murata-yu`.
|
||
|
||
- |Fix| Fixed a bug in :class:`ensemble.AdaBoostClassifier` and
|
||
:class:`ensemble.AdaBoostRegressor` where the `sample_weight` parameter
|
||
got overwritten during `fit`.
|
||
:pr:`20534` by :user:`Guillaume Lemaitre <glemaitre>`.
|
||
|
||
- |API| Removes `tol=None` option in
|
||
:class:`ensemble.HistGradientBoostingClassifier` and
|
||
:class:`ensemble.HistGradientBoostingRegressor`. Please use `tol=0` for
|
||
the same behavior. :pr:`19296` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.feature_extraction`
|
||
.................................
|
||
|
||
- |Fix| Fixed a bug in :class:`feature_extraction.text.HashingVectorizer`
|
||
where some input strings would result in negative indices in the transformed
|
||
data. :pr:`19035` by :user:`Liu Yu <ly648499246>`.
|
||
|
||
- |Fix| Fixed a bug in :class:`feature_extraction.DictVectorizer` by raising an
|
||
error with unsupported value type.
|
||
:pr:`19520` by :user:`Jeff Zhao <kamiyaa>`.
|
||
|
||
- |Fix| Fixed a bug in :func:`feature_extraction.image.img_to_graph`
|
||
and :func:`feature_extraction.image.grid_to_graph` where singleton connected
|
||
components were not handled properly, resulting in a wrong vertex indexing.
|
||
:pr:`18964` by `Bertrand Thirion`_.
|
||
|
||
- |Fix| Raise a warning in :class:`feature_extraction.text.CountVectorizer`
|
||
with `lowercase=True` when there are vocabulary entries with uppercase
|
||
characters to avoid silent misses in the resulting feature vectors.
|
||
:pr:`19401` by :user:`Zito Relova <zitorelova>`
|
||
|
||
:mod:`sklearn.feature_selection`
|
||
................................
|
||
|
||
- |Feature| :func:`feature_selection.r_regression` computes Pearson's R
|
||
correlation coefficients between the features and the target.
|
||
:pr:`17169` by :user:`Dmytro Lituiev <DSLituiev>`
|
||
and :user:`Julien Jerphanion <jjerphan>`.
|
||
|
||
- |Enhancement| :func:`feature_selection.RFE.fit` accepts additional estimator
|
||
parameters that are passed directly to the estimator's `fit` method.
|
||
:pr:`20380` by :user:`Iván Pulido <ijpulidos>`, :user:`Felipe Bidu <fbidu>`,
|
||
:user:`Gil Rutter <g-rutter>`, and :user:`Adrin Jalali <adrinjalali>`.
|
||
|
||
- |FIX| Fix a bug in :func:`isotonic.isotonic_regression` where the
|
||
`sample_weight` passed by a user were overwritten during ``fit``.
|
||
:pr:`20515` by :user:`Carsten Allefeld <allefeld>`.
|
||
|
||
- |Fix| Change :func:`feature_selection.SequentialFeatureSelector` to
|
||
allow for unsupervised modelling so that the `fit` signature need not
|
||
do any `y` validation and allow for `y=None`.
|
||
:pr:`19568` by :user:`Shyam Desai <ShyamDesai>`.
|
||
|
||
- |API| Raises an error in :class:`feature_selection.VarianceThreshold`
|
||
when the variance threshold is negative.
|
||
:pr:`20207` by :user:`Tomohiro Endo <europeanplaice>`
|
||
|
||
- |API| Deprecates `grid_scores_` in favor of split scores in `cv_results_` in
|
||
:class:`feature_selection.RFECV`. `grid_scores_` will be removed in
|
||
version 1.2.
|
||
:pr:`20161` by :user:`Shuhei Kayawari <wowry>` and :user:`arka204`.
|
||
|
||
:mod:`sklearn.inspection`
|
||
.........................
|
||
|
||
- |Enhancement| Add `max_samples` parameter in
|
||
:func:`inspection.permutation_importance`. It enables to draw a subset of the
|
||
samples to compute the permutation importance. This is useful to keep the
|
||
method tractable when evaluating feature importance on large datasets.
|
||
:pr:`20431` by :user:`Oliver Pfaffel <o1iv3r>`.
|
||
|
||
- |Enhancement| Add kwargs to format ICE and PD lines separately in partial
|
||
dependence plots `inspection.plot_partial_dependence` and
|
||
:meth:`inspection.PartialDependenceDisplay.plot`. :pr:`19428` by :user:`Mehdi
|
||
Hamoumi <mhham>`.
|
||
|
||
- |Fix| Allow multiple scorers input to
|
||
:func:`inspection.permutation_importance`. :pr:`19411` by :user:`Simona
|
||
Maggio <simonamaggio>`.
|
||
|
||
- |API| :class:`inspection.PartialDependenceDisplay` exposes a class method:
|
||
:func:`~inspection.PartialDependenceDisplay.from_estimator`.
|
||
`inspection.plot_partial_dependence` is deprecated in favor of the
|
||
class method and will be removed in 1.2. :pr:`20959` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.kernel_approximation`
|
||
...................................
|
||
|
||
- |Fix| Fix a bug in :class:`kernel_approximation.Nystroem`
|
||
where the attribute `component_indices_` did not correspond to the subset of
|
||
sample indices used to generate the approximated kernel. :pr:`20554` by
|
||
:user:`Xiangyin Kong <kxytim>`.
|
||
|
||
:mod:`sklearn.linear_model`
|
||
...........................
|
||
|
||
- |MajorFeature| Added :class:`linear_model.QuantileRegressor` which implements
|
||
linear quantile regression with L1 penalty.
|
||
:pr:`9978` by :user:`David Dale <avidale>` and
|
||
:user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
- |Feature| The new :class:`linear_model.SGDOneClassSVM` provides an SGD
|
||
implementation of the linear One-Class SVM. Combined with kernel
|
||
approximation techniques, this implementation approximates the solution of
|
||
a kernelized One Class SVM while benefitting from a linear
|
||
complexity in the number of samples.
|
||
:pr:`10027` by :user:`Albert Thomas <albertcthomas>`.
|
||
|
||
- |Feature| Added `sample_weight` parameter to
|
||
:class:`linear_model.LassoCV` and :class:`linear_model.ElasticNetCV`.
|
||
:pr:`16449` by :user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
- |Feature| Added new solver `lbfgs` (available with `solver="lbfgs"`)
|
||
and `positive` argument to :class:`linear_model.Ridge`. When `positive` is
|
||
set to `True`, forces the coefficients to be positive (only supported by
|
||
`lbfgs`). :pr:`20231` by :user:`Toshihiro Nakae <tnakae>`.
|
||
|
||
- |Efficiency| The implementation of :class:`linear_model.LogisticRegression`
|
||
has been optimised for dense matrices when using `solver='newton-cg'` and
|
||
`multi_class!='multinomial'`.
|
||
:pr:`19571` by :user:`Julien Jerphanion <jjerphan>`.
|
||
|
||
- |Enhancement| `fit` method preserves dtype for numpy.float32 in
|
||
:class:`linear_model.Lars`, :class:`linear_model.LassoLars`,
|
||
:class:`linear_model.LassoLars`, :class:`linear_model.LarsCV` and
|
||
:class:`linear_model.LassoLarsCV`. :pr:`20155` by :user:`Takeshi Oura
|
||
<takoika>`.
|
||
|
||
- |Enhancement| Validate user-supplied gram matrix passed to linear models
|
||
via the `precompute` argument. :pr:`19004` by :user:`Adam Midvidy <amidvidy>`.
|
||
|
||
- |Fix| :meth:`linear_model.ElasticNet.fit` no longer modifies `sample_weight`
|
||
in place. :pr:`19055` by `Thomas Fan`_.
|
||
|
||
- |Fix| :class:`linear_model.Lasso` and :class:`linear_model.ElasticNet` no
|
||
longer have a `dual_gap_` not corresponding to their objective. :pr:`19172`
|
||
by :user:`Mathurin Massias <mathurinm>`
|
||
|
||
- |Fix| `sample_weight` are now fully taken into account in linear models
|
||
when `normalize=True` for both feature centering and feature
|
||
scaling.
|
||
:pr:`19426` by :user:`Alexandre Gramfort <agramfort>` and
|
||
:user:`Maria Telenczuk <maikia>`.
|
||
|
||
- |Fix| Points with residuals equal to ``residual_threshold`` are now considered
|
||
as inliers for :class:`linear_model.RANSACRegressor`. This allows fitting
|
||
a model perfectly on some datasets when `residual_threshold=0`.
|
||
:pr:`19499` by :user:`Gregory Strubel <gregorystrubel>`.
|
||
|
||
- |Fix| Sample weight invariance for :class:`linear_model.Ridge` was fixed in
|
||
:pr:`19616` by :user:`Oliver Grisel <ogrisel>` and :user:`Christian Lorentzen
|
||
<lorentzenchr>`.
|
||
|
||
- |Fix| The dictionary `params` in :func:`linear_model.enet_path` and
|
||
:func:`linear_model.lasso_path` should only contain parameter of the
|
||
coordinate descent solver. Otherwise, an error will be raised.
|
||
:pr:`19391` by :user:`Shao Yang Hong <hongshaoyang>`.
|
||
|
||
- |API| Raise a warning in :class:`linear_model.RANSACRegressor` that from
|
||
version 1.2, `min_samples` need to be set explicitly for models other than
|
||
:class:`linear_model.LinearRegression`. :pr:`19390` by :user:`Shao Yang Hong
|
||
<hongshaoyang>`.
|
||
|
||
- |API|: The parameter ``normalize`` of :class:`linear_model.LinearRegression`
|
||
is deprecated and will be removed in 1.2. Motivation for this deprecation:
|
||
``normalize`` parameter did not take any effect if ``fit_intercept`` was set
|
||
to False and therefore was deemed confusing. The behavior of the deprecated
|
||
``LinearModel(normalize=True)`` can be reproduced with a
|
||
:class:`~sklearn.pipeline.Pipeline` with ``LinearModel`` (where
|
||
``LinearModel`` is :class:`~linear_model.LinearRegression`,
|
||
:class:`~linear_model.Ridge`, :class:`~linear_model.RidgeClassifier`,
|
||
:class:`~linear_model.RidgeCV` or :class:`~linear_model.RidgeClassifierCV`)
|
||
as follows: ``make_pipeline(StandardScaler(with_mean=False),
|
||
LinearModel())``. The ``normalize`` parameter in
|
||
:class:`~linear_model.LinearRegression` was deprecated in :pr:`17743` by
|
||
:user:`Maria Telenczuk <maikia>` and :user:`Alexandre Gramfort <agramfort>`.
|
||
Same for :class:`~linear_model.Ridge`,
|
||
:class:`~linear_model.RidgeClassifier`, :class:`~linear_model.RidgeCV`, and
|
||
:class:`~linear_model.RidgeClassifierCV`, in: :pr:`17772` by :user:`Maria
|
||
Telenczuk <maikia>` and :user:`Alexandre Gramfort <agramfort>`. Same for
|
||
:class:`~linear_model.BayesianRidge`, :class:`~linear_model.ARDRegression`
|
||
in: :pr:`17746` by :user:`Maria Telenczuk <maikia>`. Same for
|
||
:class:`~linear_model.Lasso`, :class:`~linear_model.LassoCV`,
|
||
:class:`~linear_model.ElasticNet`, :class:`~linear_model.ElasticNetCV`,
|
||
:class:`~linear_model.MultiTaskLasso`,
|
||
:class:`~linear_model.MultiTaskLassoCV`,
|
||
:class:`~linear_model.MultiTaskElasticNet`,
|
||
:class:`~linear_model.MultiTaskElasticNetCV`, in: :pr:`17785` by :user:`Maria
|
||
Telenczuk <maikia>` and :user:`Alexandre Gramfort <agramfort>`.
|
||
|
||
- |API| The ``normalize`` parameter of
|
||
:class:`~linear_model.OrthogonalMatchingPursuit` and
|
||
:class:`~linear_model.OrthogonalMatchingPursuitCV` will default to False in
|
||
1.2 and will be removed in 1.4. :pr:`17750` by :user:`Maria Telenczuk
|
||
<maikia>` and :user:`Alexandre Gramfort <agramfort>`. Same for
|
||
:class:`~linear_model.Lars` :class:`~linear_model.LarsCV`
|
||
:class:`~linear_model.LassoLars` :class:`~linear_model.LassoLarsCV`
|
||
:class:`~linear_model.LassoLarsIC`, in :pr:`17769` by :user:`Maria Telenczuk
|
||
<maikia>` and :user:`Alexandre Gramfort <agramfort>`.
|
||
|
||
- |API| Keyword validation has moved from `__init__` and `set_params` to `fit`
|
||
for the following estimators conforming to scikit-learn's conventions:
|
||
:class:`~linear_model.SGDClassifier`,
|
||
:class:`~linear_model.SGDRegressor`,
|
||
:class:`~linear_model.SGDOneClassSVM`,
|
||
:class:`~linear_model.PassiveAggressiveClassifier`, and
|
||
:class:`~linear_model.PassiveAggressiveRegressor`.
|
||
:pr:`20683` by `Guillaume Lemaitre`_.
|
||
|
||
:mod:`sklearn.manifold`
|
||
.......................
|
||
|
||
- |Enhancement| Implement `'auto'` heuristic for the `learning_rate` in
|
||
:class:`manifold.TSNE`. It will become default in 1.2. The default
|
||
initialization will change to `pca` in 1.2. PCA initialization will
|
||
be scaled to have standard deviation 1e-4 in 1.2.
|
||
:pr:`19491` by :user:`Dmitry Kobak <dkobak>`.
|
||
|
||
- |Fix| Change numerical precision to prevent underflow issues
|
||
during affinity matrix computation for :class:`manifold.TSNE`.
|
||
:pr:`19472` by :user:`Dmitry Kobak <dkobak>`.
|
||
|
||
- |Fix| :class:`manifold.Isomap` now uses `scipy.sparse.csgraph.shortest_path`
|
||
to compute the graph shortest path. It also connects disconnected components
|
||
of the neighbors graph along some minimum distance pairs, instead of changing
|
||
every infinite distances to zero. :pr:`20531` by `Roman Yurchak`_ and `Tom
|
||
Dupre la Tour`_.
|
||
|
||
- |Fix| Decrease the numerical default tolerance in the lobpcg call
|
||
in :func:`manifold.spectral_embedding` to prevent numerical instability.
|
||
:pr:`21194` by :user:`Andrew Knyazev <lobpcg>`.
|
||
|
||
:mod:`sklearn.metrics`
|
||
......................
|
||
|
||
- |Feature| :func:`metrics.mean_pinball_loss` exposes the pinball loss for
|
||
quantile regression. :pr:`19415` by :user:`Xavier Dupré <sdpython>`
|
||
and :user:`Oliver Grisel <ogrisel>`.
|
||
|
||
- |Feature| :func:`metrics.d2_tweedie_score` calculates the D^2 regression
|
||
score for Tweedie deviances with power parameter ``power``. This is a
|
||
generalization of the `r2_score` and can be interpreted as percentage of
|
||
Tweedie deviance explained.
|
||
:pr:`17036` by :user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
- |Feature| :func:`metrics.mean_squared_log_error` now supports
|
||
`squared=False`.
|
||
:pr:`20326` by :user:`Uttam kumar <helper-uttam>`.
|
||
|
||
- |Efficiency| Improved speed of :func:`metrics.confusion_matrix` when labels
|
||
are integral.
|
||
:pr:`9843` by :user:`Jon Crall <Erotemic>`.
|
||
|
||
- |Enhancement| A fix to raise an error in :func:`metrics.hinge_loss` when
|
||
``pred_decision`` is 1d whereas it is a multiclass classification or when
|
||
``pred_decision`` parameter is not consistent with the ``labels`` parameter.
|
||
:pr:`19643` by :user:`Pierre Attard <PierreAttard>`.
|
||
|
||
- |Fix| :meth:`metrics.ConfusionMatrixDisplay.plot` uses the correct max
|
||
for colormap. :pr:`19784` by `Thomas Fan`_.
|
||
|
||
- |Fix| Samples with zero `sample_weight` values do not affect the results
|
||
from :func:`metrics.det_curve`, :func:`metrics.precision_recall_curve`
|
||
and :func:`metrics.roc_curve`.
|
||
:pr:`18328` by :user:`Albert Villanova del Moral <albertvillanova>` and
|
||
:user:`Alonso Silva Allende <alonsosilvaallende>`.
|
||
|
||
- |Fix| avoid overflow in :func:`metrics.adjusted_rand_score` with
|
||
large amount of data. :pr:`20312` by :user:`Divyanshu Deoli
|
||
<divyanshudeoli>`.
|
||
|
||
- |API| :class:`metrics.ConfusionMatrixDisplay` exposes two class methods
|
||
:func:`~metrics.ConfusionMatrixDisplay.from_estimator` and
|
||
:func:`~metrics.ConfusionMatrixDisplay.from_predictions` allowing to create
|
||
a confusion matrix plot using an estimator or the predictions.
|
||
`metrics.plot_confusion_matrix` is deprecated in favor of these two
|
||
class methods and will be removed in 1.2.
|
||
:pr:`18543` by `Guillaume Lemaitre`_.
|
||
|
||
- |API| :class:`metrics.PrecisionRecallDisplay` exposes two class methods
|
||
:func:`~metrics.PrecisionRecallDisplay.from_estimator` and
|
||
:func:`~metrics.PrecisionRecallDisplay.from_predictions` allowing to create
|
||
a precision-recall curve using an estimator or the predictions.
|
||
`metrics.plot_precision_recall_curve` is deprecated in favor of these
|
||
two class methods and will be removed in 1.2.
|
||
:pr:`20552` by `Guillaume Lemaitre`_.
|
||
|
||
- |API| :class:`metrics.DetCurveDisplay` exposes two class methods
|
||
:func:`~metrics.DetCurveDisplay.from_estimator` and
|
||
:func:`~metrics.DetCurveDisplay.from_predictions` allowing to create
|
||
a confusion matrix plot using an estimator or the predictions.
|
||
`metrics.plot_det_curve` is deprecated in favor of these two
|
||
class methods and will be removed in 1.2.
|
||
:pr:`19278` by `Guillaume Lemaitre`_.
|
||
|
||
:mod:`sklearn.mixture`
|
||
......................
|
||
|
||
- |Fix| Ensure that the best parameters are set appropriately
|
||
in the case of divergency for :class:`mixture.GaussianMixture` and
|
||
:class:`mixture.BayesianGaussianMixture`.
|
||
:pr:`20030` by :user:`Tingshan Liu <tliu68>` and
|
||
:user:`Benjamin Pedigo <bdpedigo>`.
|
||
|
||
:mod:`sklearn.model_selection`
|
||
..............................
|
||
|
||
- |Feature| added :class:`model_selection.StratifiedGroupKFold`, that combines
|
||
:class:`model_selection.StratifiedKFold` and
|
||
:class:`model_selection.GroupKFold`, providing an ability to split data
|
||
preserving the distribution of classes in each split while keeping each
|
||
group within a single split.
|
||
:pr:`18649` by :user:`Leandro Hermida <hermidalc>` and
|
||
:user:`Rodion Martynov <marrodion>`.
|
||
|
||
- |Enhancement| warn only once in the main process for per-split fit failures
|
||
in cross-validation. :pr:`20619` by :user:`Loïc Estève <lesteve>`
|
||
|
||
- |Enhancement| The `model_selection.BaseShuffleSplit` base class is
|
||
now public. :pr:`20056` by :user:`pabloduque0`.
|
||
|
||
- |Fix| Avoid premature overflow in :func:`model_selection.train_test_split`.
|
||
:pr:`20904` by :user:`Tomasz Jakubek <t-jakubek>`.
|
||
|
||
:mod:`sklearn.naive_bayes`
|
||
..........................
|
||
|
||
- |Fix| The `fit` and `partial_fit` methods of the discrete naive Bayes
|
||
classifiers (:class:`naive_bayes.BernoulliNB`,
|
||
:class:`naive_bayes.CategoricalNB`, :class:`naive_bayes.ComplementNB`,
|
||
and :class:`naive_bayes.MultinomialNB`) now correctly handle the degenerate
|
||
case of a single class in the training set.
|
||
:pr:`18925` by :user:`David Poznik <dpoznik>`.
|
||
|
||
- |API| The attribute ``sigma_`` is now deprecated in
|
||
:class:`naive_bayes.GaussianNB` and will be removed in 1.2.
|
||
Use ``var_`` instead.
|
||
:pr:`18842` by :user:`Hong Shao Yang <hongshaoyang>`.
|
||
|
||
:mod:`sklearn.neighbors`
|
||
........................
|
||
|
||
- |Enhancement| The creation of :class:`neighbors.KDTree` and
|
||
:class:`neighbors.BallTree` has been improved for their worst-cases time
|
||
complexity from :math:`\mathcal{O}(n^2)` to :math:`\mathcal{O}(n)`.
|
||
:pr:`19473` by :user:`jiefangxuanyan <jiefangxuanyan>` and
|
||
:user:`Julien Jerphanion <jjerphan>`.
|
||
|
||
- |FIX| `neighbors.DistanceMetric` subclasses now support readonly
|
||
memory-mapped datasets. :pr:`19883` by :user:`Julien Jerphanion <jjerphan>`.
|
||
|
||
- |FIX| :class:`neighbors.NearestNeighbors`, :class:`neighbors.KNeighborsClassifier`,
|
||
:class:`neighbors.RadiusNeighborsClassifier`, :class:`neighbors.KNeighborsRegressor`
|
||
and :class:`neighbors.RadiusNeighborsRegressor` do not validate `weights` in
|
||
`__init__` and validates `weights` in `fit` instead. :pr:`20072` by
|
||
:user:`Juan Carlos Alfaro Jiménez <alfaro96>`.
|
||
|
||
- |API| The parameter `kwargs` of :class:`neighbors.RadiusNeighborsClassifier` is
|
||
deprecated and will be removed in 1.2.
|
||
:pr:`20842` by :user:`Juan Martín Loyola <jmloyola>`.
|
||
|
||
:mod:`sklearn.neural_network`
|
||
.............................
|
||
|
||
- |Fix| :class:`neural_network.MLPClassifier` and
|
||
:class:`neural_network.MLPRegressor` now correctly support continued training
|
||
when loading from a pickled file. :pr:`19631` by `Thomas Fan`_.
|
||
|
||
:mod:`sklearn.pipeline`
|
||
.......................
|
||
|
||
- |API| The `predict_proba` and `predict_log_proba` methods of the
|
||
:class:`pipeline.Pipeline` now support passing prediction kwargs to the final
|
||
estimator. :pr:`19790` by :user:`Christopher Flynn <crflynn>`.
|
||
|
||
:mod:`sklearn.preprocessing`
|
||
............................
|
||
|
||
- |Feature| The new :class:`preprocessing.SplineTransformer` is a feature
|
||
preprocessing tool for the generation of B-splines, parametrized by the
|
||
polynomial ``degree`` of the splines, number of knots ``n_knots`` and knot
|
||
positioning strategy ``knots``.
|
||
:pr:`18368` by :user:`Christian Lorentzen <lorentzenchr>`.
|
||
:class:`preprocessing.SplineTransformer` also supports periodic
|
||
splines via the ``extrapolation`` argument.
|
||
:pr:`19483` by :user:`Malte Londschien <mlondschien>`.
|
||
:class:`preprocessing.SplineTransformer` supports sample weights for
|
||
knot position strategy ``"quantile"``.
|
||
:pr:`20526` by :user:`Malte Londschien <mlondschien>`.
|
||
|
||
- |Feature| :class:`preprocessing.OrdinalEncoder` supports passing through
|
||
missing values by default. :pr:`19069` by `Thomas Fan`_.
|
||
|
||
- |Feature| :class:`preprocessing.OneHotEncoder` now supports
|
||
`handle_unknown='ignore'` and dropping categories. :pr:`19041` by
|
||
`Thomas Fan`_.
|
||
|
||
- |Feature| :class:`preprocessing.PolynomialFeatures` now supports passing
|
||
a tuple to `degree`, i.e. `degree=(min_degree, max_degree)`.
|
||
:pr:`20250` by :user:`Christian Lorentzen <lorentzenchr>`.
|
||
|
||
- |Efficiency| :class:`preprocessing.StandardScaler` is faster and more memory
|
||
efficient. :pr:`20652` by `Thomas Fan`_.
|
||
|
||
- |Efficiency| Changed ``algorithm`` argument for :class:`cluster.KMeans` in
|
||
:class:`preprocessing.KBinsDiscretizer` from ``auto`` to ``full``.
|
||
:pr:`19934` by :user:`Gleb Levitskiy <GLevV>`.
|
||
|
||
- |Efficiency| The implementation of `fit` for
|
||
:class:`preprocessing.PolynomialFeatures` transformer is now faster. This is
|
||
especially noticeable on large sparse input. :pr:`19734` by :user:`Fred
|
||
Robinson <frrad>`.
|
||
|
||
- |Fix| The :func:`preprocessing.StandardScaler.inverse_transform` method
|
||
now raises error when the input data is 1D. :pr:`19752` by :user:`Zhehao Liu
|
||
<Max1993Liu>`.
|
||
|
||
- |Fix| :func:`preprocessing.scale`, :class:`preprocessing.StandardScaler`
|
||
and similar scalers detect near-constant features to avoid scaling them to
|
||
very large values. This problem happens in particular when using a scaler on
|
||
sparse data with a constant column with sample weights, in which case
|
||
centering is typically disabled. :pr:`19527` by :user:`Oliver Grisel
|
||
<ogrisel>` and :user:`Maria Telenczuk <maikia>` and :pr:`19788` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |Fix| :meth:`preprocessing.StandardScaler.inverse_transform` now
|
||
correctly handles integer dtypes. :pr:`19356` by :user:`makoeppel`.
|
||
|
||
- |Fix| :meth:`preprocessing.OrdinalEncoder.inverse_transform` is not
|
||
supporting sparse matrix and raises the appropriate error message.
|
||
:pr:`19879` by :user:`Guillaume Lemaitre <glemaitre>`.
|
||
|
||
- |Fix| The `fit` method of :class:`preprocessing.OrdinalEncoder` will not
|
||
raise error when `handle_unknown='ignore'` and unknown categories are given
|
||
to `fit`.
|
||
:pr:`19906` by :user:`Zhehao Liu <MaxwellLZH>`.
|
||
|
||
- |Fix| Fix a regression in :class:`preprocessing.OrdinalEncoder` where large
|
||
Python numeric would raise an error due to overflow when casted to C type
|
||
(`np.float64` or `np.int64`).
|
||
:pr:`20727` by `Guillaume Lemaitre`_.
|
||
|
||
- |Fix| :class:`preprocessing.FunctionTransformer` does not set `n_features_in_`
|
||
based on the input to `inverse_transform`. :pr:`20961` by `Thomas Fan`_.
|
||
|
||
- |API| The `n_input_features_` attribute of
|
||
:class:`preprocessing.PolynomialFeatures` is deprecated in favor of
|
||
`n_features_in_` and will be removed in 1.2. :pr:`20240` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
:mod:`sklearn.svm`
|
||
...................
|
||
|
||
- |API| The parameter `**params` of :func:`svm.OneClassSVM.fit` is
|
||
deprecated and will be removed in 1.2.
|
||
:pr:`20843` by :user:`Juan Martín Loyola <jmloyola>`.
|
||
|
||
:mod:`sklearn.tree`
|
||
...................
|
||
|
||
- |Enhancement| Add `fontname` argument in :func:`tree.export_graphviz`
|
||
for non-English characters. :pr:`18959` by :user:`Zero <Zeroto521>`
|
||
and :user:`wstates <wstates>`.
|
||
|
||
- |Fix| Improves compatibility of :func:`tree.plot_tree` with high DPI screens.
|
||
:pr:`20023` by `Thomas Fan`_.
|
||
|
||
- |Fix| Fixed a bug in :class:`tree.DecisionTreeClassifier`,
|
||
:class:`tree.DecisionTreeRegressor` where a node could be split whereas it
|
||
should not have been due to incorrect handling of rounding errors.
|
||
:pr:`19336` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |API| The `n_features_` attribute of :class:`tree.DecisionTreeClassifier`,
|
||
:class:`tree.DecisionTreeRegressor`, :class:`tree.ExtraTreeClassifier` and
|
||
:class:`tree.ExtraTreeRegressor` is deprecated in favor of `n_features_in_`
|
||
and will be removed in 1.2. :pr:`20272` by
|
||
:user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
:mod:`sklearn.utils`
|
||
....................
|
||
|
||
- |Enhancement| Deprecated the default value of the `random_state=0` in
|
||
:func:`~sklearn.utils.extmath.randomized_svd`. Starting in 1.2,
|
||
the default value of `random_state` will be set to `None`.
|
||
:pr:`19459` by :user:`Cindy Bezuidenhout <cinbez>` and
|
||
:user:`Clifford Akai-Nettey<cliffordEmmanuel>`.
|
||
|
||
- |Enhancement| Added helper decorator :func:`utils.metaestimators.available_if`
|
||
to provide flexibility in metaestimators making methods available or
|
||
unavailable on the basis of state, in a more readable way.
|
||
:pr:`19948` by `Joel Nothman`_.
|
||
|
||
- |Enhancement| :func:`utils.validation.check_is_fitted` now uses
|
||
``__sklearn_is_fitted__`` if available, instead of checking for attributes
|
||
ending with an underscore. This also makes :class:`pipeline.Pipeline` and
|
||
:class:`preprocessing.FunctionTransformer` pass
|
||
``check_is_fitted(estimator)``. :pr:`20657` by `Adrin Jalali`_.
|
||
|
||
- |Fix| Fixed a bug in :func:`utils.sparsefuncs.mean_variance_axis` where the
|
||
precision of the computed variance was very poor when the real variance is
|
||
exactly zero. :pr:`19766` by :user:`Jérémie du Boisberranger <jeremiedbb>`.
|
||
|
||
- |Fix| The docstrings of properties that are decorated with
|
||
:func:`utils.deprecated` are now properly wrapped. :pr:`20385` by `Thomas
|
||
Fan`_.
|
||
|
||
- |Fix| `utils.stats._weighted_percentile` now correctly ignores
|
||
zero-weighted observations smaller than the smallest observation with
|
||
positive weight for ``percentile=0``. Affected classes are
|
||
:class:`dummy.DummyRegressor` for ``quantile=0`` and
|
||
`ensemble.HuberLossFunction` and `ensemble.HuberLossFunction`
|
||
for ``alpha=0``. :pr:`20528` by :user:`Malte Londschien <mlondschien>`.
|
||
|
||
- |Fix| :func:`utils._safe_indexing` explicitly takes a dataframe copy when
|
||
integer indices are provided avoiding to raise a warning from Pandas. This
|
||
warning was previously raised in resampling utilities and functions using
|
||
those utilities (e.g. :func:`model_selection.train_test_split`,
|
||
:func:`model_selection.cross_validate`,
|
||
:func:`model_selection.cross_val_score`,
|
||
:func:`model_selection.cross_val_predict`).
|
||
:pr:`20673` by :user:`Joris Van den Bossche <jorisvandenbossche>`.
|
||
|
||
- |Fix| Fix a regression in `utils.is_scalar_nan` where large Python
|
||
numbers would raise an error due to overflow in C types (`np.float64` or
|
||
`np.int64`).
|
||
:pr:`20727` by `Guillaume Lemaitre`_.
|
||
|
||
- |Fix| Support for `np.matrix` is deprecated in
|
||
:func:`~sklearn.utils.check_array` in 1.0 and will raise a `TypeError` in
|
||
1.2. :pr:`20165` by `Thomas Fan`_.
|
||
|
||
- |API| `utils._testing.assert_warns` and `utils._testing.assert_warns_message`
|
||
are deprecated in 1.0 and will be removed in 1.2. Used `pytest.warns` context
|
||
manager instead. Note that these functions were not documented and part from
|
||
the public API. :pr:`20521` by :user:`Olivier Grisel <ogrisel>`.
|
||
|
||
- |API| Fixed several bugs in `utils.graph.graph_shortest_path`, which is
|
||
now deprecated. Use `scipy.sparse.csgraph.shortest_path` instead. :pr:`20531`
|
||
by `Tom Dupre la Tour`_.
|
||
|
||
.. rubric:: Code and documentation contributors
|
||
|
||
Thanks to everyone who has contributed to the maintenance and improvement of
|
||
the project since version 0.24, including:
|
||
|
||
Abdulelah S. Al Mesfer, Abhinav Gupta, Adam J. Stewart, Adam Li, Adam Midvidy,
|
||
Adrian Garcia Badaracco, Adrian Sadłocha, Adrin Jalali, Agamemnon Krasoulis,
|
||
Alberto Rubiales, Albert Thomas, Albert Villanova del Moral, Alek Lefebvre,
|
||
Alessia Marcolini, Alexandr Fonari, Alihan Zihna, Aline Ribeiro de Almeida,
|
||
Amanda, Amanda Dsouza, Amol Deshmukh, Ana Pessoa, Anavelyz, Andreas Mueller,
|
||
Andrew Delong, Ashish, Ashvith Shetty, Atsushi Nukariya, Aurélien Geron, Avi
|
||
Gupta, Ayush Singh, baam, BaptBillard, Benjamin Pedigo, Bertrand Thirion,
|
||
Bharat Raghunathan, bmalezieux, Brian Rice, Brian Sun, Bruno Charron, Bryan
|
||
Chen, bumblebee, caherrera-meli, Carsten Allefeld, CeeThinwa, Chiara Marmo,
|
||
chrissobel, Christian Lorentzen, Christopher Yeh, Chuliang Xiao, Clément
|
||
Fauchereau, cliffordEmmanuel, Conner Shen, Connor Tann, David Dale, David Katz,
|
||
David Poznik, Dimitri Papadopoulos Orfanos, Divyanshu Deoli, dmallia17,
|
||
Dmitry Kobak, DS_anas, Eduardo Jardim, EdwinWenink, EL-ATEIF Sara, Eleni
|
||
Markou, EricEllwanger, Eric Fiegel, Erich Schubert, Ezri-Mudde, Fatos Morina,
|
||
Felipe Rodrigues, Felix Hafner, Fenil Suchak, flyingdutchman23, Flynn, Fortune
|
||
Uwha, Francois Berenger, Frankie Robertson, Frans Larsson, Frederick Robinson,
|
||
frellwan, Gabriel S Vicente, Gael Varoquaux, genvalen, Geoffrey Thomas,
|
||
geroldcsendes, Gleb Levitskiy, Glen, Glòria Macià Muñoz, gregorystrubel,
|
||
groceryheist, Guillaume Lemaitre, guiweber, Haidar Almubarak, Hans Moritz
|
||
Günther, Haoyin Xu, Harris Mirza, Harry Wei, Harutaka Kawamura, Hassan
|
||
Alsawadi, Helder Geovane Gomes de Lima, Hugo DEFOIS, Igor Ilic, Ikko Ashimine,
|
||
Isaack Mungui, Ishaan Bhat, Ishan Mishra, Iván Pulido, iwhalvic, J Alexander,
|
||
Jack Liu, James Alan Preiss, James Budarz, James Lamb, Jannik, Jeff Zhao,
|
||
Jennifer Maldonado, Jérémie du Boisberranger, Jesse Lima, Jianzhu Guo, jnboehm,
|
||
Joel Nothman, JohanWork, John Paton, Jonathan Schneider, Jon Crall, Jon Haitz
|
||
Legarreta Gorroño, Joris Van den Bossche, José Manuel Nápoles Duarte, Juan
|
||
Carlos Alfaro Jiménez, Juan Martin Loyola, Julien Jerphanion, Julio Batista
|
||
Silva, julyrashchenko, JVM, Kadatatlu Kishore, Karen Palacio, Kei Ishikawa,
|
||
kmatt10, kobaski, Kot271828, Kunj, KurumeYuta, kxytim, lacrosse91, LalliAcqua,
|
||
Laveen Bagai, Leonardo Rocco, Leonardo Uieda, Leopoldo Corona, Loic Esteve,
|
||
LSturtew, Luca Bittarello, Luccas Quadros, Lucy Jiménez, Lucy Liu, ly648499246,
|
||
Mabu Manaileng, Manimaran, makoeppel, Marco Gorelli, Maren Westermann,
|
||
Mariangela, Maria Telenczuk, marielaraj, Martin Hirzel, Mateo Noreña, Mathieu
|
||
Blondel, Mathis Batoul, mathurinm, Matthew Calcote, Maxime Prieur, Maxwell,
|
||
Mehdi Hamoumi, Mehmet Ali Özer, Miao Cai, Michal Karbownik, michalkrawczyk,
|
||
Mitzi, mlondschien, Mohamed Haseeb, Mohamed Khoualed, Muhammad Jarir Kanji,
|
||
murata-yu, Nadim Kawwa, Nanshan Li, naozin555, Nate Parsons, Neal Fultz, Nic
|
||
Annau, Nicolas Hug, Nicolas Miller, Nico Stefani, Nigel Bosch, Nikita Titov,
|
||
Nodar Okroshiashvili, Norbert Preining, novaya, Ogbonna Chibuike Stephen,
|
||
OGordon100, Oliver Pfaffel, Olivier Grisel, Oras Phongpanangam, Pablo Duque,
|
||
Pablo Ibieta-Jimenez, Patric Lacouth, Paulo S. Costa, Paweł Olszewski, Peter
|
||
Dye, PierreAttard, Pierre-Yves Le Borgne, PranayAnchuri, Prince Canuma,
|
||
putschblos, qdeffense, RamyaNP, ranjanikrishnan, Ray Bell, Rene Jean Corneille,
|
||
Reshama Shaikh, ricardojnf, RichardScottOZ, Rodion Martynov, Rohan Paul, Roman
|
||
Lutz, Roman Yurchak, Samuel Brice, Sandy Khosasi, Sean Benhur J, Sebastian
|
||
Flores, Sebastian Pölsterl, Shao Yang Hong, shinehide, shinnar, shivamgargsya,
|
||
Shooter23, Shuhei Kayawari, Shyam Desai, simonamaggio, Sina Tootoonian,
|
||
solosilence, Steven Kolawole, Steve Stagg, Surya Prakash, swpease, Sylvain
|
||
Marié, Takeshi Oura, Terence Honles, TFiFiE, Thomas A Caswell, Thomas J. Fan,
|
||
Tim Gates, TimotheeMathieu, Timothy Wolodzko, Tim Vink, t-jakubek, t-kusanagi,
|
||
tliu68, Tobias Uhmann, tom1092, Tomás Moreyra, Tomás Ronald Hughes, Tom
|
||
Dupré la Tour, Tommaso Di Noto, Tomohiro Endo, TONY GEORGE, Toshihiro NAKAE,
|
||
tsuga, Uttam kumar, vadim-ushtanit, Vangelis Gkiastas, Venkatachalam N, Vilém
|
||
Zouhar, Vinicius Rios Fuck, Vlasovets, waijean, Whidou, xavier dupré,
|
||
xiaoyuchai, Yasmeen Alsaedy, yoch, Yosuke KOBAYASHI, Yu Feng, YusukeNagasaka,
|
||
yzhenman, Zero, ZeyuSun, ZhaoweiWang, Zito, Zito Relova
|