Scikit-learn: Asegúrese de que todos los atributos estén documentados

Creado en 12 jul. 2019  ·  79Comentarios  ·  Fuente: scikit-learn/scikit-learn

como se discutió en # 13385, necesitamos asegurarnos de que todos los atributos estén documentados.

si desea trabajar en esto, debe elegir un submódulo específico y corregir todas las discrepancias en la documentación de atributos en ese submódulo.

Aquí hay un script para encontrar los restantes (puede haber algunos falsos positivos):

import numpy as np
from sklearn.base import clone
from sklearn.utils.testing import all_estimators
from sklearn.utils.estimator_checks import pairwise_estimator_convert_X, enforce_estimator_tags_y
from numpydoc import docscrape

ests = all_estimators()

for name, Est in ests:
    try:
        estimator_orig = Est()
    except:
        continue
    rng = np.random.RandomState(0)
    X = pairwise_estimator_convert_X(rng.rand(40, 10), estimator_orig)
    X = X.astype(object)
    y = (X[:, 0] * 4).astype(np.int)
    est = clone(estimator_orig)
    y = enforce_estimator_tags_y(est, y)
    try:
        est.fit(X, y)
    except:
        continue
    fitted_attrs = [(x, getattr(est, x, None))
                    for x in est.__dict__.keys() if x.endswith("_")
                    and not x.startswith("_")]
    doc = docscrape.ClassDoc(type(est))
    doc_attributes = []
    incorrect = []
    for att_name, type_definition, param_doc in doc['Attributes']:
        if not type_definition.strip():
            if ':' in att_name and att_name[:att_name.index(':')][-1:].strip():
                incorrect += [name +
                              ' There was no space between the param name and '
                              'colon (%r)' % att_name]
            elif name.rstrip().endswith(':'):
                incorrect += [name +
                              ' Parameter %r has an empty type spec. '
                              'Remove the colon' % (att_name.lstrip())]

        if '*' not in att_name:
            doc_attributes.append(att_name.split(':')[0].strip('` '))
    assert incorrect == []
    fitted_attrs_names = [x[0] for x in fitted_attrs]

    bad = sorted(list(set(fitted_attrs_names) ^ set(doc_attributes)))
    if len(bad) > 0:
        msg = '{}\n'.format(name) + '\n'.join(bad)
        print("Docstring Error: Attribute mismatch in " + msg)


Documentation Easy good first issue help wanted

Comentario más útil

Faltan cadenas de documentos de atributos para cada estimador

Haga referencia a este problema en su PR

  • [x] ARDRegresión, [intercept_]
  • [x] AdaBoostClassifier, [base_estimator_]
  • [x] AdaBoostRegressor, [base_estimator_]
  • [x] AdditiveChi2Sampler, [sample_interval_]
  • [x] AgglomerativeClustering, [n_components_] (obsoleto)
  • [x] BaggingClassifier, [n_features_]
  • [x] BaggingRegressor, [base_estimator_, n_features_]
  • [x] BayesianGaussianMixture, [mean_precision_prior, mean_precision_prior_]
  • [x] BayesianRidge, [X_offset_, X_scale_]
  • [x] BernoulliNB, [coef_, intercept_]
  • [x] BernoulliRBM, [h_samples_]
  • [] Abedul, [ajuste_, ajuste_ parcial_]
  • [] CCA, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] CheckingClassifier, [clases_]
  • [x] ComplementoNB, [coef_, intercept_]
  • [x] CountVectorizer, [stop_words_, vocabulary_]
  • [] DecisionTreeRegressor, [classes_, n_classes_]
  • [x] DictVectorizer, [feature_names_, vocabulary_]
  • [] DummyClassifier, [output_2d_]
  • [] DummyRegressor, [output_2d_]
  • [] ElasticNet, [dual_gap_]
  • [] ElasticNetCV, [dual_gap_]
  • [] EllipticEnvelope, [dist_, raw_covariance_, raw_location_, raw_support_]
  • [x] ExtraTreeClassifier, [feature_importances_]
  • [] ExtraTreeRegressor, [classes_, feature_importances_, n_classes_]
  • [x] ExtraTreesClassifier, [base_estimator_]
  • [x] ExtraTreesRegressor, [base_estimator_]
  • [x] FactorAnalysis, [mean_]
  • [] FeatureAgglomeration, [n_components_]
  • [x] GaussianProcessClassifier, [base_estimator_]
  • [x] GaussianRandomProjection, [componentes_]
  • [x] GradientBoostingClassifier, [max_features_, n_classes_, n_features_, oob_improvement_]
  • [x] GradientBoostingRegressor, [max_features_, n_classes_, n_estimators_, n_features_, oob_improvement_]
  • [x] HistGradientBoostingClassifier, [bin_mapper_, classes_, do_early_stopping_, loss_, n_features_, scorer_]
  • [x] HistGradientBoostingRegressor, [bin_mapper_, do_early_stopping_, loss_, n_features_, scorer_]
  • [x] IncrementalPCA, [batch_size_]
  • [x] IsolationForest, [base_estimator_, estimators_features_, n_features_]
  • [x] Regresión isotónica, [X_max_, X_min_, f_]
  • [x] IterativeImputer, [random_state_]
  • [x] KClasificador de vecinos, [clases_, métrico_efectivo_, parámetros_métricos_efectivos_, salidas_2d_]
  • [x] KNeighborsRegressor, [Effect_metric_, Effect_metric_params_]
  • [x] KernelCenterer, [K_fit_all_, K_fit_rows_]
  • [x] KernelDensity, [árbol_]
  • [x] KernelPCA, [X_transformed_fit_, dual_coef_]
  • [x] LabelBinarizer, [classes_, sparse_input_, y_type_]
  • [x] LabelEncoder, [clases_]
  • [x] LarsCV, [activo_]
  • [x] Lazo, [dual_gap_]
  • [x] LassoLarsCV, [active_]
  • [x] LassoLarsIC, [alphas_]
  • [x] LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
  • [x] LinearDiscriminantAnalysis, [covarianza_]
  • [x] LinearRegression, [rank_, singular_]
  • [x] LinearSVC, [clases_]
  • [x] LocalOutlierFactor, [Effect_metric_, Effective_metric_params_]
  • [x] MDS, [disimilarity_matrix_, n_iter_]
  • [x] MLPClassifier, [best_loss_, loss_curve_, t_]
  • [x] MLPRegressor, [best_loss_, loss_curve_, t_]
  • [x] MinMaxScaler, [n_samples_seen_]
  • [x] MiniBatchDictionaryLearning, [iter_offset_]
  • [x] MiniBatchKMeans, [count_, init_size_, n_iter_]
  • [x] MultiLabelBinarizer, [clases_]
  • [x] MultiTaskElasticNet, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskElasticNetCV, [dual_gap_]
  • [x] MultiTaskLasso, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskLassoCV, [dual_gap_]
  • [x] Centroide más cercano, [clases_]
  • [x] Vecinos más cercanos, [Effect_metric_, Effect_metric_params_]
  • [x] NeighborhoodComponentsAnalysis, [random_state_]
  • [x] NuSVC, [class_weight_, fit_status_, probA_, probB_, shape_fit_]
  • [] NuSVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] OEA, [ubicación_]
  • [] OneClassSVM, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] OneVsOneClassifier, [n_classes_]
  • [x] OneVsRestClassifier, [coef_, intercept_, n_classes_]
  • [x] OrthogonalMatchingPursuit, [n_nonzero_coefs_]
  • [] PLSCanonical, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] PLSRegresión, [x_mean_, x_std_, y_mean_, y_std_]
  • [] PLSSVD, [x_mean_, x_std_, y_mean_, y_std_]
  • [x] PassiveAggressiveClassifier, [loss_function_, t_]
  • [x] PassiveAggressiveRegressor, [t_]
  • [x] Perceptron, [loss_function_]
  • [x] QuadraticDiscriminantAnalysis, [clases_, covarianza_]
  • [x] RBFSampler, [random_offset_, random_weights_]
  • [] RFE, [clases_]
  • [] RFECV, [clases_]
  • [x] RadiusNeighborsClassifier, [classes_, Effective_metric_, Effective_metric_params_, outputs_2d_]
  • [x] RadiusNeighborsRegressor, [Effect_metric_, Effect_metric_params_]
  • [x] RandomForestClassifier, [oob_decision_function_, oob_score_]
  • [x] RandomForestRegressor, [oob_prediction_, oob_score_]
  • [x] RandomTreesEmbedding, [base_estimator_, feature_importances_, n_features_, n_outputs_, one_hot_encoder_]
  • [x] RidgeCV, [cv_values_]
  • [x] RidgeClassifier, [clases_]
  • [x] RidgeClassifierCV, [cv_values_]
  • [x] SGDClassifier, [classes_, t_]
  • [x] SGDRegressor, [average_coef_, average_intercept_]
  • [x] SVC, [class_weight_, shape_fit_]
  • [] SVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] SelectKBest, [pvalues_, scores_]
  • [x] ShrunkCovariance, [contracción]
  • [x] SkewedChi2Sampler, [random_offset_, random_weights_]
  • [x] SparseRandomProjection, [componentes_, densidad_]
  • [x] SpectralEmbedding, [n_neighbors_]
  • [x] TfidfVectorizer, [stop_words_, vocabulary_]

Todos 79 comentarios

Ya encontré al menos una falta de coincidencia en la documentación de atributos en la descripción de la clase NMF. Creo que puedo hacer algo de este trabajo. Estoy casi listo para proponer algunos cambios dentro de los submódulos decomposition y random_projection .

Faltan cadenas de documentos de atributos para cada estimador

Haga referencia a este problema en su PR

  • [x] ARDRegresión, [intercept_]
  • [x] AdaBoostClassifier, [base_estimator_]
  • [x] AdaBoostRegressor, [base_estimator_]
  • [x] AdditiveChi2Sampler, [sample_interval_]
  • [x] AgglomerativeClustering, [n_components_] (obsoleto)
  • [x] BaggingClassifier, [n_features_]
  • [x] BaggingRegressor, [base_estimator_, n_features_]
  • [x] BayesianGaussianMixture, [mean_precision_prior, mean_precision_prior_]
  • [x] BayesianRidge, [X_offset_, X_scale_]
  • [x] BernoulliNB, [coef_, intercept_]
  • [x] BernoulliRBM, [h_samples_]
  • [] Abedul, [ajuste_, ajuste_ parcial_]
  • [] CCA, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] CheckingClassifier, [clases_]
  • [x] ComplementoNB, [coef_, intercept_]
  • [x] CountVectorizer, [stop_words_, vocabulary_]
  • [] DecisionTreeRegressor, [classes_, n_classes_]
  • [x] DictVectorizer, [feature_names_, vocabulary_]
  • [] DummyClassifier, [output_2d_]
  • [] DummyRegressor, [output_2d_]
  • [] ElasticNet, [dual_gap_]
  • [] ElasticNetCV, [dual_gap_]
  • [] EllipticEnvelope, [dist_, raw_covariance_, raw_location_, raw_support_]
  • [x] ExtraTreeClassifier, [feature_importances_]
  • [] ExtraTreeRegressor, [classes_, feature_importances_, n_classes_]
  • [x] ExtraTreesClassifier, [base_estimator_]
  • [x] ExtraTreesRegressor, [base_estimator_]
  • [x] FactorAnalysis, [mean_]
  • [] FeatureAgglomeration, [n_components_]
  • [x] GaussianProcessClassifier, [base_estimator_]
  • [x] GaussianRandomProjection, [componentes_]
  • [x] GradientBoostingClassifier, [max_features_, n_classes_, n_features_, oob_improvement_]
  • [x] GradientBoostingRegressor, [max_features_, n_classes_, n_estimators_, n_features_, oob_improvement_]
  • [x] HistGradientBoostingClassifier, [bin_mapper_, classes_, do_early_stopping_, loss_, n_features_, scorer_]
  • [x] HistGradientBoostingRegressor, [bin_mapper_, do_early_stopping_, loss_, n_features_, scorer_]
  • [x] IncrementalPCA, [batch_size_]
  • [x] IsolationForest, [base_estimator_, estimators_features_, n_features_]
  • [x] Regresión isotónica, [X_max_, X_min_, f_]
  • [x] IterativeImputer, [random_state_]
  • [x] KClasificador de vecinos, [clases_, métrico_efectivo_, parámetros_métricos_efectivos_, salidas_2d_]
  • [x] KNeighborsRegressor, [Effect_metric_, Effect_metric_params_]
  • [x] KernelCenterer, [K_fit_all_, K_fit_rows_]
  • [x] KernelDensity, [árbol_]
  • [x] KernelPCA, [X_transformed_fit_, dual_coef_]
  • [x] LabelBinarizer, [classes_, sparse_input_, y_type_]
  • [x] LabelEncoder, [clases_]
  • [x] LarsCV, [activo_]
  • [x] Lazo, [dual_gap_]
  • [x] LassoLarsCV, [active_]
  • [x] LassoLarsIC, [alphas_]
  • [x] LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
  • [x] LinearDiscriminantAnalysis, [covarianza_]
  • [x] LinearRegression, [rank_, singular_]
  • [x] LinearSVC, [clases_]
  • [x] LocalOutlierFactor, [Effect_metric_, Effective_metric_params_]
  • [x] MDS, [disimilarity_matrix_, n_iter_]
  • [x] MLPClassifier, [best_loss_, loss_curve_, t_]
  • [x] MLPRegressor, [best_loss_, loss_curve_, t_]
  • [x] MinMaxScaler, [n_samples_seen_]
  • [x] MiniBatchDictionaryLearning, [iter_offset_]
  • [x] MiniBatchKMeans, [count_, init_size_, n_iter_]
  • [x] MultiLabelBinarizer, [clases_]
  • [x] MultiTaskElasticNet, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskElasticNetCV, [dual_gap_]
  • [x] MultiTaskLasso, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskLassoCV, [dual_gap_]
  • [x] Centroide más cercano, [clases_]
  • [x] Vecinos más cercanos, [Effect_metric_, Effect_metric_params_]
  • [x] NeighborhoodComponentsAnalysis, [random_state_]
  • [x] NuSVC, [class_weight_, fit_status_, probA_, probB_, shape_fit_]
  • [] NuSVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] OEA, [ubicación_]
  • [] OneClassSVM, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] OneVsOneClassifier, [n_classes_]
  • [x] OneVsRestClassifier, [coef_, intercept_, n_classes_]
  • [x] OrthogonalMatchingPursuit, [n_nonzero_coefs_]
  • [] PLSCanonical, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] PLSRegresión, [x_mean_, x_std_, y_mean_, y_std_]
  • [] PLSSVD, [x_mean_, x_std_, y_mean_, y_std_]
  • [x] PassiveAggressiveClassifier, [loss_function_, t_]
  • [x] PassiveAggressiveRegressor, [t_]
  • [x] Perceptron, [loss_function_]
  • [x] QuadraticDiscriminantAnalysis, [clases_, covarianza_]
  • [x] RBFSampler, [random_offset_, random_weights_]
  • [] RFE, [clases_]
  • [] RFECV, [clases_]
  • [x] RadiusNeighborsClassifier, [classes_, Effective_metric_, Effective_metric_params_, outputs_2d_]
  • [x] RadiusNeighborsRegressor, [Effect_metric_, Effect_metric_params_]
  • [x] RandomForestClassifier, [oob_decision_function_, oob_score_]
  • [x] RandomForestRegressor, [oob_prediction_, oob_score_]
  • [x] RandomTreesEmbedding, [base_estimator_, feature_importances_, n_features_, n_outputs_, one_hot_encoder_]
  • [x] RidgeCV, [cv_values_]
  • [x] RidgeClassifier, [clases_]
  • [x] RidgeClassifierCV, [cv_values_]
  • [x] SGDClassifier, [classes_, t_]
  • [x] SGDRegressor, [average_coef_, average_intercept_]
  • [x] SVC, [class_weight_, shape_fit_]
  • [] SVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] SelectKBest, [pvalues_, scores_]
  • [x] ShrunkCovariance, [contracción]
  • [x] SkewedChi2Sampler, [random_offset_, random_weights_]
  • [x] SparseRandomProjection, [componentes_, densidad_]
  • [x] SpectralEmbedding, [n_neighbors_]
  • [x] TfidfVectorizer, [stop_words_, vocabulary_]

Puedo tomar las discrepancias en la documentación del atributo del submódulo tree , que incluye:

  • DecisionTreeRegressor, [classes_, n_classes_]
  • ExtraTreeClassifier, [classes_, max_features_, n_classes_, n_features_, n_outputs_, tree_]
  • ExtraTreeRegressor, [classes_, max_features_, n_classes_, n_features_, n_outputs_, tree_]

Estoy trabajando en LinearRegression, [rank_, singular_].

Estoy trabajando en LinearSVC, [n_iter_] y LinearSVR, [n_iter_]

Tomaré Gradient boosting es decir

  • GradientBoostingClassifier [base_estimator_, max_features_, n_classes_, n_features_]

    • GradientBoostingRegressor [base_estimator_, classes_, max_features_, n_estimators_, n_features_]

no importa, malinterprete dónde faltan atributos y dónde no

Parece que también hay classes_ atributo naive_bayes . Empecé a arreglarlo.

Trabajaré en TfidfVectorizer, [fixed_vocabulary_]

Trabajaré en:

  • RandomForestClassifier, [base_estimator_]
  • RandomForestRegressor, [base_estimator_, n_classes_]
  • ExtraTreesClassifier, [base_estimator_]
  • ExtraTreesRegressor, [base_estimator_, n_classes_]

Estoy trabajando en eso:

  • SGDClassifier, [average_coef_, average_intercept_, standard_coef_, standard_intercept_]
  • SGDRegressor, [standard_coef_, standard_intercept_]

EDITAR: abrió un problema para cambiar estos atributos de público a privado (referencia: # 14364)

Estoy trabajando en:
KernelCenterer, [K_fit_all_, K_fit_rows_]
MinMaxScaler, [n_samples_seen_]

Trabajaré en:

  • RandomTreesEmbedding, [base_estimator_, classes_, feature_importances_, n_classes_, n_features_, n_outputs_, one_hot_encoder_]

También he descubierto que el módulo KNeighborsClassifier , KNeighborsRegressor y posiblemente otras clases del módulo neighbors no tienen documentación de atributos en absoluto. Actualmente trabajando en KNeighborsRegressor que tiene 2 atributos:

  • effective_metric_
  • effective_metric_params_

La clase KNeighborsClassifier tiene cuatro atributos:

  • classes_
  • effective_metric_
  • effective_metric_params_
  • outputs_2d_

@alexitkes buena captura. ¡Gracias!

Trabajando en QuadraticDiscriminantAnalysis, [classes_, covariance_]

Trabajando en KNeighborsClassifier, [classes_, Effective_metric_, Effective_metric_params_, outputs_2d_]
RadiusNeighborsClassifier, [classes_, Effect_metric_, Effect_metric_params_, outputs_2d_]

Trabajando en:
LinearSVC, [clases_]
NuSVC, [class_weight_, classes_, fit_status_, probA_, probB_, shape_fit_]
SVC, [class_weight_, classes_, shape_fit_]

Trabajando en:

  • [] BaggingClassifier, [n_features_, oob_decision_function_, oob_score_]
  • [] BaggingRegressor, [base_estimator_, n_features_, oob_prediction_, oob_score_]
  • [] AdaBoostClassifier, [base_estimator_]
  • [] AdaBoostRegressor, [base_estimator_]

Trabajando en:

CountVectorizer, [stop_words_, vocabulary_]
DictVectorizer, [feature_names_, vocabulary_]

¡¡Hola yo!! Me gustaría ayudar con este .. ¿Alguien puede decirme por dónde debo empezar?

Estamos trabajando en las funciones en dict_learning.py @spbail

Trabajando en LinearDiscriminantAnalysis con @ olgadk7

Trabajando en la discrepancia de atributos en RidgeClassifierCV @ npatta01

Trabajando en DecisionTreeRegressor con @ ingrid88 + @ npatta01

Trabajando en LinearDiscriminantAnalysis con @ olgadk7

Falso positivo para el script de atributo anterior. Esto ha sido documentado.

Trabajando en AdditiveChi2Sampler con @ olgadk7

Trabajando en LabelEncoder con @eugeniaft

intentará trabajar en randomtreeclassifier!

trabajando en

Perceptrón

trabajando en BernoulliRBM

Trabajando en ExtraTreeClassifer

Trabajando en LabelEncoder con @eugeniaft

LabelEncoder parece que no coincide, estamos trabajando en OneClassSVM

Creo que los regresores de árboles deberían desaprobar sus clases.

trabajando en SVR

Trabajando en:

  • OneVsOneClassifier, [n_classes_]
  • OneVsRestClassifier, [coef_, intercept_, n_classes_]

trabajando en LinearRegression, [rank_, singular_]

trabajando en LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]

trabajando en
BaggingClassifier, [n_features_, oob_decision_function_, oob_score_]
BaggingRegressor, [base_estimator_, n_features_, oob_prediction_, oob_score_]

BaggingClassifier, [n_features_, oob_decision_function_, oob_score_]
BaggingRegressor, [base_estimator_, n_features_, oob_prediction_, oob_score_]
Los atributos oob_ son direcciones en PR # 14779, n_features_ & base_estimator_ son falsos positivos.

trabajando en
AdaBoostClassifier, [base_estimator_]

Actualización: ya se corrigió en https://github.com/scikit-learn/scikit-learn/pull/14477

Creo que no deberíamos recomendar este problema para los próximos sprints o usar una versión mucho más curada.

Según mi experiencia en el sprint anterior, todavía hay muchos falsos positivos, y terminamos pidiendo a los colaboradores que desaprueben los atributos públicos para convertirlos en privados, lo cual es posiblemente mucho más difícil (y puede ser frustrante ya que los colaboradores sienten que trabajaron para nada).

Ping @amueller @thomasjpfan WDYT?

Creo que no deberíamos recomendar este problema para los próximos sprints o usar una versión mucho más curada.

Quizás si tuviéramos una herramienta de validación general para cadenas de documentos como la propuesta en https://github.com/numpy/numpydoc/issues/213, las cosas serían un poco más fáciles para los contribuyentes. Aunque estoy de acuerdo en que no aborda completamente el hecho de que algunos atributos son públicos mientras que no deberían serlo.

TfidfVectorizer, SpectralEmbedding, SparseRandomProjection se actualizan.

Me preguntaba si tomaría ese problema como el primero, pero después de una selección aleatoria de submódulos enumerados por script, las únicas clases que encontré como incorrectamente documentadas son las clases PLS *. Pero viven en el archivo _pls_.py, que parece no ser público. ¿Debería trabajar en ellos o buscar otro buen primer número?

Siempre que las clases reales sean públicas, califican. Las clases públicas se enumeran en doc/modules/classes.rst . Las clases PLS * están ahí, así que no dude en documentarlas

¿Tiene sentido ordenar alfabéticamente todos los atributos también? Creo que proporcionaría estructura a la sección y la haría más fácil de leer.

@pwalchessen Estoy de acuerdo, parece una buena idea. Como se mencionó en persona, también agregaría eso a la prueba.

Estos parecen todavía abiertos y un poco obvios:

Docstring Error: Attribute mismatch in RidgeCV
cv_values_
Docstring Error: Attribute mismatch in RidgeClassifier
classes_
Docstring Error: Attribute mismatch in RidgeClassifierCV
classes_
cv_values_
Docstring Error: Attribute mismatch in SkewedChi2Sampler
random_offset_
random_weights_
Docstring Error: Attribute mismatch in PLSCanonical
coef_
x_mean_
x_std_
y_mean_
y_std_
Docstring Error: Attribute mismatch in PLSRegression
x_mean_
x_std_
y_mean_
y_std_
Docstring Error: Attribute mismatch in PLSSVD
x_mean_
x_std_
y_mean_
y_std_
Docstring Error: Attribute mismatch in PassiveAggressiveClassifier
loss_function_
Docstring Error: Attribute mismatch in Perceptron
loss_function_
Docstring Error: Attribute mismatch in PolynomialFeatures
powers_
Docstring Error: Attribute mismatch in QuadraticDiscriminantAnalysis
covariance_
Docstring Error: Attribute mismatch in RBFSampler
random_offset_
random_weights_
Docstring Error: Attribute mismatch in RadiusNeighborsClassifier
n_samples_fit_
outlier_label_
Docstring Error: Attribute mismatch in RadiusNeighborsRegressor
n_samples_fit_
Docstring Error: Attribute mismatch in RadiusNeighborsTransformer
effective_metric_
effective_metric_params_
n_samples_fit_
Docstring Error: Attribute mismatch in ElasticNet
dual_gap_
sparse_coef_
Docstring Error: Attribute mismatch in ElasticNetCV
dual_gap_
Docstring Error: Attribute mismatch in EllipticEnvelope
dist_
raw_covariance_
raw_location_
raw_support_

y un montón más ...

Lista actualizada de atributos destacados que deben agregarse.

  • [] BayesianGaussianMixture

    • [x] mean_precision_prior

    • [] mean_precision_prior_

  • [] Cresta Bayesiana

    • [] Desplazamiento_X_

    • [] X_scale_

  • [] BernoulliNB

    • [] coef_ array

    • [] interceptar_

  • [] Abedul

    • [] fit_

    • [] ajuste_parcial_

  • [] CCA

    • [] coef_ array, shape (1, n_features) o (n_classes, n_features); Coeficiente de las características en la función de decisión.

    • [] x_mean_: matriz, forma (n_features,) La media sobre las características.

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [x] CategoricalNB

    • [x] clases_ (clases_: matriz, forma (n_clases,)

      Una lista de etiquetas de clase conocidas por el clasificador.

  • [] ComplementoNB

    • [] coef_: matriz, forma (1, n_features) o (n_classes, n_features); Coeficiente de las características en la función de decisión.

    • [] interceptar_

  • [x] CountVectorizer

    • [x] stop_words_

    • [x] vocabulario_

  • [x] DecisionTreeClassifier

    • [x] feature_importances_

  • [] DecisionTreeRegressor

    • [] clases_: tipo matriz, forma (n_clases,); Etiquetas de clase únicas

    • [] n_clases_: int; Número de etiquetas de clase únicas

    • [x] feature_importances_

  • [] DictVectorizer

    • [] feature_names_

    • [ ] vocabulario_

  • [] DummyClassifier

    • [] output_2d_

  • [] DummyRegressor

    • [] output_2d_

  • [] ElasticNet

    • [] dual_gap_

    • [] sparse_coef_

  • [] ElasticNetCV

    • [] dual_gap_

  • [] Sobre elíptico

    • [] dist_

    • [] raw_covariance_

    • [] raw_location_

    • [] raw_support_

  • [] ExtraTreeClassifier

    • [] feature_importances_

  • [] ExtraTreeRegressor

    • [] clases_: tipo matriz, forma (n_clases,); Etiquetas de clase únicas

    • [] feature_importances_

    • [] n_clases_: int; Número de etiquetas de clase únicas

  • [] FeatureAgglomeration

    • [] n_componentes_

    • [x] distancias_

  • [] GaussianProcessClassifier

    • [] estimador_base_

    • [x] kernel_

  • [x] Proyección aleatoria gaussiana

    • [x] componentes_

  • [] GradientBoostingClassifier

    • [] max_features_

    • [] n_clases_: int; Número de clases únicas.

    • [] n_features_: int; Número de funciones utilizadas.

    • [x] mejora_oob_

    • [x] feature_importances_

  • [] GradientBoostingRegressor

    • [] max_features_

    • [] n_clases_: int; Número de clases únicas.

    • [] n_estimators_

    • [] n_features_: int; Número de funciones utilizadas.

    • [x] mejora_oob_

    • [x] feature_importances_

  • [] HistGradientBoostingClassifier

    • [] bin_mapper_

    • [] clases_

    • [] do_early_stopping_

    • [] pérdida_

    • [] n_features_: int; El número de funciones seleccionadas.

    • [x] n_iter_

    • [] goleador_

  • [] HistGradientBoostingRegressor

    • [] bin_mapper_

    • [] do_early_stopping_

    • [] pérdida_

    • [] n_features_: int; El número de funciones seleccionadas.

    • []

    • [] goleador_

  • [] IncrementalPCA

    • [ ] tamaño del lote_

  • [] IsolationForest

    • [] estimador_base_

    • [] estimators_features_

    • [x] estimadores_muestras_

    • [] n_features_: int; El número de funciones seleccionadas.

  • [] KernelCenterer

    • [] K_fit_all_

    • [] K_fit_rows_

  • [] KernelDensity

    • [] árbol_

  • [] LarsCV

    • [] activo_

  • [] Lazo

    • [] dual_gap_

    • [x] sparse_coef_

  • [] LassoLarsCV

    • [] activo_

  • [] LassoLarsIC

    • [] alphas_

  • [] LatentDirichletAllocation

    • [x] límite_

    • [x] doc_topic_prior_

    • [] exp_dirichlet_component_

    • [] random_state_

  • [] LocalOutlierFactor

    • [] métrico_efectivo_

    • [] Effective_metric_params_

    • [] n_samples_fit_: int; Número de muestras en los datos ajustados.

  • [] MDS

    • [] disimilarity_matrix_

    • [] n_iter_: int; Número de iteraciones.

  • [] MLPClassifier

    • [] best_loss_

    • [] loss_curve_

    • [] t_

  • [] MLPRegressor

    • [] best_loss_

    • [] loss_curve_

    • [] t_

  • [] MiniBatchKMeans

    • [] cuenta_

    • [] init_size_

    • [] n_iter_: int; Número de iteraciones.

  • [] MultiTaskElasticNet

    • [] dual_gap_

    • [] eps_

    • [] sparse_coef_

  • [] MultiTaskElasticNetCV

    • [] dual_gap_

  • [] MultiTaskLasso

    • [] dual_gap_

    • [] eps_

    • [] sparse_coef_

  • [] MultiTaskLassoCV

    • [] dual_gap_

  • [] OEA

    • [ ] ubicación_

  • [] OneVsRestClassifier

    • [] coef_: matriz, forma (1, n_features) o (n_classes, n_features); Coeficiente de las características en la función de decisión.

    • [] interceptar_

    • [] n_clases_: int; Número de clases únicas.

  • [] OrthogonalMatchingPursuit

    • [] n_nonzero_coefs_

  • [] PLSCanonical

    • [] coef_: matriz, forma (1, n_features) o (n_classes, n_features); Coeficiente de las características en la función de decisión.

    • [] x_mean_: float ???; Significado de

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [] PLSRegresión

    • [] x_mean_

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [] PLSSVD

    • [] x_mean_

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [] PassiveAggressiveClassifier

    • [ ] función de pérdida_

  • [] RBFSampler

    • [] desplazamiento_aleatorio_

    • [] pesos_aleatorios_

  • [] ShrunkCovariance

    • [] encogimiento

  • [] SkewedChi2Sampler

    • [] desplazamiento_aleatorio_

    • [] pesos_aleatorios_

  • [] _BaseRidgeCV

    • [] alpha_

    • [] coef_

    • [] interceptar_

  • [] _ConstantPredictor

    • [] y_

  • [] _RidgeGCV

    • [] alpha_

    • [] coef_

    • [] dual_coef_

    • [] interceptar_

Voy a agregar feature_importances_ a la documentación por ExtraTreeRegressor

Un grupo de especialistas en ciencia de datos y yo comenzaremos a trabajar en la documentación del atributo BayesianRidge, [X_offset_, X_scale_].

Hola, nuestro grupo de colaboradores estará trabajando en:

  • PLSSVD
  • CCA
  • PCA incremental
  • MiniBatchKMeans
  • Lazo

Posibles correcciones en # 16826

La prueba se agregó en # 16286.
Actualmente, todavía hay un par de clases que se omiten:
https://github.com/scikit-learn/scikit-learn/blob/753da1de06a764f264c3f5f4817c9190dbe5e021/sklearn/tests/test_docstring_parameters.py#L180

Algunos de estos ya tienen RP, así que asegúrese de verificarlo antes de comenzar a trabajar en él.

Algunos de estos ya tienen RP, así que asegúrese de verificarlo antes de comenzar a trabajar en él.

Una buena opción también sería intentar buscar RP abiertos que no se hayan fusionado e intentar terminarlos.

Como regla general, si un RP no ha realizado alguna actividad durante más de 2 a 3 semanas, está bien intentar tomar el control e intentar terminarla.

En caso de que esté interesado en dicha solución, hay una manera de implementar una extensión para sphinx que verifica que todos los parámetros estén documentados o no estén mal escritos (puede ver un ejemplo aquí: https://github.com/sdpython/pyquickhelper/blob /master/src/pyquickhelper/sphinxext/sphinx_docassert_extension.py). Tal vez pueda ser útil agregar uno personalizado a la documentación de scikit-learn.

@sdpython , ¡sería maravilloso! Si no está trabajando en otra cosa, ¿quizás podría proponer un borrador de RP? ¡Gracias!

¡Interesante!

IIRC tenemos pruebas comunes que verifican que todos los atributos estén documentados. Se agregó en https://github.com/scikit-learn/scikit-learn/pull/16286. También creo recordar que mne-python tenía algo similar.

No tengo una opinión informada sobre qué enfoque es preferible, pero diría que documentar los parámetros faltantes es probablemente una prioridad más alta que decidir cómo queremos hacer la verificación.

El problema de hacer eso en Sphinx es que, en nuestro caso, la creación de una documentación lleva mucho tiempo (debido a la generación de todos los ejemplos), por lo que una prueba unitaria o una herramienta independiente sería más fácil de usar. Tenga en cuenta que hemos utilizado previamente la validación de numpydoc en https://github.com/scikit-learn/scikit-learn/issues/15440 y se podría realizar alguna validación de la cadena de documentos con anotaciones de tipo con https://github.com/terrencepreilly / darglint. Así que probablemente deberíamos evitar la situación de usar 5 herramientas de validación diferentes para cadenas de documentos también :)

Me gusta la capacidad de usar pytest para verificar los resultados, por ejemplo:

pytest -v  --runxfail -k IsolationForest sklearn/tests/test_docstring_parameters.py

así que tal vez no sea necesario cambiar nuestra estructura de esfinge para esto.

Verifiqué qué cadenas de documentos de atributos aún faltan (la lista anterior no está actualizada). Estos son los que encontré:

BayesianGaussianMixture, [mean_precision_prior]
Cresta Bayesiana, [X_offset_, X_scale_]
BernoulliNB, [coef_, intercept_]
Abedul, [ajuste_, ajuste_ parcial_]
CCA, [x_mean_, x_std_, y_mean_, y_std_]
DecisionTreeRegressor, [classes_, n_classes_]
DummyClassifier, [output_2d_]
DummyRegressor, [salida_2d_]
ElasticNet, [dual_gap_]
ElasticNetCV, [dual_gap_]
ExtraTreeRegressor, [clases_, n_clases_]
FeatureAgglomeration, [n_components_]
LarsCV, [activo_]
Lazo, [dual_gap_]
LassoLarsCV, [active_]
LassoLarsIC, [alphas_]
MiniBatchKMeans, [count_, init_size_, n_iter_]
MultiTaskElasticNet, [dual_gap_, eps_, sparse_coef_]
MultiTaskElasticNetCV, [dual_gap_]
MultiTaskLasso, [dual_gap_, eps_, sparse_coef_]
MultiTaskLassoCV, [dual_gap_]
NuSVR, [probA_, probB_]
OneClassSVM, [probA_, probB_]
OneVsRestClassifier, [coef_, intercept_]
OrthogonalMatchingPursuit, [n_nonzero_coefs_]
PLSCanonical, [x_mean_, x_std_, y_mean_, y_std_]
PLSSVD, [x_mean_, x_std_, y_mean_, y_std_]
SVR, [probA_, probB_]

¡Gracias @marenwestermann!

Estoy trabajando en MiniBatchKMeans

Estoy trabajando en Lasso.

Ahora estoy trabajando para agregar el atributo sparse_coef_ a MultiTaskElasticNet y MultiTaskLasso.

Estoy trabajando en LarsCV.

@thomasjpfan se dice en las clases SVR y OneClassSVM :
"El atributo probA_ está obsoleto en la versión 0.23 y se eliminará en la versión 0.25". y
"El atributo probB_ está obsoleto en la versión 0.23 y se eliminará en la versión 0.25".

Por lo tanto, estos atributos probablemente ya no necesiten documentación, ¿verdad?
A partir de aquí, ¿estos dos atributos también quedarán obsoletos en la clase NuSVR ?

Los atributos classes_ y n_classes_ para ExtraTreeRegressor son falsos positivos.

Por lo tanto, estos atributos probablemente ya no necesiten documentación, ¿verdad?
A partir de aquí, ¿estos dos atributos también quedarán obsoletos en la clase NuSVR?

Dado que los estamos desaprobando, diría que no necesitaríamos documentarlos.

Los atributos classes_ y n_classes_ para ExtraTreeRegressor son falsos positivos.

Sí, esos deberían quedar obsoletos y luego eliminarse si aún no lo están.

La clase DecisionTreeRegressor dice:
"El atributo n_classes_ quedará obsoleto de la versión 0.22 y se eliminará en la 0.24".
"el atributo classes_ será obsoleto de la versión 0.22 y será eliminado en 0.24".

Entonces, estos atributos tampoco necesitan documentación, ¿verdad?

Entonces, estos atributos tampoco necesitan documentación, ¿verdad?

Correcto @Abilityguy , gracias por señalar eso.

Puedo ver una falta de coincidencia a continuación en _RidgeGCV:
Error de cadena de documentos: no coinciden los atributos en _RidgeGCV
alfa_
mejor puntuación_
coef_
dual_coef_
interceptar_
n_features_in_

y en _BaseRidgeCV:
Error de cadena de documentos: no coincide el atributo en _BaseRidgeCV
alfa_
mejor puntuación_
coef_
interceptar_
n_features_in_

¿Puedo tomarlo? Soy primerizo y quiero contribuir.

@marenwestermann en la clase FeatureAgglomeration, se dice que, en la versión 0.21, se agregó n_connected_components_ para reemplazar n_components_, entonces n_components_ sería falso positivo, ¿no?

@ srivathsa729 a mi entender, sí. Sin embargo, sería bueno si uno de los desarrolladores principales pudiera verificarlo.

Tomaré ElasticNet

La documentación de los atributos X_offset_ y X_scale_ para BayesianRidge se ha agregado con # 18607.

El atributo output_2d_ está obsoleto en DummyClassifier y DummyRegressor (ver # 14933).

Ejecuté el script proporcionado por n_features_in_ que veo que se ha introducido en # 16112. Este atributo no está documentado en creo que todas las clases a las que se introdujo. ¿Debería documentarse?
ping @NicolasHug

¿Fue útil esta página
0 / 5 - 0 calificaciones