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_scorer
cuandoneeds_proba=True
yy_true
es binario. Ahora, se supone que la función scorer acepta uny_pred
1D (es decir, la probabilidad de la clase positiva, de forma(n_samples,)
), en lugar de uny_pred
2D (es decir, de forma(n_samples, 2)
).
Registro de cambios¶
sklearn.cluster
¶
Fix Se ha corregido un error en
cluster.KMeans
por el que el cálculo coninit='random' era de un solo hilo cuando `n_jobs > 1
on_jobs = -1
. #12955 por Prabakaran Kumaresshan.Fix Se ha corregido un error en
cluster.OPTICS
por el que los usuarios no podían pasar números de punto flotante (float)min_samples
ymin_cluster_size
. #14496 por Fabian Klopfer y Hanmin Qin.Fix Se ha corregido un error en
cluster.KMeans
por 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.ColumnTransformer
donde el uso de DataFrames cuyo orden de columnas difiere entre :func:fit
y :func:transform
podí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_distributions
intentan conservar la caché anterior utilizando la nuevajoblib
si 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
HistGradientBoostingClassifier
yHistGradientBoostingRegressor
. #14024 porNicolas Hug <NicolasHug>
.
sklearn.impute
¶
Fix Se corrigió un error en
impute.SimpleImputer
y enimpute.IterativeImputer
para 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_dependence
por el que no se tenía en cuenta el parámetrotarget
para los problemas multiclase. #14393 por Guillem G. Subies.
sklearn.linear_model
¶
Fix Se ha corregido un error en
linear_model.LogisticRegressionCV
donderefit=False
fallarí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.ARDRegression
y Scipy>=1.3.0. Se adapta a los cambios en el umbral de corte predeterminado depinvh
que, 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.NeighborhoodComponentsAnalysis
por el que la validación de los parámetros inicialesn_components
,max_iter
ytol
requería tipos demasiado estrictos. #14092 por Jérémie du Boisberranger.
sklearn.tree
¶
Fix Corregido error en
tree.export_text
cuando 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_tree
en el que se mostraban los cálculos de entropía incluso para el criteriogini
en 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.CCA
mejorando la estabilidad numérica cuandoY
es cercano a cero. #13903 por Thomas Fan.
sklearn.metrics
¶
Fix Se ha corregido un error en
metrics.pairwise.euclidean_distances
por 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.OneHotEncoder
por el que el nuevo parámetrodrop
no se reflejaba enget_feature_names
. #13894 por James Myatt.
sklearn.utils.sparsefuncs
¶
Fix Se ha corregido un error donde
min_max_axis
fallaba en sistemas de 32 bits para ciertas entradas grandes. Esto afecta apreprocessing.MaxAbsScaler
,preprocessing.normalize
ypreprocessing.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_dependence
para 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_distances
donde aparecíaAttributeError
para métricas booleanas cuandoX
tenía un dtype booleano yY == None
. #13864 por Paresh Mathur.Fix Se han corregido dos errores en
metrics.pairwise_distances
cuandon_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 cuandoY
esX
. #13877 por Jérémie du Boisberranger.
sklearn.neighbors
¶
Fix Se ha corregido un error en
neighbors.KernelDensity
que 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.LinearDiscriminantAnalysis
para clasificación multiclase. Fixdiscriminant_analysis.LinearDiscriminantAnalysis
con solucionador “eigen”. FixÁrboles de decisión y ensembles derivados cuando se establecen tanto
max_depth
comomax_leaf_nodes
. Fixlinear_model.LogisticRegression
ylinear_model.LogisticRegressionCV
con solucionador “saga”. Fixsklearn.feature_extraction.text.HashingVectorizer
,sklearn.feature_extraction.text.TfidfVectorizer
ysklearn.feature_extraction.text.CountVectorizer
Fixsvm.SVC.decision_function
ymulticlass.OneVsOneClassifier.decision_function
. Fixlinear_model.SGDClassifier
y cualquier clasificador derivado. FixCualquier modelo que utilice la función
linear_model._sag.sag_solver
con una semilla0
, incluyendolinear_model.LogisticRegression
,linear_model.LogisticRegressionCV
,linear_model.Ridge
, ylinear_model.RidgeCV
con el solucionador “sag”. Fixlinear_model.RidgeCV
cuando 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_iter
paralinear_model.LogisticRegression
es demasiado pequeño para muchos solucionadores dado el valor predeterminado detol
. En particular, cambiamos accidentalmente el valor predeterminado demax_iter
para 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_iter
ytol
de 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
score
en un regresor utilizarámultioutput='uniform_average'
desde la versión 0.23 para mantener la coherencia conmetrics.r2_score
. Esto influirá en el métodoscore
de 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_curve
por 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.Birch
podía ocasionalmente lanzar un AttributeError. #13651 por Joel Nothman.Fix Se ha corregido un error en
cluster.KMeans
por 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.AgglomerativeClustering
ycluster.FeatureAgglomeration
ha sido renombrado an_connected_components_
. #13427 por Stephane Couvreur.Enhancement
cluster.AgglomerativeClustering
ycluster.FeatureAgglomeration
ahora aceptan un parámetrodistance_threshold
que puede utilizarse para encontrar los conglomerados en lugar den_clusters
. #9069 por Vathsala Achar y Adrin Jalali.
sklearn.compose
¶
API Change
compose.ColumnTransformer
ya 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_images
devuelve imágenes con un orden determinístico. #13250 por Thomas Fan.
sklearn.decomposition
¶
Enhancement
decomposition.KernelPCA
ahora 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_transform
utilizando el mismo truco que enfit_transform
para calcular la transformada deX
. #12143 por Sylvain MariéFix Se ha corregido un error en
decomposition.NMF
dondeinit = 'nndsvd'
,init = 'nndsvda'
, yinit = 'nndsvdar'
se permiten cuandon_components < n_features
en lugar den_components <= min(n_samples, n_features)
. #11650 por Hossein Pourbozorg y Zijie (ZJ) Poh.API Change El valor predeterminado del argumento
init
endecomposition.non_negative_factorization
cambiará derandom
aNone
en 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.LinearDiscriminantAnalysis
ahora preserva los dtypesfloat32
yfloat64
. #8769 y #11000 por Thibault SejourneFix Ahora se genera un
ChangedBehaviourWarning
cuandodiscriminant_analysis.LinearDiscriminantAnalysis
se da como parámetron_components > min(n_features, n_classes - 1)
, yn_components
se 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.LinearDiscriminantAnalysis
por 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.LinearDiscriminantAnalysis
por 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.DummyClassifier
por el que el métodopredict_proba
devolvía un arreglo de int32 en lugar de float64 para la estrategiastratified
. #13266 por Christos Aridas.Fix Se ha corregido un error en
dummy.DummyClassifier
por el que se generaba un error de desajuste de dimensiones en el tiempo de predicción si se daba un vector columnay
conshape=(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.HistGradientBoostingClassifier
yensemble.HistGradientBoostingRegressor
. La implementación de estos estimadores está inspirada en LightGBM y puede ser órdenes de magnitud más rápida queensemble.GradientBoostingRegressor
yensemble.GradientBoostingClassifier
cuando 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.GradientBoostingClassifier
yensemble.GradientBoostingRegressor
aú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.VotingRegressor
que proporciona un equivalente deensemble.VotingClassifier
para problemas de regresión. #12513 por Ramil Nugmanov y Mohamed Ali Jamaoui.Efficiency Se hace que
ensemble.IsolationForest
prefiera los hilos sobre los procesos cuando se ejecuta conn_jobs > 1
ya 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.IsolationForest
evitando mantener en memoria cada predicción del árbol. #13260 por Nicolas Goix.Efficiency
ensemble.IsolationForest
ahora utiliza porciones de datos en el paso de predicción, limitando así el uso de memoria. #13283 por Nicolas Goix.Efficiency Ahora
sklearn.ensemble.GradientBoostingClassifier
ysklearn.ensemble.GradientBoostingRegressor
mantienen la entraday
comofloat64
para evitar que sea copiada internamente por los árboles. #13524 por Adrin Jalali.Enhancement Se ha minimizado la validación de X en
ensemble.AdaBoostClassifier
yensemble.AdaBoostRegressor
#13174 por Christos Aridas.Enhancement
ensemble.IsolationForest
ahora 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
1
se 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.GradientBoostingClassifier
yensemble.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.IsolationForest
cuando la entrada es 0, 1 o 2. #13251 por Albert Thomas y joshuakennethjones.Fix Se ha corregido un error en
ensemble.GradientBoostingClassifier
por 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.GradientBoostingClassifier
por 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.GradientBoostingClassifier
por 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.RandomForestClassifier
por el que el métodopredict
daba 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.LossFunction
yensemble.gradient_boosting.LeastSquaresError
donde el valor predeterminado delearning_rate
enupdate_terminal_regions
no 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_dependence
yensemble.plot_partial_dependence
están ahora obsoletos en favor deinspection.partial_dependence
yinspection.plot_partial_dependence
. #12599 por Trevor Stephens y Nicolas Hug.Fix
ensemble.VotingClassifier
yensemble.VotingRegressor
fallaban durantefit
en uno de los estimadores se establecía comoNone
ysample_weight
no eraNone
. #13779 por Guillaume Lemaitre.API Change
ensemble.VotingClassifier
yensemble.VotingRegressor
aceptan'drop'
para desactivar un estimador además deNone
para ser consistentes con otros estimadores (es decir,pipeline.FeatureUnion
ycompose.ColumnTransformer
). #13780 por Guillaume Lemaitre.
sklearn.externals
¶
API Change Se ha eliminado
externals.six
ya 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.CountVectorizer
ahora leen los datos del o de los archivos y los pasan alanalyzer
dado, 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.SimpleImputer
yimpute.IterativeImputer
tienen un nuevo parámetro'add_indicator
, que simplemente apila una transformaciónimpute.MissingIndicator
en 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.MissingIndicator
se evita la densificación implícita generando una excepción si la entrada es dispersa y la propiedadmissing_values
se establece en 0. #13240 por Bartosz Telenczuk.Fix Se han corregido dos errores en
impute.MissingIndicator
. En primer lugar, cuandoX
es 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.Ridge
ahora preserva los dtypesfloat32
yfloat64
. #8769 y #11000 por Guillaume Lemaitre, y Joan MassichFeature
linear_model.LogisticRegression
ylinear_model.LogisticRegressionCV
ahora 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_path
en el modo de estadísticas suficientes, permitiendo a los usuarios calcularlinear_model.lars_path
sin proporcionarX
ey
. #11699 por Kuai Yu.Efficiency
linear_model.make_dataset
ahora preserva los dtypesfloat32
yfloat64
, 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.LogisticRegression
ahora admite un objetivo no regularizado cuando se pasapenalty='none'
. Esto es equivalente a establecerC=np.inf
con regularización l2. No es compatible con el solucionador liblinear. #12860 por Nicolas Hug.Enhancement El solucionador
sparse_cg
enlinear_model.Ridge
ahora 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 unConvergenceWarning
cuando 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.LogisticRegression
ylinear_model.LogisticRegressionCV
con 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=False
en la creación de la instancia era sobreescrita por el valor del parámetro por defectocopy_X=True
en ``fit`. #12972 por Lucio Fernandez-ArjonaFix Se ha corregido un error en
linear_model.LinearRegression
que no devolvía los mismos coeficientes e interceptos confit_intercept=True
en casos dispersos y densos. #13279 por Alexandre GramfortFix Se ha corregido un error en
linear_model.HuberRegressor
que se rompía cuandoX
era de tipo (dtype) bool. #13328 por Alexandre Gramfort.Fix Se ha corregido un problema de rendimiento de los solucionadores
saga
ysag
cuando se invocan en una configuraciónjoblib.Parallel
conn_jobs > 1
ybackend="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.BaseSGDClassifier
que 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.Ridge
ylinear_model.RidgeClassifier
que provocaba una excepción no controlada para los argumentosreturn_intercept=True
ysolver=auto
(por defecto) o cualquier otro solucionador diferente desag
. #13363 por Bartosz TelenczukFix
linear_model.ridge_regression
ahora generará una excepción sireturn_intercept=True
y el solucionador es diferente desag
. Anteriormente, sólo se emitía una advertencia. #13363 by Bartosz TelenczukFix
linear_model.ridge_regression
elegirá el solucionadorsparse_cg
para entradas dispersas cuando se proporcionesolver=auto
ysample_weight
(anteriormente se seleccionaba el solucionadorcholesky
). #13363 by Bartosz TelenczukAPI Change El uso de
linear_model.lars_path
conX=None
al pasarGram
está obsoleto en la versión 0.21 y se eliminará en la versión 0.23. Utilizalinear_model.lars_path_gram
en su lugar. #11699 por Kuai Yu.API Change
linear_model.logistic_regression_path
está obsoleto en la versión 0.21 y se eliminará en la versión 0.23. #12821 por Nicolas Hug.Fix
linear_model.RidgeCV
con validación cruzada dejando uno fuera (leave-one-out) ahora ajusta correctamente un intercepto cuandofit_intercept=True
y la matriz de diseño es dispersa. #13350 by Jérôme Dockès
sklearn.manifold
¶
Efficiency Se hace que
manifold.tsne.trustworthiness
utilice un índice invertido en lugar de una búsquedanp.where
para 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_error
y 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_score
para 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_distances
a la que se puede acceder conmetric='pairwise'
a través demetrics.pairwise_distances
y 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_distances
má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
accuracy
en lugar demicro-average
enmetrics.classification_report
para evitar confusiones.micro-average
só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
beta
ametrics.homogeneity_completeness_v_measure
ymetrics.v_measure_score
para configurar la compensación entre homogeneidad y completitud. #13607 por Stephane Couvreur y y Ivan Sanchez.Fix La métrica
metrics.r2_score
está 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_loss
devolví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_score
por 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
labels
enmetrics.hamming_loss
está 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_score
queda 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.BaseMixture
y, por tanto, en los estimadores basados en ella, es decir,mixture.GaussianMixture
ymixture.BayesianGaussianMixture
, dondefit_predict
yfit.predict
no eran equivalentes. #13142 por Jérémie du Boisberranger.
sklearn.model_selection
¶
Feature Las clases
GridSearchCV
yRandomizedSearchCV
ahora 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_scores
es True yverbose
> 2. Paralearning_curve
, yvalidation_curve
sólo se requiere esta última. #12613 y #12669 por Marc Torrellas.Enhancement Algunas clases de separador de CV y
model_selection.train_test_split
ahora producen unValueError
cuando el conjunto de entrenamiento resultante está vacío. #12861 por Nicolas Hug.Fix Se ha corregido un error por el que
model_selection.StratifiedKFold
revuelve las muestras de cada clase con el mismorandom_state
, haciendo queshuffle=True
sea ineficaz. #13124 por Hanmin Qin.Fix Se ha añadido la posibilidad de que
model_selection.cross_val_predict
maneje objetivos multietiqueta (y multisalida-multiclase) con métodos de tipopredict_proba
. #8773 por Stephen Hoover.Fix Se ha corregido un problema en
cross_val_predict
por el quemethod="predict_proba"
devolvía siempre0.0
cuando 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_function
por 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.MultiOutputClassifier
por el que el métodopredict_proba
comprobaba incorrectamente el atributopredict_proba
en el objeto estimador (estimator). #12222 por Rebekah Kim
sklearn.neighbors
¶
Major Feature Se ha añadido
neighbors.NeighborhoodComponentsAnalysis
para 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_graph
ahora 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.MLPClassifier
yneural_network.MLPRegressor
por el que se ignoraba la opciónshuffle=False
. #12582 por Sam Waterbury.Fix Se ha corregido un error en
neural_network.MLPClassifier
por 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.Pipeline
ahora 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
verbose
enpipeline.Pipeline
,compose.ColumnTransformer
ypipeline.FeatureUnion
y 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.Pipeline
ahora admite el uso de'passthrough'
como transformador, con el mismo efecto queNone
. #11144 por Thomas Fan.Enhancement
pipeline.Pipeline
implementa__len__
y por tantolen(pipeline)
devuelve el número de pasos del pipeline. #13439 por Lakshya KD.
sklearn.preprocessing
¶
Feature
preprocessing.OneHotEncoder
ahora 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.OneHotEncoder
ypreprocessing.OrdinalEncoder
ahora manejan DataFrames de pandas de forma más eficiente. #13253 por @maikia.Efficiency Se hace que
preprocessing.MultiLabelBinarizer
almacene en caché los mapeos de clase en lugar de calcularlas cada vez sobre la marcha. #12116 por Ekaterina Krivich y Joel Nothman.Efficiency
preprocessing.PolynomialFeatures
ahora 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ámetroorder
que 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.QuantileTransformer
ypreprocessing.quantile_transform
para 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
copy
enpreprocessing.quantile_transform
cambiará de False a True en 0.23 para hacerlo más consistente con los valores predeterminados decopy
de otras funciones enpreprocessing
y evitar efectos secundarios inesperados al modificar el valor deX
in place. #13459 por Hunter McGushion.
sklearn.svm
¶
Fix Se ha solucionado un problema en
svm.SVC.decision_function
cuandodecision_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_tree
sin 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.BaseDecisionTree
y, 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.BaseDecisionTree
y, en consecuencia, todos los estimadores basados en él, incluyendotree.DecisionTreeClassifier
,tree.DecisionTreeRegressor
,tree. ExtraTreeClassifier
, ytree.ExtraTreeRegressor
, donde solían exceder elmax_depth
dado en 1 mientras se expandía el árbol simax_leaf_nodes
ymax_depth
eran 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.resample
ahora 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_dtype
deutils.check_array
yutils.check_X_y
. Se ha añadido una advertencia explícita para la conversión de tipos (dtypes) encheck_pairwise_arrays
simetric
que 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_only
ensklearn.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_r
que 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_idempotent
acheck_estimator
, que comprueba que cuando se llama dos veces afit
con los mismos datos, la salida depredict
,predict_proba
,transform
ydecision_function
no 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, ^__^