Version 0.12.1

October 8, 2012

The 0.12.1 release is a bug-fix release with no additional features, but is instead a set of bug fixes


Version 0.12

September 4, 2012


API changes summary


Version 0.11

May 7, 2012



Other changes

API changes summary

  • covariance.EllipticEnvelop is now deprecated - Please use covariance.EllipticEnvelope instead.
  • NeighborsClassifier and NeighborsRegressor are gone in the module Nearest Neighbors. Use the classes KNeighborsClassifier, RadiusNeighborsClassifier, KNeighborsRegressor and/or RadiusNeighborsRegressor instead.
  • Sparse classes in the Stochastic Gradient Descent module are now deprecated.
  • In mixture.GMM, mixture.DPGMM and mixture.VBGMM, parameters must be passed to an object when initialising it and not through fit. Now fit will only accept the data as an input parameter.
  • methods rvs and decode in GMM module are now deprecated. sample and score or predict should be used instead.
  • attribute _scores and _pvalues in univariate feature selection objects are now deprecated. scores_ or pvalues_ should be used instead.
  • In LogisticRegression, LinearSVC, SVC and NuSVC, the class_weight parameter is now an initialization parameter, not a parameter to fit. This makes grid searches over this parameter possible.
  • LFW data is now always shape (n_samples, n_features) to be consistent with the Olivetti faces dataset. Use images and pairs attribute to access the natural images shapes instead.
  • In svm.LinearSVC, the meaning of the multi_class parameter changed. Options now are 'ovr' and 'crammer_singer', with 'ovr' being the default. This does not change the default behavior but hopefully is less confusing.
  • Class feature_selection.text.Vectorizer is deprecated and replaced by feature_selection.text.TfidfVectorizer.
  • The preprocessor / analyzer nested structure for text feature extraction has been removed. All those features are now directly passed as flat constructor arguments to feature_selection.text.TfidfVectorizer and feature_selection.text.CountVectorizer, in particular the following parameters are now used:
  • analyzer can be 'word' or 'char' to switch the default analysis scheme, or use a specific python callable (as previously).
  • tokenizer and preprocessor have been introduced to make it still possible to customize those steps with the new API.
  • input explicitly control how to interpret the sequence passed to fit and predict: filenames, file objects or direct (byte or Unicode) strings.
  • charset decoding is explicit and strict by default.
  • the vocabulary, fitted or not is now stored in the vocabulary_ attribute to be consistent with the project conventions.
  • Class feature_selection.text.TfidfVectorizer now derives directly from feature_selection.text.CountVectorizer to make grid search trivial.
  • methods rvs in _BaseHMM module are now deprecated. sample should be used instead.
  • Beam pruning option in _BaseHMM module is removed since it is difficult to be Cythonized. If you are interested, you can look in the history codes by git.
  • The SVMlight format loader now supports files with both zero-based and one-based column indices, since both occur “in the wild”.
  • Arguments in class ShuffleSplit are now consistent with StratifiedShuffleSplit. Arguments test_fraction and train_fraction are deprecated and renamed to test_size and train_size and can accept both float and int.
  • Arguments in class Bootstrap are now consistent with StratifiedShuffleSplit. Arguments n_test and n_train are deprecated and renamed to test_size and train_size and can accept both float and int.
  • Argument p added to classes in Nearest Neighbors to specify an arbitrary Minkowski metric for nearest neighbors searches.


Version 0.10

January 11, 2012


API changes summary

Here are the code migration instructions when upgrading from scikit-learn version 0.9:

  • Some estimators that may overwrite their inputs to save memory previously had overwrite_ parameters; these have been replaced with copy_ parameters with exactly the opposite meaning.

    This particularly affects some of the estimators in linear_model. The default behavior is still to copy everything passed in.

  • The SVMlight dataset loader sklearn.datasets.load_svmlight_file no longer supports loading two files at once; use load_svmlight_files instead. Also, the (unused) buffer_mb parameter is gone.

  • Sparse estimators in the Stochastic Gradient Descent module use dense parameter vector coef_ instead of sparse_coef_. This significantly improves test time performance.

  • The Covariance estimation module now has a robust estimator of covariance, the Minimum Covariance Determinant estimator.

  • Cluster evaluation metrics in metrics.cluster have been refactored but the changes are backwards compatible. They have been moved to the metrics.cluster.supervised, along with metrics.cluster.unsupervised which contains the Silhouette Coefficient.

  • The permutation_test_score function now behaves the same way as cross_val_score (i.e. uses the mean score across the folds.)

  • Cross Validation generators now use integer indices (indices=True) by default instead of boolean masks. This make it more intuitive to use with sparse matrix data.

  • The functions used for sparse coding, sparse_encode and sparse_encode_parallel have been combined into sklearn.decomposition.sparse_encode, and the shapes of the arrays have been transposed for consistency with the matrix factorization setting, as opposed to the regression setting.

  • Fixed an off-by-one error in the SVMlight/LibSVM file format handling; files generated using sklearn.datasets.dump_svmlight_file should be re-generated. (They should continue to work, but accidentally had one extra column of zeros prepended.)

  • BaseDictionaryLearning class replaced by SparseCodingMixin.

  • sklearn.utils.extmath.fast_svd has been renamed sklearn.utils.extmath.randomized_svd and the default oversampling is now fixed to 10 additional random vectors instead of doubling the number of components to extract. The new behavior follows the reference paper.


The following people contributed to scikit-learn since last release:

Version 0.9

September 21, 2011

scikit-learn 0.9 was released on September 2011, three months after the 0.8 release and includes the new modules Manifold learning, The Dirichlet Process as well as several new algorithms and documentation improvements.

This release also includes the dictionary-learning work developed by Vlad Niculae as part of the Google Summer of Code program.

banner2 banner1 banner3


API changes summary

Here are the code migration instructions when upgrading from scikit-learn version 0.8:

  • The scikits.learn package was renamed sklearn. There is still a scikits.learn package alias for backward compatibility.

    Third-party projects with a dependency on scikit-learn 0.9+ should upgrade their codebase. For instance, under Linux / MacOSX just run (make a backup first!):

    find -name "*.py" | xargs sed -i 's/\bscikits.learn\b/sklearn/g'
  • Estimators no longer accept model parameters as fit arguments: instead all parameters must be only be passed as constructor arguments or using the now public set_params method inherited from base.BaseEstimator.

    Some estimators can still accept keyword arguments on the fit but this is restricted to data-dependent values (e.g. a Gram matrix or an affinity matrix that are precomputed from the X data matrix.

  • The cross_val package has been renamed to cross_validation although there is also a cross_val package alias in place for backward compatibility.

    Third-party projects with a dependency on scikit-learn 0.9+ should upgrade their codebase. For instance, under Linux / MacOSX just run (make a backup first!):

    find -name "*.py" | xargs sed -i 's/\bcross_val\b/cross_validation/g'
  • The score_func argument of the sklearn.cross_validation.cross_val_score function is now expected to accept y_test and y_predicted as only arguments for classification and regression tasks or X_test for unsupervised estimators.

  • gamma parameter for support vector machine algorithms is set to 1 / n_features by default, instead of 1 / n_samples.

  • The sklearn.hmm has been marked as orphaned: it will be removed from scikit-learn in version 0.11 unless someone steps up to contribute documentation, examples and fix lurking numerical stability issues.

  • sklearn.neighbors has been made into a submodule. The two previously available estimators, NeighborsClassifier and NeighborsRegressor have been marked as deprecated. Their functionality has been divided among five new classes: NearestNeighbors for unsupervised neighbors searches, KNeighborsClassifier & RadiusNeighborsClassifier for supervised classification problems, and KNeighborsRegressor & RadiusNeighborsRegressor for supervised regression problems.

  • sklearn.ball_tree.BallTree has been moved to sklearn.neighbors.BallTree. Using the former will generate a warning.

  • sklearn.linear_model.LARS() and related classes (LassoLARS, LassoLARSCV, etc.) have been renamed to sklearn.linear_model.Lars().

  • All distance metrics and kernels in sklearn.metrics.pairwise now have a Y parameter, which by default is None. If not given, the result is the distance (or kernel similarity) between each sample in Y. If given, the result is the pairwise distance (or kernel similarity) between samples in X to Y.

  • sklearn.metrics.pairwise.l1_distance is now called manhattan_distance, and by default returns the pairwise distance. For the component wise distance, set the parameter sum_over_features to False.

Backward compatibility package aliases and other deprecated classes and functions will be removed in version 0.11.


38 people contributed to this release.

Version 0.8

May 11, 2011

scikit-learn 0.8 was released on May 2011, one month after the first “international” scikit-learn coding sprint and is marked by the inclusion of important modules: Hierarchical clustering, Cross decomposition, Non-negative matrix factorization (NMF or NNMF), initial support for Python 3 and by important enhancements and bug fixes.


Several new modules where introduced during this release:

Some other modules benefited from significant improvements or cleanups.


People that made this release possible preceded by number of commits:

Version 0.7

March 2, 2011

scikit-learn 0.7 was released in March 2011, roughly three months after the 0.6 release. This release is marked by the speed improvements in existing algorithms like k-Nearest Neighbors and K-Means algorithm and by the inclusion of an efficient algorithm for computing the Ridge Generalized Cross Validation solution. Unlike the preceding release, no new modules where added to this release.



People that made this release possible preceded by number of commits:

Version 0.6

December 21, 2010

scikit-learn 0.6 was released on December 2010. It is marked by the inclusion of several new modules and a general renaming of old ones. It is also marked by the inclusion of new example, including applications to real-world datasets.


  • New stochastic gradient descent module by Peter Prettenhofer. The module comes with complete documentation and examples.
  • Improved svm module: memory consumption has been reduced by 50%, heuristic to automatically set class weights, possibility to assign weights to samples (see SVM: Weighted samples for an example).
  • New Gaussian Processes module by Vincent Dubourg. This module also has great documentation and some very neat examples. See or for a taste of what can be done.
  • It is now possible to use liblinear’s Multi-class SVC (option multi_class in svm.LinearSVC)
  • New features and performance improvements of text feature extraction.
  • Improved sparse matrix support, both in main classes (grid_search.GridSearchCV) as in modules sklearn.svm.sparse and sklearn.linear_model.sparse.
  • Lots of cool new examples and a new section that uses real-world datasets was created. These include: Faces recognition example using eigenfaces and SVMs, Species distribution modeling, Libsvm GUI, Wikipedia principal eigenvector and others.
  • Faster Least Angle Regression algorithm. It is now 2x faster than the R version on worst case and up to 10x times faster on some cases.
  • Faster coordinate descent algorithm. In particular, the full path version of lasso (linear_model.lasso_path) is more than 200x times faster than before.
  • It is now possible to get probability estimates from a linear_model.LogisticRegression model.
  • module renaming: the glm module has been renamed to linear_model, the gmm module has been included into the more general mixture model and the sgd module has been included in linear_model.
  • Lots of bug fixes and documentation improvements.


People that made this release possible preceded by number of commits:

Version 0.5

October 11, 2010


New classes

  • Support for sparse matrices in some classifiers of modules svm and linear_model (see svm.sparse.SVC, svm.sparse.SVR, svm.sparse.LinearSVC, linear_model.sparse.Lasso, linear_model.sparse.ElasticNet)
  • New pipeline.Pipeline object to compose different estimators.
  • Recursive Feature Elimination routines in module Feature selection.
  • Addition of various classes capable of cross validation in the linear_model module (linear_model.LassoCV, linear_model.ElasticNetCV, etc.).
  • New, more efficient LARS algorithm implementation. The Lasso variant of the algorithm is also implemented. See linear_model.lars_path, linear_model.Lars and linear_model.LassoLars.
  • New Hidden Markov Models module (see classes hmm.GaussianHMM, hmm.MultinomialHMM, hmm.GMMHMM)
  • New module feature_extraction (see class reference)
  • New FastICA algorithm in module sklearn.fastica



  • API changes: adhere variable names to PEP-8, give more meaningful names.
  • Fixes for svm module to run on a shared memory context (multiprocessing).
  • It is again possible to generate latex (and thus PDF) from the sphinx docs.


External dependencies

  • Joblib is now a dependency of this package, although it is shipped with (sklearn.externals.joblib).

Removed modules

  • Module ann (Artificial Neural Networks) has been removed from the distribution. Users wanting this sort of algorithms should take a look into pybrain.


  • New sphinx theme for the web page.


The following is a list of authors for this release, preceded by number of commits:

  • 262 Fabian Pedregosa
  • 240 Gael Varoquaux
  • 149 Alexandre Gramfort
  • 116 Olivier Grisel
  • 40 Vincent Michel
  • 38 Ron Weiss
  • 23 Matthieu Perrot
  • 10 Bertrand Thirion
  • 7 Yaroslav Halchenko
  • 9 VirgileFritsch
  • 6 Edouard Duchesnay
  • 4 Mathieu Blondel
  • 1 Ariel Rokem
  • 1 Matthieu Brucher

Version 0.4

August 26, 2010


Major changes in this release include:

  • Coordinate Descent algorithm (Lasso, ElasticNet) refactoring & speed improvements (roughly 100x times faster).
  • Coordinate Descent Refactoring (and bug fixing) for consistency with R’s package GLMNET.
  • New metrics module.
  • New GMM module contributed by Ron Weiss.
  • Implementation of the LARS algorithm (without Lasso variant for now).
  • feature_selection module redesign.
  • Migration to GIT as version control system.
  • Removal of obsolete attrselect module.
  • Rename of private compiled extensions (added underscore).
  • Removal of legacy unmaintained code.
  • Documentation improvements (both docstring and rst).
  • Improvement of the build system to (optionally) link with MKL. Also, provide a lite BLAS implementation in case no system-wide BLAS is found.
  • Lots of new examples.
  • Many, many bug fixes …


The committer list for this release is the following (preceded by number of commits):

  • 143 Fabian Pedregosa
  • 35 Alexandre Gramfort
  • 34 Olivier Grisel
  • 11 Gael Varoquaux
  • 5 Yaroslav Halchenko
  • 2 Vincent Michel
  • 1 Chris Filo Gorgolewski

Earlier versions

Earlier versions included contributions by Fred Mailhot, David Cooke, David Huard, Dave Morrill, Ed Schofield, Travis Oliphant, Pearu Peterson.