Versión 0.21.3¶
Leyenda para registros de cambios¶
Major Feature : algo grande que no podías hacer antes.
Feature : algo que no podías hacer antes.
Efficiency : una característica existente ahora puede no requerir tanto cálculo o memoria.
Enhancement : una mejora menor variada.
Fix : algo que anteriormente no funcionaba según lo documentado – o según las expectativas razonables – ahora debería funcionar.
API Change : tendrás que cambiar tu código para tener el mismo efecto en el futuro; o una característica será eliminada en el futuro.
30 de julio de 2019
Modelos modificados¶
Los siguientes estimadores y funciones, cuando se ajustan con los mismos datos y parámetros, pueden producir modelos diferentes de la versión anterior. Esto suele ocurrir debido a cambios en la lógica de modelado (corrección de errores o mejoras), o en los procedimientos de muestreo aleatorio.
Las notas de publicación de la versión v0.20.0 no mencionan una incompatibilidad con versiones anteriores en
metrics.make_scorercuandoneeds_proba=Trueyy_truees binario. Ahora, se supone que la función scorer acepta uny_pred1D (es decir, la probabilidad de la clase positiva, de forma(n_samples,)), en lugar de uny_pred2D (es decir, de forma(n_samples, 2)).
Registro de cambios¶
sklearn.cluster¶
Fix Se ha corregido un error en
cluster.KMeanspor el que el cálculo coninit='random' era de un solo hilo cuando `n_jobs > 1on_jobs = -1. #12955 por Prabakaran Kumaresshan.Fix Se ha corregido un error en
cluster.OPTICSpor el que los usuarios no podían pasar números de punto flotante (float)min_samplesymin_cluster_size. #14496 por Fabian Klopfer y Hanmin Qin.Fix Se ha corregido un error en
cluster.KMeanspor el que la inicialización de KMeans++ podía provocar raramente un IndexError. #11756 por Joel Nothman.
sklearn.compose¶
Fix Se ha corregido una incidencia en
compose.ColumnTransformerdonde el uso de DataFrames cuyo orden de columnas difiere entre :func:fity :func:transformpodía llevar a pasar silenciosamente columnas incorrectas al transformadorremainder. #14237 porAndreas Schuderer <schuderer>.
sklearn.datasets¶
Fix
datasets.fetch_california_housing,datasets.fetch_covtype,datasets.fetch_kddcup99,datasets.fetch_olivetti_faces,datasets.fetch_rcv1, ydatasets.fetch_species_distributionsintentan conservar la caché anterior utilizando la nuevajoblibsi los datos almacenados en la caché se conservaron utilizando la obsoletasklearn.externals.joblib. Este comportamiento se establece como obsoleto y se elimina en la v0.23. #14197 por Adrin Jalali.
sklearn.ensemble¶
Fix Se corrigió el error de división por cero en
HistGradientBoostingClassifieryHistGradientBoostingRegressor. #14024 porNicolas Hug <NicolasHug>.
sklearn.impute¶
Fix Se corrigió un error en
impute.SimpleImputery enimpute.IterativeImputerpara que no se produzcan errores cuando hay valores faltantes en los datos de entrenamiento. #13974 porFrank Hoang <fhoang7>.
sklearn.inspection¶
Fix Se ha corregido un error en
inspection.plot_partial_dependencepor el que no se tenía en cuenta el parámetrotargetpara los problemas multiclase. #14393 por Guillem G. Subies.
sklearn.linear_model¶
Fix Se ha corregido un error en
linear_model.LogisticRegressionCVdonderefit=Falsefallaría dependiendo de los parámetros'multiclass'y'penalty'(regresión introducida en 0.21). #14087 por Nicolas Hug.Fix Corrección de compatibilidad para
linear_model.ARDRegressiony Scipy>=1.3.0. Se adapta a los cambios en el umbral de corte predeterminado depinvhque, de lo contrario, da lugar a una mala exactitud en algunos casos. #14067 por Tim Staley.
sklearn.neighbors¶
Fix Se ha corregido un error en
neighbors.NeighborhoodComponentsAnalysispor el que la validación de los parámetros inicialesn_components,max_iterytolrequería tipos demasiado estrictos. #14092 por Jérémie du Boisberranger.
sklearn.tree¶
Fix Corregido error en
tree.export_textcuando el árbol tiene una característica y se pasa un único nombre de característica. #14053 porThomas Fan.Fix Se ha corregido un problema con
plot_treeen el que se mostraban los cálculos de entropía incluso para el criterioginien DecisionTreeClassifiers. #13947 por Frank Hoang.
Versión 0.21.2¶
24 de mayo de 2019
Registro de cambios¶
sklearn.decomposition¶
Fix Se ha corregido un error en
cross_decomposition.CCAmejorando la estabilidad numérica cuandoYes cercano a cero. #13903 por Thomas Fan.
sklearn.metrics¶
Fix Se ha corregido un error en
metrics.pairwise.euclidean_distancespor el que una parte de la matriz de distancias se dejaba sin instanciar para conjuntos de datos float32 suficientemente grandes (regresión introducida en 0.21). #13910 por Jérémie du Boisberranger.
sklearn.preprocessing¶
Fix Se ha corregido un error en
preprocessing.OneHotEncoderpor el que el nuevo parámetrodropno se reflejaba enget_feature_names. #13894 por James Myatt.
sklearn.utils.sparsefuncs¶
Fix Se ha corregido un error donde
min_max_axisfallaba en sistemas de 32 bits para ciertas entradas grandes. Esto afecta apreprocessing.MaxAbsScaler,preprocessing.normalizeypreprocessing.LabelBinarizer. #13741 por Roddy MacSween.
Versión 0.21.1¶
17 de mayo de 2019
Esta es una versión de corrección de errores para resolver principalmente algunas incidencias de empaquetado de la versión 0.21.0. También incluye mejoras menores en la documentación y algunas correcciones de errores.
Registro de cambios¶
sklearn.inspection¶
Fix Se ha corregido un error en
inspection.partial_dependencepara que sólo compruebe el clasificador y no el regresor para el caso de multiclase-multisalida. #14309 por Guillaume Lemaitre.
sklearn.metrics¶
Fix Se ha corregido un error en
metrics.pairwise_distancesdonde aparecíaAttributeErrorpara métricas booleanas cuandoXtenía un dtype booleano yY == None. #13864 por Paresh Mathur.Fix Se han corregido dos errores en
metrics.pairwise_distancescuandon_jobs > 1. En primer lugar, solía devolver una matriz de distancias con el mismo tipo de entrada (dtype), incluso para un tipo de entrada entero. Luego la diagonal no era cero para la métrica euclidiana cuandoYesX. #13877 por Jérémie du Boisberranger.
sklearn.neighbors¶
Fix Se ha corregido un error en
neighbors.KernelDensityque no podía restaurarse desde un pickle si se había utilizadosample_weight. #13772 por Aditya Vyas.
Versión 0.21.0¶
Mayo de 2019
Modelos modificados¶
Los siguientes estimadores y funciones, cuando se ajustan con los mismos datos y parámetros, pueden producir modelos diferentes de la versión anterior. Esto suele ocurrir debido a cambios en la lógica de modelado (corrección de errores o mejoras), o en los procedimientos de muestreo aleatorio.
discriminant_analysis.LinearDiscriminantAnalysispara clasificación multiclase. Fixdiscriminant_analysis.LinearDiscriminantAnalysiscon solucionador “eigen”. FixÁrboles de decisión y ensembles derivados cuando se establecen tanto
max_depthcomomax_leaf_nodes. Fixlinear_model.LogisticRegressionylinear_model.LogisticRegressionCVcon solucionador “saga”. Fixsklearn.feature_extraction.text.HashingVectorizer,sklearn.feature_extraction.text.TfidfVectorizerysklearn.feature_extraction.text.CountVectorizerFixsvm.SVC.decision_functionymulticlass.OneVsOneClassifier.decision_function. Fixlinear_model.SGDClassifiery cualquier clasificador derivado. FixCualquier modelo que utilice la función
linear_model._sag.sag_solvercon una semilla0, incluyendolinear_model.LogisticRegression,linear_model.LogisticRegressionCV,linear_model.Ridge, ylinear_model.RidgeCVcon el solucionador “sag”. Fixlinear_model.RidgeCVcuando se utiliza la validación cruzada dejando uno fuera (leave-one-out) con entradas dispersas. Fix
Los detalles se encuentran en el registro de cambios más abajo.
(Mientras intentamos informar mejor a los usuarios proporcionando esta información, no podemos asegurar que esta lista esté completa.)
Principales Errores Conocidos¶
El valor predeterminado de
max_iterparalinear_model.LogisticRegressiones demasiado pequeño para muchos solucionadores dado el valor predeterminado detol. En particular, cambiamos accidentalmente el valor predeterminado demax_iterpara el solucionador liblinear de 1000 a 100 iteraciones en #3591 publicado en la versión 0.16. En una futura versión esperamos elegir mejor los valores predeterminados demax_iterytolde forma heurística dependiendo del solucionador (ver #13317).
Registro de cambios¶
El soporte para Python 3.4 e inferior ha sido oficialmente eliminado.
sklearn.base¶
API Change La puntuación R2 utilizada cuando se llama a
scoreen un regresor utilizarámultioutput='uniform_average'desde la versión 0.23 para mantener la coherencia conmetrics.r2_score. Esto influirá en el métodoscorede todos los regresores de salida múltiple (excepto enmultioutput.MultiOutputRegressor). #13157 por Hanmin Qin.
sklearn.calibration¶
Enhancement Se ha añadido soporte para dividir los datos pasados a
calibration.calibration_curvepor cuantiles en lugar de uniformemente entre 0 y 1. #13086 por Scott Cole.Enhancement Se permiten arreglos n-dimensionales como entrada para
calibration.CalibratedClassifierCV. #13485 por William de Vazelhes.
sklearn.cluster¶
Major Feature Un nuevo algoritmo de agrupamiento:
cluster.OPTICS: un algoritmo relacionado concluster.DBSCAN, que tiene hiperparámetros más fáciles de establecer y que escala mejor, por Shane, Adrin Jalali, Erich Schubert, Hanmin Qin, y Assia Benbihi.Fix Se ha corregido un error por el que
cluster.Birchpodía ocasionalmente lanzar un AttributeError. #13651 por Joel Nothman.Fix Se ha corregido un error en
cluster.KMeanspor el que los conglomerados vacíos no se reubicaban correctamente cuando se utilizaban ponderaciones de muestra. #13486 por Jérémie du Boisberranger.API Change El atributo
n_components_encluster.AgglomerativeClusteringycluster.FeatureAgglomerationha sido renombrado an_connected_components_. #13427 por Stephane Couvreur.Enhancement
cluster.AgglomerativeClusteringycluster.FeatureAgglomerationahora aceptan un parámetrodistance_thresholdque puede utilizarse para encontrar los conglomerados en lugar den_clusters. #9069 por Vathsala Achar y Adrin Jalali.
sklearn.compose¶
API Change
compose.ColumnTransformerya no es una función experimental. #13835 por Hanmin Qin.
sklearn.datasets¶
Fix Se ha añadido soporte para IDs de grupo de 64 bits y punteros en archivos SVMLight. #10727 por Bryan K Woods.
Fix
datasets.load_sample_imagesdevuelve imágenes con un orden determinístico. #13250 por Thomas Fan.
sklearn.decomposition¶
Enhancement
decomposition.KernelPCAahora tiene una salida determinista (resuelta la ambigüedad de signo en la descomposición de valores propios de la matriz kernel). #13241 por Aurélien Bellet.Fix Se ha corregido un error en
decomposition.KernelPCA,fit().transform()ahora produce la salida correcta (la misma quefit_transform()) en caso de autovalores no eliminados (remove_zero_eig=False). También se ha aceleradofit_inverse_transformutilizando el mismo truco que enfit_transformpara calcular la transformada deX. #12143 por Sylvain MariéFix Se ha corregido un error en
decomposition.NMFdondeinit = 'nndsvd',init = 'nndsvda', yinit = 'nndsvdar'se permiten cuandon_components < n_featuresen lugar den_components <= min(n_samples, n_features). #11650 por Hossein Pourbozorg y Zijie (ZJ) Poh.API Change El valor predeterminado del argumento
initendecomposition.non_negative_factorizationcambiará derandomaNoneen la versión 0.23 para hacerlo consistente condecomposition.NMF. Se genera un FutureWarning cuando se utiliza el valor predeterminado. #12988 por Zijie (ZJ) Poh.
sklearn.discriminant_analysis¶
Enhancement
discriminant_analysis.LinearDiscriminantAnalysisahora preserva los dtypesfloat32yfloat64. #8769 y #11000 por Thibault SejourneFix Ahora se genera un
ChangedBehaviourWarningcuandodiscriminant_analysis.LinearDiscriminantAnalysisse da como parámetron_components > min(n_features, n_classes - 1), yn_componentsse cambia amin(n_features, n_classes - 1)si es así. Anteriormente el cambio se hizo, pero en silencio. #11526 por William de Vazelhes.Fix Se ha corregido un error en
discriminant_analysis.LinearDiscriminantAnalysispor el que las probabilidades predichas se calculaban incorrectamente en el caso multiclase. #6848, por Agamemnon Krasoulis yGuillaume Lemaitre <glemaitre>.Fix Se ha corregido un error en
discriminant_analysis.LinearDiscriminantAnalysispor el que las probabilidades predichas se calculaban incorrectamente con el solucionadoreigen. #11727, por Agamemnon Krasoulis.
sklearn.dummy¶
Fix Se ha corregido un error en
dummy.DummyClassifierpor el que el métodopredict_probadevolvía un arreglo de int32 en lugar de float64 para la estrategiastratified. #13266 por Christos Aridas.Fix Se ha corregido un error en
dummy.DummyClassifierpor el que se generaba un error de desajuste de dimensiones en el tiempo de predicción si se daba un vector columnayconshape=(n, 1)en tiempo defit. #13545 por Nick Sorros y Adrin Jalali.
sklearn.ensemble¶
Major Feature Se añaden dos nuevas implementaciones de árboles de potenciación del gradiente:
ensemble.HistGradientBoostingClassifieryensemble.HistGradientBoostingRegressor. La implementación de estos estimadores está inspirada en LightGBM y puede ser órdenes de magnitud más rápida queensemble.GradientBoostingRegressoryensemble.GradientBoostingClassifiercuando el número de muestras es mayor que decenas de miles de muestras. La API de estos nuevos estimadores es ligeramente diferente, y algunas de las características deensemble.GradientBoostingClassifieryensemble.GradientBoostingRegressoraún no son compatibles.Estos nuevos estimadores son experimentales, lo que significa que sus resultados o su API podrían cambiar sin ningún ciclo de obsolescencia. Para utilizarlos, es necesario importar explícitamente
enable_hist_gradient_boosting:>>> # explicitly require this experimental feature >>> from sklearn.experimental import enable_hist_gradient_boosting # noqa >>> # now you can import normally from sklearn.ensemble >>> from sklearn.ensemble import HistGradientBoostingClassifier
#12807 por Nicolas Hug.
Feature Se añade
ensemble.VotingRegressorque proporciona un equivalente deensemble.VotingClassifierpara problemas de regresión. #12513 por Ramil Nugmanov y Mohamed Ali Jamaoui.Efficiency Se hace que
ensemble.IsolationForestprefiera los hilos sobre los procesos cuando se ejecuta conn_jobs > 1ya que las llamadas de ajuste del árbol de decisión subyacente liberan el GIL. Este cambio reduce el uso de memoria y la sobrecarga de comunicación. #12543 por Isaac Storch y Olivier Grisel.Efficiency Se hace más eficiente la memoria de
ensemble.IsolationForestevitando mantener en memoria cada predicción del árbol. #13260 por Nicolas Goix.Efficiency
ensemble.IsolationForestahora utiliza porciones de datos en el paso de predicción, limitando así el uso de memoria. #13283 por Nicolas Goix.Efficiency Ahora
sklearn.ensemble.GradientBoostingClassifierysklearn.ensemble.GradientBoostingRegressormantienen la entradaycomofloat64para evitar que sea copiada internamente por los árboles. #13524 por Adrin Jalali.Enhancement Se ha minimizado la validación de X en
ensemble.AdaBoostClassifieryensemble.AdaBoostRegressor#13174 por Christos Aridas.Enhancement
ensemble.IsolationForestahora expone el parámetrowarm_start, permitiendo la adición iterativa de árboles a un bosque de aislamiento. #13496 por Peter Marko.Fix Los valores de
feature_importances_en todos los modelos basados en bosques aleatorios (es decir,ensemble.RandomForestClassifier,ensemble.RandomForestRegressor,ensemble. ExtraTreesClassifier,ensemble.ExtraTreesRegressor,ensemble.RandomTreesEmbedding,ensemble.GradientBoostingClassifier, yensemble.GradientBoostingRegressor) ahora:suma hasta
1se ignoran todos los árboles de un solo nodo en el cálculo de la importancia de las características
en caso de que todos los árboles tengan un solo nodo (es decir, un nodo raíz), las importancias de las características serán un arreglo de todos los ceros.
#13636 y #13620 por Adrin Jalali.
Fix Se ha corregido un error en
ensemble.GradientBoostingClassifieryensemble.GradientBoostingRegressor, que no admitían los estimadores de scikit-learn como estimador inicial. También se ha añadido soporte para el estimador inicial que no admitía ponderaciones de muestra. #12436 por Jérémie du Boisberranger y #12983 por Nicolas Hug.Fix Corregida la salida de la longitud promedio del camino calculada en
ensemble.IsolationForestcuando la entrada es 0, 1 o 2. #13251 por Albert Thomas y joshuakennethjones.Fix Se ha corregido un error en
ensemble.GradientBoostingClassifierpor el que los gradientes se calculaban incorrectamente en problemas de clasificación multiclase. #12715 por Nicolas Hug.Fix Se ha corregido un error en
ensemble.GradientBoostingClassifierpor el que los conjuntos de validación para la parada temprana no se muestreaban con estratificación. #13164 por Nicolas Hug.Fix Se ha corregido un error en
ensemble.GradientBoostingClassifierpor el que la predicción inicial por defecto de un clasificador multiclase predecía las clases a priori en lugar del logaritmo de las mismas. #12983 por Nicolas Hug.Fix Se ha corregido un error en
ensemble.RandomForestClassifierpor el que el métodopredictdaba un error en los modelos de bosques multiclase multisalida si algún objetivo era una cadena. #12834 por Elizabeth Sander.Fix Se ha corregido un error en
ensemble.gradient_boosting.LossFunctionyensemble.gradient_boosting.LeastSquaresErrordonde el valor predeterminado delearning_rateenupdate_terminal_regionsno es consistente con el documento y las funciones de llamada. Ten en cuenta, sin embargo, que el uso directo de estas funciones de pérdida está obsoleto. #6463 by movelikeriver.Fix
ensemble.partial_dependence(y en consecuencia la nueva versiónsklearn.inspection.partial_dependence) ahora tiene en cuenta las ponderaciones de la muestra para el cálculo de la dependencia parcial cuando el modelo de potenciación del gradiente ha sido entrenado con ponderaciones de la muestra. #13193 por Samuel O. Ronsin.API Change
ensemble.partial_dependenceyensemble.plot_partial_dependenceestán ahora obsoletos en favor deinspection.partial_dependenceyinspection.plot_partial_dependence. #12599 por Trevor Stephens y Nicolas Hug.Fix
ensemble.VotingClassifieryensemble.VotingRegressorfallaban durantefiten uno de los estimadores se establecía comoNoneysample_weightno eraNone. #13779 por Guillaume Lemaitre.API Change
ensemble.VotingClassifieryensemble.VotingRegressoraceptan'drop'para desactivar un estimador además deNonepara ser consistentes con otros estimadores (es decir,pipeline.FeatureUnionycompose.ColumnTransformer). #13780 por Guillaume Lemaitre.
sklearn.externals¶
API Change Se ha eliminado
externals.sixya que se ha dejado de dar soporte a Python 2.7. #12916 por Hanmin Qin.
sklearn.feature_extraction¶
Fix Si
input='file'oinput='filename', y se da un invocable comoanalyzer,sklearn.feature_extraction.text.HashingVectorizer,sklearn.feature_extraction.text.TfidfVectorizer, ysklearn. feature_extraction.text.CountVectorizerahora leen los datos del o de los archivos y los pasan alanalyzerdado, en lugar de pasar el nombre del o de los archivo o el(los) objeto(s) del archivo al analyzer. #13641 por Adrin Jalali.
sklearn.impute¶
Major Feature Se ha añadido
impute.IterativeImputer, que es una estrategia para la imputación de valores faltantes mediante el modelado de cada característica con valores faltantes en función de otras características de forma round-robin. #8478 y #12177 por Sergey Feldman y Ben Lawson.La API de IterativeImputer es experimental y está sujeta a cambios sin ningún ciclo de obsolescencia. Para utilizarlas, es necesario importar explícitamente
enable_iterative_imputer:>>> from sklearn.experimental import enable_iterative_imputer # noqa >>> # now you can import normally from sklearn.impute >>> from sklearn.impute import IterativeImputer
Feature Los
impute.SimpleImputeryimpute.IterativeImputertienen un nuevo parámetro'add_indicator, que simplemente apila una transformaciónimpute.MissingIndicatoren la salida de la transformación del imputador. Esto permite que un estimador predictivo tenga en cuenta la falta de datos. #12583, #13601 por Danylo Baibak.Fix En
impute.MissingIndicatorse evita la densificación implícita generando una excepción si la entrada es dispersa y la propiedadmissing_valuesse establece en 0. #13240 por Bartosz Telenczuk.Fix Se han corregido dos errores en
impute.MissingIndicator. En primer lugar, cuandoXes disperso, todos los valores distintos de cero no faltantes solían convertirse en Falso explícito en los datos transformados. Luego, cuandofeatures='missing-only', todas las características solían mantenerse si no había ningún valor faltante. #13562 por Jérémie du Boisberranger.
sklearn.inspection¶
(nuevo subpaquete)
Feature Los gráficos de dependencia parcial (
inspection.plot_partial_dependence) ahora son compatibles con cualquier regresor o clasificador (siempre que tengan un métodopredict_proba). #12599 por Trevor Stephens y Nicolas Hug.
sklearn.isotonic¶
Feature Se han permitido diferentes dtypes (como float32) en
isotonic.IsotonicRegression. #8769 por Vlad Niculae
sklearn.linear_model¶
Enhancement
linear_model.Ridgeahora preserva los dtypesfloat32yfloat64. #8769 y #11000 por Guillaume Lemaitre, y Joan MassichFeature
linear_model.LogisticRegressionylinear_model.LogisticRegressionCVahora admiten la penalización Elastic-Net, con el solucionador “saga”. #11646 por Nicolas Hug.Feature Se ha añadido
linear_model.lars_path_gram, que eslinear_model.lars_pathen el modo de estadísticas suficientes, permitiendo a los usuarios calcularlinear_model.lars_pathsin proporcionarXey. #11699 por Kuai Yu.Efficiency
linear_model.make_datasetahora preserva los dtypesfloat32yfloat64, reduciendo el consumo de memoria en los solucionadores de gradiente estocástico, SAG y SAGA. #8769 y #11000 por Nelle Varoquaux, Arthur Imbert, Guillaume Lemaitre, y Joan MassichEnhancement
linear_model.LogisticRegressionahora admite un objetivo no regularizado cuando se pasapenalty='none'. Esto es equivalente a establecerC=np.infcon regularización l2. No es compatible con el solucionador liblinear. #12860 por Nicolas Hug.Enhancement El solucionador
sparse_cgenlinear_model.Ridgeahora soporta el ajuste del intercepto (es decir,fit_intercept=True) cuando las entradas son dispersas. #13336 por Bartosz Telenczuk.Enhancement El solucionador de descenso coordinado utilizado en
Lasso,ElasticNet, etc. ahora emite unConvergenceWarningcuando se completa sin cumplir la tolerancia deseada. #11754 y #13397 por Brent Fagan y Adrin Jalali.Fix Se ha corregido un error en
linear_model.LogisticRegressionylinear_model.LogisticRegressionCVcon el solucionador “saga”, donde las ponderaciones no se actualizaban correctamente en algunos casos. #11646 por Tom Dupre la Tour.Fix Se ha corregido la media posterior, la covarianza posterior y los parámetros de regularización devueltos en
linear_model.BayesianRidge. La media posterior y la covarianza posterior no eran las calculadas con la última actualización de los parámetros de regularización y los parámetros de regularización devueltos no eran los finales. También se ha corregido la fórmula de la probabilidad marginal logarítmica utilizada para calcular la puntuación cuandocompute_score=True. #12174 por Albert Thomas.Fix Se ha corregido un error en
linear_model.LassoLarsIC, por el que la entrada del usuariocopy_X=Falseen la creación de la instancia era sobreescrita por el valor del parámetro por defectocopy_X=Trueen ``fit`. #12972 por Lucio Fernandez-ArjonaFix Se ha corregido un error en
linear_model.LinearRegressionque no devolvía los mismos coeficientes e interceptos confit_intercept=Trueen casos dispersos y densos. #13279 por Alexandre GramfortFix Se ha corregido un error en
linear_model.HuberRegressorque se rompía cuandoXera de tipo (dtype) bool. #13328 por Alexandre Gramfort.Fix Se ha corregido un problema de rendimiento de los solucionadores
sagaysagcuando se invocan en una configuraciónjoblib.Parallelconn_jobs > 1ybackend="threading", lo que provocaba un peor rendimiento que en el caso secuencial. #13389 por Pierre Glaser.Fix Se ha corregido un error en
linear_model.stochastic_gradient.BaseSGDClassifierque no era determinístico cuando se entrenaba en un entorno multiclase en varios hilos. #13422 por Clément Doumouro.Fix Se ha corregido un error en
linear_model.ridge_regression,linear_model.Ridgeylinear_model.RidgeClassifierque provocaba una excepción no controlada para los argumentosreturn_intercept=Trueysolver=auto(por defecto) o cualquier otro solucionador diferente desag. #13363 por Bartosz TelenczukFix
linear_model.ridge_regressionahora generará una excepción sireturn_intercept=Truey el solucionador es diferente desag. Anteriormente, sólo se emitía una advertencia. #13363 by Bartosz TelenczukFix
linear_model.ridge_regressionelegirá el solucionadorsparse_cgpara entradas dispersas cuando se proporcionesolver=autoysample_weight(anteriormente se seleccionaba el solucionadorcholesky). #13363 by Bartosz TelenczukAPI Change El uso de
linear_model.lars_pathconX=Noneal pasarGramestá obsoleto en la versión 0.21 y se eliminará en la versión 0.23. Utilizalinear_model.lars_path_gramen su lugar. #11699 por Kuai Yu.API Change
linear_model.logistic_regression_pathestá obsoleto en la versión 0.21 y se eliminará en la versión 0.23. #12821 por Nicolas Hug.Fix
linear_model.RidgeCVcon validación cruzada dejando uno fuera (leave-one-out) ahora ajusta correctamente un intercepto cuandofit_intercept=Truey la matriz de diseño es dispersa. #13350 by Jérôme Dockès
sklearn.manifold¶
Efficiency Se hace que
manifold.tsne.trustworthinessutilice un índice invertido en lugar de una búsquedanp.wherepara encontrar el rango de vecinos en el espacio de entrada. Esto mejora la eficiencia en particular cuando se calcula con muchos vecinos y/o conjuntos de datos pequeños. #9907 por William de Vazelhes.
sklearn.metrics¶
Feature Se ha añadido la métrica
metrics.max_errory el correspondiente puntuador'max_error'para la regresión de salida única. #12232 por Krishna Sangeeth.Feature Se añade
metrics.multilabel_confusion_matrix, que calcula una matriz de confusión con recuentos de verdaderos positivos, falsos positivos, falsos negativos y verdaderos negativos para cada clase. Esto facilita el cálculo de las métricas por conjuntos, como la exhaustividad, la especificidad, la caída y la tasa de fallos. #11179 por Shangwu Yao y Joel Nothman.Feature Se ha añadido
metrics.jaccard_scorepara calcular el coeficiente de Jaccard como métrica de evaluación para tareas binarias, multietiqueta y multiclase, con una interfaz análoga a la demetrics.f1_score. #13151 por Gaurav Dhingra y Joel Nothman.Feature Se ha añadido
metrics.pairwise.haversine_distancesa la que se puede acceder conmetric='pairwise'a través demetrics.pairwise_distancesy los estimadores. (La distancia de Haversine estaba disponible anteriormente para el cálculo de vecinos más cercanos). #12568 por Wei Xue, Emmanuel Arias y Joel Nothman.Efficiency
metrics.pairwise_distancesmás rápido conn_jobs> 1 utilizando un backend basado en hilos, en lugar de backends basados en procesos. #8216 por Pierre Glaser y Romuald MenuetEfficiency Las distancias de manhattan por pares con entrada dispersa ahora utiliza el BLAS enviado con scipy en lugar del BLAS incluido. #12732 por Jérémie du Boisberranger
Enhancement Se usa la etiqueta
accuracyen lugar demicro-averageenmetrics.classification_reportpara evitar confusiones.micro-averagesólo se muestra para multietiqueta o para multiclase con un subconjunto de clases, ya que, por lo demás, es idéntica a la exactitud. #12334 by Emmanuel Arias, Joel Nothman and Andreas MüllerEnhancement Se ha añadido el parámetro
betaametrics.homogeneity_completeness_v_measureymetrics.v_measure_scorepara configurar la compensación entre homogeneidad y completitud. #13607 por Stephane Couvreur y y Ivan Sanchez.Fix La métrica
metrics.r2_scoreestá degenerada con una sola muestra y ahora devuelve NaN y generaexceptions.UndefinedMetricWarning. #12855 por Pawel Sendyk.Fix Se ha corregido un error por el que
metrics.brier_score_lossdevolvía a veces un resultado incorrecto cuando sólo había una clase eny_true. #13628 por Hanmin Qin.Fix Se ha corregido un error en
metrics.label_ranking_average_precision_scorepor el que no se tenía en cuenta sample_weight para las muestras con etiquetas degeneradas. #13447 por Dan Ellis.API Change El parámetro
labelsenmetrics.hamming_lossestá obsoleto en la versión 0.21 y se eliminará en la versión 0.23. #10580 por Reshama Shaikh y Sandra Mitrovic.Fix La función
metrics.pairwise.euclidean_distances, y por tanto varios estimadores conmetric='euclidean', sufrían problemas de precisión numérica con las característicasfloat32. Se ha aumentado la precisión a costa de una pequeña caída del rendimiento. #13554 por @Celelibi y Jérémie du Boisberranger.API Change
metrics.jaccard_similarity_scorequeda obsoleto en favor demetrics.jaccard_score, más coherente. El comportamiento anterior para objetivos binarios y multiclase no funciona. #13151 por Joel Nothman.
sklearn.mixture¶
Fix Se ha corregido un error en
mixture.BaseMixturey, por tanto, en los estimadores basados en ella, es decir,mixture.GaussianMixtureymixture.BayesianGaussianMixture, dondefit_predictyfit.predictno eran equivalentes. #13142 por Jérémie du Boisberranger.
sklearn.model_selection¶
Feature Las clases
GridSearchCVyRandomizedSearchCVahora permiten refit=callable para añadir flexibilidad en la identificación del mejor estimador. Ver Balancear la complejidad del modelo y la puntuación de validación cruzada. #11354 por Wenhao Zhang, Joel Nothman y Adrin Jalali.Enhancement Las clases
GridSearchCV,RandomizedSearchCV, y los métodoscross_val_score,cross_val_predict,cross_validate, ahora imprimen las puntuaciones del entrenamiento cuandoreturn_train_scoreses True yverbose> 2. Paralearning_curve, yvalidation_curvesólo se requiere esta última. #12613 y #12669 por Marc Torrellas.Enhancement Algunas clases de separador de CV y
model_selection.train_test_splitahora producen unValueErrorcuando el conjunto de entrenamiento resultante está vacío. #12861 por Nicolas Hug.Fix Se ha corregido un error por el que
model_selection.StratifiedKFoldrevuelve las muestras de cada clase con el mismorandom_state, haciendo queshuffle=Truesea ineficaz. #13124 por Hanmin Qin.Fix Se ha añadido la posibilidad de que
model_selection.cross_val_predictmaneje objetivos multietiqueta (y multisalida-multiclase) con métodos de tipopredict_proba. #8773 por Stephen Hoover.Fix Se ha corregido un problema en
cross_val_predictpor el quemethod="predict_proba"devolvía siempre0.0cuando se excluía una de las clases en un pliegue de validación cruzada. #13366 por Guillaume Fournier
sklearn.multiclass¶
Fix Se ha corregido un problema en
multiclass.OneVsOneClassifier.decision_functionpor el que el valor de decision_function de una muestra dada era diferente dependiendo de si decision_function se evaluaba en la muestra sola o en un lote que contenía esta misma muestra debido al escalamiento utilizado en decision_function. #10440 por Jonathan Ohayon.
sklearn.multioutput¶
Fix Se ha corregido un error en
multioutput.MultiOutputClassifierpor el que el métodopredict_probacomprobaba incorrectamente el atributopredict_probaen el objeto estimador (estimator). #12222 por Rebekah Kim
sklearn.neighbors¶
Major Feature Se ha añadido
neighbors.NeighborhoodComponentsAnalysispara el aprendizaje métrico, que implementa el algoritmo de análisis de componentes del vecindario (Neighborhood Components Analysis). #10058 por William de Vazelhes y John Chiotellis.API Change Los métodos en
neighbors.NearestNeighbors:kneighbors,radius_neighbors,kneighbors_graph,radius_neighbors_graphahora generanNotFittedError, en lugar deAttributeError, cuando se llaman antes defit. #12279 por Krishna Sangeeth.
sklearn.neural_network¶
Fix Se ha corregido un error en
neural_network.MLPClassifieryneural_network.MLPRegressorpor el que se ignoraba la opciónshuffle=False. #12582 por Sam Waterbury.Fix Se ha corregido un error en
neural_network.MLPClassifierpor el que los conjuntos de validación para la parada anticipada no se muestreaban con estratificación. Sin embargo, en el caso multietiqueta, las divisiones siguen sin estar estratificadas. #13164 por Nicolas Hug.
sklearn.pipeline¶
Feature
pipeline.Pipelineahora puede utilizar la notación de indexación (por ejemplo,my_pipeline[0:-1]) para extraer una subsecuencia de pasos como otra instancia de Pipeline. Un Pipeline también puede ser indexado directamente para extraer un paso particular (por ejemplo,mi_pipeline['svc']), en lugar de acceder anamed_steps. #2568 por Joel Nothman.Feature Se ha añadido el parámetro opcional
verboseenpipeline.Pipeline,compose.ColumnTransformerypipeline.FeatureUniony los correspondientes (helpers)make_para mostrar el progreso y el tiempo de cada paso. #11364 por Baze Petrushev, Karan Desai, Joel Nothman, y Thomas Fan.Enhancement
pipeline.Pipelineahora admite el uso de'passthrough'como transformador, con el mismo efecto queNone. #11144 por Thomas Fan.Enhancement
pipeline.Pipelineimplementa__len__y por tantolen(pipeline)devuelve el número de pasos del pipeline. #13439 por Lakshya KD.
sklearn.preprocessing¶
Feature
preprocessing.OneHotEncoderahora admite la eliminación de una característica por categoría con un nuevo parámetro de eliminación. #12908 por Drew Johnston.Efficiency
preprocessing.OneHotEncoderypreprocessing.OrdinalEncoderahora manejan DataFrames de pandas de forma más eficiente. #13253 por @maikia.Efficiency Se hace que
preprocessing.MultiLabelBinarizeralmacene en caché los mapeos de clase en lugar de calcularlas cada vez sobre la marcha. #12116 por Ekaterina Krivich y Joel Nothman.Efficiency
preprocessing.PolynomialFeaturesahora admite matrices de filas dispersas comprimidas (compressed sparse row, CSR) como entrada para grados 2 y 3. Esto suele ser mucho más rápido que el caso denso, ya que escala con la densidad de la matriz y el grado de expansión (en el orden de densidad^grado), y es mucho, mucho más rápido que el caso de columnas dispersas comprimidas (compressed sparse column, CSC). #12197 por Andrew Nystrom.Efficiency Mejora de la velocidad en
preprocessing.PolynomialFeatures, en el caso denso. También se ha añadido un nuevo parámetroorderque controla el orden de salida para obtener más rendimiento de velocidad. #12251 por Tom Dupre la Tour.Fix Se ha corregido el exceso de cálculo al utilizar un dtype float16 con
preprocessing.StandardScaler. #13007 por Raffaello BaluyotFix Se ha corregido un error en
preprocessing.QuantileTransformerypreprocessing.quantile_transformpara forzar que n_quantiles sea como máximo igual a n_samples. Los valores de n_cuantiles mayores que n_samples eran inútiles o daban lugar a una aproximación errónea del estimador de la función de distribución acumulada. #13333 por Albert Thomas.API Change El valor predeterminado de
copyenpreprocessing.quantile_transformcambiará de False a True en 0.23 para hacerlo más consistente con los valores predeterminados decopyde otras funciones enpreprocessingy evitar efectos secundarios inesperados al modificar el valor deXin place. #13459 por Hunter McGushion.
sklearn.svm¶
Fix Se ha solucionado un problema en
svm.SVC.decision_functioncuandodecision_function_shape='ovr'. El valor de decision_function de una muestra dada era diferente dependiendo de si decision_function se evaluaba en la muestra sola o en un lote que contenía esta misma muestra debido al escalamiento utilizado en decision_function. #10440 por Jonathan Ohayon.
sklearn.tree¶
Feature Los Árboles de Decisión ahora pueden graficarse con matplotlib utilizando
tree.plot_treesin depender de la bibliotecadot, eliminando una dependencia difícil de instalar. #8508 por Andreas Müller.Feature Los Árboles de Decisión ahora pueden exportarse en un formato textual legible para los humanos utilizando
tree.export_text. #6261 porGiuseppe Vettigli <JustGlowing>.Feature
get_n_leaves()yget_depth()se han agregado atree.BaseDecisionTreey, en consecuencia, a todos los estimadores basados en él, incluyendotree.DecisionTreeClassifier,tree.DecisionTreeRegressor,tree.ExtraTreeClassifier, ytree.ExtraTreeRegressor. #12300 por Adrin Jalali.Fix Los árboles y los bosques no
predict(predecían) previamente los objetivos de clasificación multisalida con etiquetas de cadena, a pesar de aceptarlas enfit. #11458 de Mitar Milutinovic.Fix Se ha corregido un problema con
tree.BaseDecisionTreey, en consecuencia, todos los estimadores basados en él, incluyendotree.DecisionTreeClassifier,tree.DecisionTreeRegressor,tree. ExtraTreeClassifier, ytree.ExtraTreeRegressor, donde solían exceder elmax_depthdado en 1 mientras se expandía el árbol simax_leaf_nodesymax_deptheran especificados por el usuario. Ten en cuenta que esto también afecta a todos los métodos de ensemble que utilizan árboles de decisión. #12344 por Adrin Jalali.
sklearn.utils¶
Feature
utils.resampleahora acepta un parámetrostratify(de estratificación) para el muestreo según las distribuciones de clase. #13549 por Nicolas Hug.API Change Se ha eliminado el parámetro
warn_on_dtypedeutils.check_arrayyutils.check_X_y. Se ha añadido una advertencia explícita para la conversión de tipos (dtypes) encheck_pairwise_arrayssimetricque se pasa es una métrica booleana por pares. #13382 por Prathmesh Savale.
Múltiples módulos¶
Major Feature El método
__repr__()de todos los estimadores (utilizado cuando se llama aprint(estimator)) ha sido completamente reescrito, basándose en la biblioteca estándar de impresión pretty de Python. Todos los parámetros se imprimen por defecto, pero esto puede ser alterado con la opciónprint_changed_onlyensklearn.set_config. #11705 por Nicolas Hug.Major Feature Se añaden etiquetas de estimadores: son anotaciones de los estimadores que permiten la inspección programática de sus capacidades, como el soporte de matrices dispersas, los tipos de salida y los métodos soportados. Las etiquetas de los estimadores también determinan las pruebas o tests que se ejecutan en un estimador cuando se llama a
check_estimator. Lea más en el Manual de Usuario. #8022 por Andreas Müller.Efficiency Se evitan las copias de memoria cuando se funden los arreglos a un dtype diferente en los múltiples estimadores. #11973 por Roman Yurchak.
Fix Se ha corregido un error en la implementación de la función helper (de ayuda)
our_rand_rque no se comportaba de forma consistente en todas las plataformas. #13422 por Madhura Parikh y Clément Doumouro.
Varios¶
Enhancement Joblib ya no se vende en scikit-learn, y se convierte en una dependencia. La versión mínima soportada es joblib 0.11, sin embargo, se recomienda encarecidamente utilizar la versión >= 0.13. #13531 por Roman Yurchak.
Cambios en las comprobaciones de los estimadores¶
Estos cambios afectan principalmente a los desarrolladores de bibliotecas.
Se añade
check_fit_idempotentacheck_estimator, que comprueba que cuando se llama dos veces afitcon los mismos datos, la salida depredict,predict_proba,transformydecision_functionno cambia. #12328 by Nicolas HugMuchas comprobaciones pueden ahora desactivarse o configurarse con Etiquetas de Estimador. #8022 por Andreas Müller.
Colaboradores de código y documentación¶
Gracias a quienes han contribuido al mantenimiento y mejora del proyecto desde la versión 0.20, incluyendo:
adanhawth, Aditya Vyas, Adrin Jalali, Agamemnon Krasoulis, Albert Thomas, Alberto Torres, Alexandre Gramfort, amourav, Andrea Navarrete, Andreas Mueller, Andrew Nystrom, assiaben, Aurélien Bellet, Bartosz Michałowski, Bartosz Telenczuk, bauks, BenjaStudio, bertrandhaut, Bharat Raghunathan, brentfagan, Bryan Woods, Cat Chenal, Cheuk Ting Ho, Chris Choe, Christos Aridas, Clément Doumouro, Cole Smith, Connossor, Corey Levinson, Dan Ellis, Dan Stine, Danylo Baibak, daten-kieker, Denis Kataev, Didi Bar-Zev, Dillon Gardner, Dmitry Mottl, Dmitry Vukolov, Dougal J. Sutherland, Dowon, drewmjohnston, Dror Atariah, Edward J Brown, Ekaterina Krivich, Elizabeth Sander, Emmanuel Arias, Eric Chang, Eric Larson, Erich Schubert, esvhd, Falak, Feda Curic, Federico Caselli, Frank Hoang, Fibinse Xavier`, Finn O’Shea, Gabriel Marzinotto, Gabriel Vacaliuc, Gabriele Calvo, Gael Varoquaux, GauravAhlawat, Giuseppe Vettigli, Greg Gandenberger, Guillaume Fournier, Guillaume Lemaitre, Gustavo De Mari Pereira, Hanmin Qin, haroldfox, hhu-luqi, Hunter McGushion, Ian Sanders, JackLangerman, Jacopo Notarstefano, jakirkham, James Bourbeau, Jan Koch, Jan S, janvanrijn, Jarrod Millman, jdethurens, jeremiedbb, JF, joaak, Joan Massich, Joel Nothman, Jonathan Ohayon, Joris Van den Bossche, josephsalmon, Jérémie Méhault, Katrin Leinweber, ken, kms15, Koen, Kossori Aruku, Krishna Sangeeth, Kuai Yu, Kulbear, Kushal Chauhan, Kyle Jackson, Lakshya KD, Leandro Hermida, Lee Yi Jie Joel, Lily Xiong, Lisa Sarah Thomas, Loic Esteve, louib, luk-f-a, maikia, mail-liam, Manimaran, Manuel López-Ibáñez, Marc Torrellas, Marco Gaido, Marco Gorelli, MarcoGorelli, marineLM, Mark Hannel, Martin Gubri, Masstran, mathurinm, Matthew Roeschke, Max Copeland, melsyt, mferrari3, Mickaël Schoentgen, Ming Li, Mitar, Mohammad Aftab, Mohammed AbdelAal, Mohammed Ibraheem, Muhammad Hassaan Rafique, mwestt, Naoya Iijima, Nicholas Smith, Nicolas Goix, Nicolas Hug, Nikolay Shebanov, Oleksandr Pavlyk, Oliver Rausch, Olivier Grisel, Orestis, Osman, Owen Flanagan, Paul Paczuski, Pavel Soriano, pavlos kallis, Pawel Sendyk, peay, Peter, Peter Cock, Peter Hausamann, Peter Marko, Pierre Glaser, pierretallotte, Pim de Haan, Piotr Szymański, Prabakaran Kumaresshan, Pradeep Reddy Raamana, Prathmesh Savale, Pulkit Maloo, Quentin Batista, Radostin Stoyanov, Raf Baluyot, Rajdeep Dua, Ramil Nugmanov, Raúl García Calvo, Rebekah Kim, Reshama Shaikh, Rohan Lekhwani, Rohan Singh, Rohan Varma, Rohit Kapoor, Roman Feldbauer, Roman Yurchak, Romuald M, Roopam Sharma, Ryan, Rüdiger Busche, Sam Waterbury, Samuel O. Ronsin, SandroCasagrande, Scott Cole, Scott Lowe, Sebastian Raschka, Shangwu Yao, Shivam Kotwalia, Shiyu Duan, smarie, Sriharsha Hatwar, Stephen Hoover, Stephen Tierney, Stéphane Couvreur, surgan12, SylvainLan, TakingItCasual, Tashay Green, thibsej, Thomas Fan, Thomas J Fan, Thomas Moreau, Tom Dupré la Tour, Tommy, Tulio Casagrande, Umar Farouk Umar, Utkarsh Upadhyay, Vinayak Mehta, Vishaal Kapoor, Vivek Kumar, Vlad Niculae, vqean3, Wenhao Zhang, William de Vazelhes, xhan, Xing Han Lu, xinyuliu12, Yaroslav Halchenko, Zach Griffith, Zach Miller, Zayd Hammoudeh, Zhuyi Xue, Zijie (ZJ) Poh, ^__^