Fork me on GitHub


Bug fixes

  • Fixed handling of the p parameter of the Minkowski distance that was previously ignored in nearest neighbors models. By Nikolay Mayorov.
  • Fixed duplicated alphas in linear_model.LassoLars with early stopping on 32 bit Python. By Olivier Grisel and Fabian Pedregosa.
  • Fixed the build under Windows when scikit-learn is built with MSVC while NumPy is built with MinGW. By Olivier Grisel and Federico Vaggi.
  • Fixed an array index overflow bug in the coordinate descent solver. By Gael Varoquaux.
  • Better handling of numpy 1.9 deprecation warnings. By Gael Varoquaux.
  • Removed unnecessary data copy in cluster.KMeans. By Gael Varoquaux.
  • Explicitly close open files to avoid ResourceWarnings under Python 3. By Calvin Giles.
  • The transform of lda.LDA now projects the input on the most discriminant directions. By Martin Billinger.
  • Fixed potential overflow in _tree.safe_realloc by Lars Buitinck.
  • Performance optimization in istonic.IsotonicRegression. By Robert Bradshaw.
  • nose is non-longer a runtime dependency to import sklearn, only for running the tests. By Joel Nothman.
  • Many documentation and website fixes by Joel Nothman, Lars Buitinck and others.


Bug fixes

  • Fix incomplete download of the dataset when datasets.download_20newsgroups is called. By Manoj Kumar.
  • Various fixes to the Gaussian processes subpackage by Vincent Dubourg and Jan Hendrik Metzen.
  • The transform of lda.LDA now projects the input on the most discriminant directions. By Martin Billinger.
  • Nearest neighbors estimators now reliably work inside GridSearchCV, thanks to Nikolay Mayorov.

API changes summary

  • Nearest neighbors estimators used to take arbitrary keyword arguments and pass these to their distance metric. This will no longer be supported in scikit-learn 0.18; use the metric_params argument instead.



  • Many speed and memory improvements all across the code
  • Huge speed and memory improvements to random forests (and extra trees) that also benefit better from parallel computing.
  • Incremental fit to BernoulliRBM
  • Added cluster.AgglomerativeClustering for hierarchical agglomerative clustering with average linkage, complete linkage and ward strategies.
  • Added linear_model.RANSACRegressor for robust regression models.


New features


Documentation improvements

  • The Working With Text Data tutorial has now been worked in to the main documentation’s tutorial section. Includes exercises and skeletons for tutorial presentation. Original tutorial created by several authors including Olivier Grisel, Lars Buitinck and many others. Tutorial integration into the scikit-learn documentation by Jaques Grobler
  • Added Computational Performance documentation. Discussion and examples of prediction latency / throughput and different factors that have influence over speed. Additional tips for building faster models and choosing a relevant compromise between speed and predictive power. By Eustache Diemert.

Bug fixes

  • Fixed bug in decomposition.MiniBatchDictionaryLearning : partial_fit was not working properly.
  • Fixed bug in linear_model.stochastic_gradient : l1_ratio was used as (1.0 - l1_ratio) .
  • Fixed bug in multiclass.OneVsOneClassifier with string labels
  • Fixed a bug in LassoCV and ElasticNetCV: they would not pre-compute the Gram matrix with precompute=True or precompute="auto" and n_samples > n_features. By Manoj Kumar.
  • Fixed incorrect estimation of the degrees of freedom in feature_selection.f_regression when variates are not centered. By Virgile Fritsch.
  • Fixed a race condition in parallel processing with pre_dispatch != "all" (for instance in cross_val_score). By Olivier Grisel.
  • Raise error in cluster.FeatureAgglomeration and cluster.WardAgglomeration when no samples are given, rather than returning meaningless clustering.
  • Fixed bug in gradient_boosting.GradientBoostingRegressor with loss='huber': gamma might have not been initialized.
  • Fixed feature importances as computed with a forest of randomized trees when fit with sample_weight != None and/or with bootstrap=True. By Gilles Louppe.

API changes summary

  • sklearn.hmm is deprecated. Its removal is planned for the 0.17 release.
  • Use of covariance.EllipticEnvelop has now been removed after deprecation. Please use covariance.EllipticEnvelope instead.
  • cluster.Ward is deprecated. Use cluster.AgglomerativeClustering instead.
  • cluster.WardClustering is deprecated. Use
  • cluster.AgglomerativeClustering instead.
  • cross_validation.Bootstrap is deprecated. cross_validation.KFold or cross_validation.ShuffleSplit are recommended instead.
  • Direct support for the sequence of sequences (or list of lists) multilabel format is deprecated. To convert to and from the supported binary indicator matrix format, use MultiLabelBinarizer. By Joel Nothman.
  • Add score method to PCA following the model of probabilistic PCA and deprecate ProbabilisticPCA model whose score implementation is not correct. The computation now also exploits the matrix inversion lemma for faster computation. By Alexandre Gramfort.
  • The score method of FactorAnalysis now returns the average log-likelihood of the samples. Use score_samples to get log-likelihood of each sample. By Alexandre Gramfort.
  • Generating boolean masks (the setting indices=False) from cross-validation generators is deprecated. Support for masks will be removed in 0.17. The generators have produced arrays of indices by default since 0.10. By Joel Nothman.
  • 1-d arrays containing strings with dtype=object (as used in Pandas) are now considered valid classification targets. This fixes a regression from version 0.13 in some classifiers. By Joel Nothman.
  • Fix wrong explained_variance_ratio_ attribute in RandomizedPCA. By Alexandre Gramfort.
  • Fit alphas for each l1_ratio instead of mean_l1_ratio in linear_model.ElasticNetCV and linear_model.LassoCV. This changes the shape of alphas_ from (n_alphas,) to (n_l1_ratio, n_alphas) if the l1_ratio provided is a 1-D array like object of length greater than one. By Manoj Kumar.
  • Fix linear_model.ElasticNetCV and linear_model.LassoCV when fitting intercept and input data is sparse. The automatic grid of alphas was not computed correctly and the scaling with normalize was wrong. By Manoj Kumar.
  • Fix wrong maximal number of features drawn (max_features) at each split for decision trees, random forests and gradient tree boosting. Previously, the count for the number of drawn features started only after one non constant features in the split. This bug fix will affect computational and generalization performance of those algorithms in the presence of constant features. To get back previous generalization performance, you should modify the value of max_features. By Arnaud Joly.
  • Fix wrong maximal number of features drawn (max_features) at each split for ensemble.ExtraTreesClassifier and ensemble.ExtraTreesRegressor. Previously, only non constant features in the split was counted as drawn. Now constant features are counted as drawn. Furthermore at least one feature must be non constant in order to make a valid split. This bug fix will affect computational and generalization performance of extra trees in the presence of constant features. To get back previous generalization performance, you should modify the value of max_features. By Arnaud Joly.
  • Fix utils.compute_class_weight when class_weight=="auto". Previously it was broken for input of non-integer dtype and the weighted array that was returned was wrong. By Manoj Kumar.
  • Fix cross_validation.Bootstrap to return ValueError when n_train + n_test > n. By Ronald Phlypo.


List of contributors for release 0.15 by number of commits.

  • 312 Olivier Grisel
  • 275 Lars Buitinck
  • 221 Gael Varoquaux
  • 148 Arnaud Joly
  • 134 Johannes Schönberger
  • 119 Gilles Louppe
  • 113 Joel Nothman
  • 111 Alexandre Gramfort
  • 95 Jaques Grobler
  • 89 Denis Engemann
  • 83 Peter Prettenhofer
  • 83 Alexander Fabisch
  • 62 Mathieu Blondel
  • 60 Eustache Diemert
  • 60 Nelle Varoquaux
  • 49 Michael Bommarito
  • 45 Manoj-Kumar-S
  • 28 Kyle Kastner
  • 26 Andreas Mueller
  • 22 Noel Dawe
  • 21 Maheshakya Wijewardena
  • 21 Brooke Osborn
  • 21 Hamzeh Alsalhi
  • 21 Jake VanderPlas
  • 21 Philippe Gervais
  • 19 Bala Subrahmanyam Varanasi
  • 12 Ronald Phlypo
  • 10 Mikhail Korobov
  • 8 Thomas Unterthiner
  • 8 Jeffrey Blackburne
  • 8 eltermann
  • 8 bwignall
  • 7 Ankit Agrawal
  • 7 CJ Carey
  • 6 Daniel Nouri
  • 6 Chen Liu
  • 6 Michael Eickenberg
  • 6 ugurthemaster
  • 5 Aaron Schumacher
  • 5 Baptiste Lagarde
  • 5 Rajat Khanduja
  • 5 Robert McGibbon
  • 5 Sergio Pascual
  • 4 Alexis Metaireau
  • 4 Ignacio Rossi
  • 4 Virgile Fritsch
  • 4 Sebastian Saeger
  • 4 Ilambharathi Kanniah
  • 4 sdenton4
  • 4 Robert Layton
  • 4 Alyssa
  • 4 Amos Waterland
  • 3 Andrew Tulloch
  • 3 murad
  • 3 Steven Maude
  • 3 Karol Pysniak
  • 3 Jacques Kvam
  • 3 cgohlke
  • 3 cjlin
  • 3 Michael Becker
  • 3 hamzeh
  • 3 Eric Jacobsen
  • 3 john collins
  • 3 kaushik94
  • 3 Erwin Marsi
  • 2 csytracy
  • 2 LK
  • 2 Vlad Niculae
  • 2 Laurent Direr
  • 2 Erik Shilts
  • 2 Raul Garreta
  • 2 Yoshiki Vázquez Baeza
  • 2 Yung Siang Liau
  • 2 abhishek thakur
  • 2 James Yu
  • 2 Rohit Sivaprasad
  • 2 Roland Szabo
  • 2 amormachine
  • 2 Alexis Mignon
  • 2 Oscar Carlsson
  • 2 Nantas Nardelli
  • 2 jess010
  • 2 kowalski87
  • 2 Andrew Clegg
  • 2 Federico Vaggi
  • 2 Simon Frid
  • 2 Félix-Antoine Fortin
  • 1 Ralf Gommers
  • 1 t-aft
  • 1 Ronan Amicel
  • 1 Rupesh Kumar Srivastava
  • 1 Ryan Wang
  • 1 Samuel Charron
  • 1 Samuel St-Jean
  • 1 Fabian Pedregosa
  • 1 Skipper Seabold
  • 1 Stefan Walk
  • 1 Stefan van der Walt
  • 1 Stephan Hoyer
  • 1 Allen Riddell
  • 1 Valentin Haenel
  • 1 Vijay Ramesh
  • 1 Will Myers
  • 1 Yaroslav Halchenko
  • 1 Yoni Ben-Meshulam
  • 1 Yury V. Zaytsev
  • 1 adrinjalali
  • 1 ai8rahim
  • 1 alemagnani
  • 1 alex
  • 1 benjamin wilson
  • 1 chalmerlowe
  • 1 dzikie drożdże
  • 1 jamestwebber
  • 1 matrixorz
  • 1 popo
  • 1 samuela
  • 1 François Boulogne
  • 1 Alexander Measure
  • 1 Ethan White
  • 1 Guilherme Trein
  • 1 Hendrik Heuer
  • 1 IvicaJovic
  • 1 Jan Hendrik Metzen
  • 1 Jean Michel Rouly
  • 1 Eduardo Ariño de la Rubia
  • 1 Jelle Zijlstra
  • 1 Eddy L O Jansson
  • 1 Denis
  • 1 John
  • 1 John Schmidt
  • 1 Jorge Cañardo Alastuey
  • 1 Joseph Perla
  • 1 Joshua Vredevoogd
  • 1 José Ricardo
  • 1 Julien Miotte
  • 1 Kemal Eren
  • 1 Kenta Sato
  • 1 David Cournapeau
  • 1 Kyle Kelley
  • 1 Daniele Medri
  • 1 Laurent Luce
  • 1 Laurent Pierron
  • 1 Luis Pedro Coelho
  • 1 DanielWeitzenfeld
  • 1 Craig Thompson
  • 1 Chyi-Kwei Yau
  • 1 Matthew Brett
  • 1 Matthias Feurer
  • 1 Max Linke
  • 1 Chris Filo Gorgolewski
  • 1 Charles Earl
  • 1 Michael Hanke
  • 1 Michele Orrù
  • 1 Bryan Lunt
  • 1 Brian Kearns
  • 1 Paul Butler
  • 1 Paweł Mandera
  • 1 Peter
  • 1 Andrew Ash
  • 1 Pietro Zambelli
  • 1 staubda



API changes summary


List of contributors for release 0.14 by number of commits.

  • 277 Gilles Louppe
  • 245 Lars Buitinck
  • 187 Andreas Mueller
  • 124 Arnaud Joly
  • 112 Jaques Grobler
  • 109 Gael Varoquaux
  • 107 Olivier Grisel
  • 102 Noel Dawe
  • 99 Kemal Eren
  • 79 Joel Nothman
  • 75 Jake VanderPlas
  • 73 Nelle Varoquaux
  • 71 Vlad Niculae
  • 65 Peter Prettenhofer
  • 64 Alexandre Gramfort
  • 54 Mathieu Blondel
  • 38 Nicolas Trésegnie
  • 35 eustache
  • 27 Denis Engemann
  • 25 Yann N. Dauphin
  • 19 Justin Vincent
  • 17 Robert Layton
  • 15 Doug Coleman
  • 14 Michael Eickenberg
  • 13 Robert Marchman
  • 11 Fabian Pedregosa
  • 11 Philippe Gervais
  • 10 Jim Holmström
  • 10 Tadej Janež
  • 10 syhw
  • 9 Mikhail Korobov
  • 9 Steven De Gryze
  • 8 sergeyf
  • 7 Ben Root
  • 7 Hrishikesh Huilgolkar
  • 6 Kyle Kastner
  • 6 Martin Luessi
  • 6 Rob Speer
  • 5 Federico Vaggi
  • 5 Raul Garreta
  • 5 Rob Zinkov
  • 4 Ken Geis
  • 3 A. Flaxman
  • 3 Denton Cockburn
  • 3 Dougal Sutherland
  • 3 Ian Ozsvald
  • 3 Johannes Schönberger
  • 3 Robert McGibbon
  • 3 Roman Sinayev
  • 3 Szabo Roland
  • 2 Diego Molla
  • 2 Imran Haque
  • 2 Jochen Wersdörfer
  • 2 Sergey Karayev
  • 2 Yannick Schwartz
  • 2 jamestwebber
  • 1 Abhijeet Kolhe
  • 1 Alexander Fabisch
  • 1 Bastiaan van den Berg
  • 1 Benjamin Peterson
  • 1 Daniel Velkov
  • 1 Fazlul Shahriar
  • 1 Felix Brockherde
  • 1 Félix-Antoine Fortin
  • 1 Harikrishnan S
  • 1 Jack Hale
  • 1 JakeMick
  • 1 James McDermott
  • 1 John Benediktsson
  • 1 John Zwinck
  • 1 Joshua Vredevoogd
  • 1 Justin Pati
  • 1 Kevin Hughes
  • 1 Kyle Kelley
  • 1 Matthias Ekman
  • 1 Miroslav Shubernetskiy
  • 1 Naoki Orii
  • 1 Norbert Crombach
  • 1 Rafael Cunha de Almeida
  • 1 Rolando Espinoza La fuente
  • 1 Seamus Abshere
  • 1 Sergey Feldman
  • 1 Sergio Medina
  • 1 Stefano Lattarini
  • 1 Steve Koch
  • 1 Sturla Molden
  • 1 Thomas Jarosch
  • 1 Yaroslav Halchenko


The 0.13.1 release only fixes some bugs and does not add any new functionality.



List of contributors for release 0.13.1 by number of commits.


New Estimator Classes


API changes summary


List of contributors for release 0.13 by number of commits.


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




API changes summary

  • The old scikits.learn package has disappeared; all code should import from sklearn instead, which was introduced in 0.9.
  • In metrics.roc_curve, the thresholds array is now returned with it’s order reversed, in order to keep it consistent with the order of the returned fpr and tpr.
  • In hmm objects, like hmm.GaussianHMM, hmm.MultinomialHMM, etc., all parameters must be passed to the object when initialising it and not through fit. Now fit will only accept the data as an input parameter.
  • For all SVM classes, a faulty behavior of gamma was fixed. Previously, the default gamma value was only computed the first time fit was called and then stored. It is now recalculated on every call to fit.
  • All Base classes are now abstract meta classes so that they can not be instantiated.
  • cluster.ward_tree now also returns the parent array. This is necessary for early-stopping in which case the tree is not completely built.
  • In feature_extraction.text.CountVectorizer the parameters min_n and max_n were joined to the parameter n_gram_range to enable grid-searching both at once.
  • In feature_extraction.text.CountVectorizer, words that appear only in one document are now ignored by default. To reproduce the previous behavior, set min_df=1.
  • Fixed API inconsistency: linear_model.SGDClassifier.predict_proba now returns 2d array when fit on two classes.
  • Fixed API inconsistency: qda.QDA.decision_function and lda.LDA.decision_function now return 1d arrays when fit on two classes.
  • Grid of alphas used for fitting linear_model.LassoCV and linear_model.ElasticNetCV is now stored in the attribute alphas_ rather than overriding the init parameter alphas.
  • Linear models when alpha is estimated by cross-validation store the estimated value in the alpha_ attribute rather than just alpha or best_alpha.
  • ensemble.GradientBoostingClassifier now supports ensemble.GradientBoostingClassifier.staged_predict_proba, and ensemble.GradientBoostingClassifier.staged_predict.
  • svm.sparse.SVC and other sparse SVM classes are now deprecated. The all classes in the Support Vector Machines module now automatically select the sparse or dense representation base on the input.
  • All clustering algorithms now interpret the array X given to fit as input data, in particular cluster.SpectralClustering and cluster.AffinityPropagation which previously expected affinity matrices.
  • For clustering algorithms that take the desired number of clusters as a parameter, this parameter is now called n_clusters.





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.




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:


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.


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:


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:


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.



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



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



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.