Scikit-learn: Certifique-se de que todos os atributos sejam documentados

Criado em 12 jul. 2019  ·  79Comentários  ·  Fonte: scikit-learn/scikit-learn

conforme discutido em # 13385, precisamos garantir que todos os atributos sejam documentados.

se quiser trabalhar nisso, você deve escolher um submódulo específico e corrigir todas as incompatibilidades de documentação de atributos nesse submódulo.

Aqui está um script para encontrar os restantes (pode haver alguns 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

Comentários muito úteis

Docstrings de atributos ausentes para cada estimador

Referencie este problema em seu PR

  • [x] ARDRegressão, [interceptar]
  • [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_, interceptar]
  • [x] BernoulliRBM, [h_samples_]
  • [] Birch, [fit_, partial_fit_]
  • [] CCA, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] CheckingClassifier, [classes_]
  • [x] ComplementoNB, [coef_, interceptar_]
  • [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] Análise Fatorial, [média]
  • [] 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] IsotonicRegression, [X_max_, X_min_, f_]
  • [x] IterativeImputer, [random_state_]
  • [x] KNeighboursClassifier, [classes_, eficácia_métrica_, eficácia_métrica_params_, saídas_2d_]
  • [x] KNeighborsRegressor, [eficácia_métrica_, eficácia_métrica_params_]
  • [x] KernelCenterer, [K_fit_all_, K_fit_rows_]
  • [x] KernelDensity, [tree_]
  • [x] KernelPCA, [X_transformed_fit_, dual_coef_]
  • [x] LabelBinarizer, [classes_, sparse_input_, y_type_]
  • [x] LabelEncoder, [classes_]
  • [x] LarsCV, [ativo_]
  • [x] Laço, [dual_gap_]
  • [x] LassoLarsCV, [ativo_]
  • [x] LassoLarsIC, [alphas_]
  • [x] LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
  • [x] Análise Discriminante Linear, [covariância_]
  • [x] Regressão Linear, [classificação_, singular_]
  • [x] LinearSVC, [classes_]
  • [x] LocalOutlierFactor, [eficácia_métrica_, eficácia_métrica_params_]
  • [x] MDS, [dissimilarity_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, [counts_, init_size_, n_iter_]
  • [x] MultiLabelBinarizer, [classes_]
  • [x] MultiTaskElasticNet, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskElasticNetCV, [dual_gap_]
  • [x] MultiTaskLasso, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskLassoCV, [dual_gap_]
  • [x] Centro mais próximo, [classes_]
  • [x] vizinhos mais próximos, [parâmetros_efetivos_, parâmetros_métricos_efetivos_]
  • [x] NeighbourhoodComponentsAnalysis, [random_state_]
  • [x] NuSVC, [class_weight_, fit_status_, probA_, probB_, shape_fit_]
  • [] NuSVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] OAS, [local_]
  • [] 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_]
  • [] PLSCanônico, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] PLSRegression, [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] Análise Discriminante Quadrática, [classes_, covariância_]
  • [x] RBFSampler, [random_offset_, random_weights_]
  • [] RFE, [classes_]
  • [] RFECV, [classes_]
  • [x] RadiusNeighsClassifier, [classes_, eficácia_métrica_, eficácia_métrica_params_, saídas_2d_]
  • [x] RadiusNeighborsRegressor, [eficácia_métrica_, eficácia_métrica_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, [classes_]
  • [x] RidgeClassifierCV, [cv_values_]
  • [x] SGDClassifier, [classes_, t_]
  • [x] SGDRegressor, [coeficiente_médio_, intercept_médio_]
  • [x] SVC, [class_weight_, shape_fit_]
  • [] SVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] SelectKBest, [pvalues_, scores_]
  • [x] ShrunkCovariance, [redução]
  • [x] SkewedChi2Sampler, [random_offset_, random_weights_]
  • [x] SparseRandomProjection, [componentes_, densidade_]
  • [x] SpectralEmbedding, [n_neighbors_]
  • [x] TfidfVectorizer, [stop_words_, vocabulary_]

Todos 79 comentários

Já encontrei pelo menos uma incompatibilidade na documentação do atributo na descrição da classe NMF. Acho que posso aceitar um pouco desse trabalho. Estou quase pronto para propor algumas mudanças nos submódulos decomposition e random_projection .

Docstrings de atributos ausentes para cada estimador

Referencie este problema em seu PR

  • [x] ARDRegressão, [interceptar]
  • [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_, interceptar]
  • [x] BernoulliRBM, [h_samples_]
  • [] Birch, [fit_, partial_fit_]
  • [] CCA, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] CheckingClassifier, [classes_]
  • [x] ComplementoNB, [coef_, interceptar_]
  • [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] Análise Fatorial, [média]
  • [] 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] IsotonicRegression, [X_max_, X_min_, f_]
  • [x] IterativeImputer, [random_state_]
  • [x] KNeighboursClassifier, [classes_, eficácia_métrica_, eficácia_métrica_params_, saídas_2d_]
  • [x] KNeighborsRegressor, [eficácia_métrica_, eficácia_métrica_params_]
  • [x] KernelCenterer, [K_fit_all_, K_fit_rows_]
  • [x] KernelDensity, [tree_]
  • [x] KernelPCA, [X_transformed_fit_, dual_coef_]
  • [x] LabelBinarizer, [classes_, sparse_input_, y_type_]
  • [x] LabelEncoder, [classes_]
  • [x] LarsCV, [ativo_]
  • [x] Laço, [dual_gap_]
  • [x] LassoLarsCV, [ativo_]
  • [x] LassoLarsIC, [alphas_]
  • [x] LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
  • [x] Análise Discriminante Linear, [covariância_]
  • [x] Regressão Linear, [classificação_, singular_]
  • [x] LinearSVC, [classes_]
  • [x] LocalOutlierFactor, [eficácia_métrica_, eficácia_métrica_params_]
  • [x] MDS, [dissimilarity_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, [counts_, init_size_, n_iter_]
  • [x] MultiLabelBinarizer, [classes_]
  • [x] MultiTaskElasticNet, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskElasticNetCV, [dual_gap_]
  • [x] MultiTaskLasso, [dual_gap_, eps_, sparse_coef_]
  • [x] MultiTaskLassoCV, [dual_gap_]
  • [x] Centro mais próximo, [classes_]
  • [x] vizinhos mais próximos, [parâmetros_efetivos_, parâmetros_métricos_efetivos_]
  • [x] NeighbourhoodComponentsAnalysis, [random_state_]
  • [x] NuSVC, [class_weight_, fit_status_, probA_, probB_, shape_fit_]
  • [] NuSVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] OAS, [local_]
  • [] 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_]
  • [] PLSCanônico, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] PLSRegression, [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] Análise Discriminante Quadrática, [classes_, covariância_]
  • [x] RBFSampler, [random_offset_, random_weights_]
  • [] RFE, [classes_]
  • [] RFECV, [classes_]
  • [x] RadiusNeighsClassifier, [classes_, eficácia_métrica_, eficácia_métrica_params_, saídas_2d_]
  • [x] RadiusNeighborsRegressor, [eficácia_métrica_, eficácia_métrica_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, [classes_]
  • [x] RidgeClassifierCV, [cv_values_]
  • [x] SGDClassifier, [classes_, t_]
  • [x] SGDRegressor, [coeficiente_médio_, intercept_médio_]
  • [x] SVC, [class_weight_, shape_fit_]
  • [] SVR, [class_weight_, fit_status_, n_support_, probA_, probB_, shape_fit_]
  • [x] SelectKBest, [pvalues_, scores_]
  • [x] ShrunkCovariance, [redução]
  • [x] SkewedChi2Sampler, [random_offset_, random_weights_]
  • [x] SparseRandomProjection, [componentes_, densidade_]
  • [x] SpectralEmbedding, [n_neighbors_]
  • [x] TfidfVectorizer, [stop_words_, vocabulary_]

Posso aceitar as incompatibilidades de documentação de atributo do submódulo tree , que incluem:

  • 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_]

Estou trabalhando em LinearRegression, [rank_, singular_].

Estou trabalhando em LinearSVC, [n_iter_] e LinearSVR, [n_iter_]

Vou pegar Gradient boosting ie

  • GradientBoostingClassifier [base_estimator_, max_features_, n_classes_, n_features_]

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

deixa pra lá, leia mal onde os atributos estão faltando e onde não

Parece que também há classes_ attribute não documentado para classificadores do submódulo naive_bayes . Eu comecei a consertar isso.

Vou trabalhar no TfidfVectorizer, [fixed_vocabulary_]

Vou trabalhar em:

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

Eu estou trabalhando em:

  • SGDClassifier, [média_coef_, média_intercept_, standard_coef_, standard_intercept_]
  • SGDRegressor, [standard_coef_, standard_intercept_]

EDIT: abriu um problema para alterar esses atributos de público para privado (referência: # 14364)

Eu estou trabalhando em:
KernelCenterer, [K_fit_all_, K_fit_rows_]
MinMaxScaler, [n_samples_seen_]

Vou trabalhar em:

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

Também descobri que o KNeighborsClassifier , KNeighborsRegressor e possivelmente outras classes do módulo neighbors não possuem documentação de atributos. Atualmente trabalhando em KNeighborsRegressor que tem 2 atributos:

  • effective_metric_
  • effective_metric_params_

A classe KNeighborsClassifier tem quatro atributos:

  • classes_
  • effective_metric_
  • effective_metric_params_
  • outputs_2d_

@alexitkes boa pegada. Obrigado!

Trabalhando na Análise Discriminante Quadrática, [classes_, covariância_]

Trabalhando em KNeighborsClassifier, [classes_, efetivamente_métrica_, efetiva_métrica_params_, saídas_2d_]
RadiusNeighborsClassifier, [classes_, eficácia_métrica_, eficácia_métrica_params_, saídas_2d_]

Trabalhando em:
LinearSVC, [classes_]
NuSVC, [class_weight_, classes_, fit_status_, probA_, probB_, shape_fit_]
SVC, [class_weight_, classes_, shape_fit_]

Trabalhando em:

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

Trabalhando em:

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

Olá eu!! Eu gostaria de ajudar com este .. Alguém pode me dizer por onde devo começar?

Estamos trabalhando nas funções em dict_learning.py @spbail

Trabalhando em LinearDiscriminantAnalysis com @ olgadk7

Trabalhando na incompatibilidade de atributos em RidgeClassifierCV @ npatta01

Trabalhando no DecisionTreeRegressor com @ ingrid88 + @ npatta01

Trabalhando em LinearDiscriminantAnalysis com @ olgadk7

Falso positivo para o script de atributo acima. Isso foi documentado.

Trabalhando em AdditiveChi2Sampler com @ olgadk7

Trabalhando no LabelEncoder com @eugeniaft

tentará trabalhar com classificador aleatório!

trabalhando em

Perceptron

trabalhando em BernoulliRBM

Trabalhando no ExtraTreeClassifer

Trabalhando no LabelEncoder com @eugeniaft

LabelEncoder parece não ter incompatibilidade, estamos trabalhando em OneClassSVM

Acho que os regressores de árvore deveriam descontinuar suas classes.

trabalhando em SVR

Trabalhando em:

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

trabalhando em LinearRegression, [rank_, singular_]

trabalhando em LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]

trabalhando em
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_]
Os atributos oob_ são endereços em PR # 14779, n_features_ & base_estimator_ são falsos positivos.

trabalhando em
AdaBoostClassifier, [base_estimator_]

Atualização: já foi corrigido em https://github.com/scikit-learn/scikit-learn/pull/14477

Acho que não devemos recomendar esse problema para os próximos sprints ou usar uma versão muito mais selecionada.

Com base na minha experiência no sprint anterior, ainda há muitos falsos positivos, e acabamos pedindo aos contribuidores que realmente desrespeitem os atributos públicos para torná-los privados, o que é indiscutivelmente muito mais difícil (e pode ser frustrante, pois os contribuidores acham que trabalharam para isso nada).

Ping @amueller @thomasjpfan WDYT?

Acho que não devemos recomendar esse problema para os próximos sprints ou usar uma versão muito mais selecionada.

Talvez se tivéssemos uma ferramenta de validação geral para docstring, como proposta em https://github.com/numpy/numpydoc/issues/213, as coisas seriam um pouco mais fáceis para os contribuidores. Embora eu concorde que isso não aborde totalmente o fato de que alguns atributos são públicos, mas não deveriam ser.

TfidfVectorizer, SpectralEmbedding, SparseRandomProjection são atualizados.

Eu estava pensando em aceitar esse problema como o meu primeiro, mas depois de algumas escolhas aleatórias de submódulos listados por script, as únicas classes que encontrei como documentadas incorretamente são classes PLS *. Mas eles residem no arquivo _pls_.py, que parece não ser público. Devo trabalhar neles ou encontrar outro bom primeiro problema?

Contanto que as aulas reais sejam públicas, elas se qualificam. As classes públicas estão listadas em doc/modules/classes.rst . As aulas PLS * estão lá, então fique à vontade para documentá-las

Faz sentido colocar todos os atributos em ordem alfabética também? Acho que daria estrutura à seção e tornaria a seção mais fácil de ler.

@pwalchessen eu concordo, parece uma boa ideia. Conforme mencionado pessoalmente, eu também acrescentaria isso ao teste.

Eles ainda parecem abertos e meio óbvios:

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_

e mais um monte ...

Lista atualizada de atributos pendentes que precisam ser adicionados.

  • [] BayesianGaussianMixture

    • [x] mean_precision_prior

    • [] mean_precision_prior_

  • [] BayesianRidge

    • [] X_offset_

    • [] X_escala_

  • [] BernoulliNB

    • [] coef_ array

    • [] interceptar

  • [ ] Bétula

    • [ ] em forma_

    • [] partial_fit_

  • [] CCA

    • [] coef_ array, forma (1, n_features) ou (n_classes, n_features); Coeficiente das características na função de decisão.

    • [] x_mean_: array, shape (n_features,) A média sobre os recursos.

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [x] Categórico NB

    • [x] classes_ (classes_: matriz, forma (n_classes,)

      Uma lista de rótulos de classe conhecidos pelo classificador.

  • [] ComplementoNB

    • [] coef_: array, forma (1, n_features) ou (n_classes, n_features); Coeficiente das características na função de decisão.

    • [] interceptar

  • [x] CountVectorizer

    • [x] stop_words_

    • [x] vocabulário_

  • [x] DecisionTreeClassifier

    • [x] feature_importances_

  • [] DecisionTreeRegressor

    • [] classes_: tipo array, forma (n_classes,); Rótulos de classe exclusivos

    • [] n_classes_: int; Número de rótulos de classe exclusivos

    • [x] feature_importances_

  • [] DictVectorizer

    • [] feature_names_

    • [] vocabulário_

  • [] DummyClassifier

    • [] output_2d_

  • [] DummyRegressor

    • [] output_2d_

  • [] ElasticNet

    • [] dual_gap_

    • [] sparse_coef_

  • [] ElasticNetCV

    • [] dual_gap_

  • [] EllipticEnvelope

    • [] dist_

    • [] raw_covariance_

    • [] raw_location_

    • [] raw_support_

  • [] ExtraTreeClassifier

    • [] feature_importances_

  • [] ExtraTreeRegressor

    • [] classes_: tipo array, forma (n_classes,); Rótulos de classe exclusivos

    • [] feature_importances_

    • [] n_classes_: int; Número de rótulos de classe exclusivos

  • [] FeatureAgglomeration

    • [] n_components_

    • [x] distâncias_

  • [] GaussianProcessClassifier

    • [] base_estimator_

    • [x] kernel_

  • [x] GaussianRandomProjection

    • [x] componentes_

  • [] GradientBoostingClassifier

    • [] max_features_

    • [] n_classes_: int; Número de classes exclusivas.

    • [] n_features_: int; Número de recursos usados.

    • [x] oob_improvement_

    • [x] feature_importances_

  • [] GradientBoostingRegressor

    • [] max_features_

    • [] n_classes_: int; Número de classes exclusivas.

    • [] n_estimators_

    • [] n_features_: int; Número de recursos usados.

    • [x] oob_improvement_

    • [x] feature_importances_

  • [] HistGradientBoostingClassifier

    • [] bin_mapper_

    • [ ] Aulas_

    • [] do_early_stopping_

    • [ ] perda_

    • [] n_features_: int; O número de recursos selecionados.

    • [x] n_iter_

    • [] artilheiro_

  • [] HistGradientBoostingRegressor

    • [] bin_mapper_

    • [] do_early_stopping_

    • [ ] perda_

    • [] n_recursos_: int; O número de recursos selecionados.

    • []

    • [] artilheiro_

  • [] IncrementalPCA

    • [ ] tamanho do batch_

  • [] IsolationForest

    • [] base_estimator_

    • [] estimators_features_

    • [x] amostras_estimadores_

    • [] n_features_: int; O número de recursos selecionados.

  • [] KernelCenterer

    • [] K_fit_all_

    • [] K_fit_rows_

  • [] KernelDensity

    • [] árvore_

  • [] LarsCV

    • [ ] ativo_

  • [] Laço

    • [] dual_gap_

    • [x] sparse_coef_

  • [] LassoLarsCV

    • [ ] ativo_

  • [] LassoLarsIC

    • [] alphas_

  • [] LatentDirichletAllocation

    • [x] limite_

    • [x] doc_topic_prior_

    • [] exp_dirichlet_component_

    • [] random_state_

  • [] LocalOutlierFactor

    • [] medição_efetiva_

    • [] parâmetros_métricos_efetivos_

    • [] n_samples_fit_: int; Número de amostras nos dados ajustados.

  • [] MDS

    • [] dissimilarity_matrix_

    • [] n_iter_: int; Número de iterações.

  • [] MLPClassifier

    • [] best_loss_

    • [] loss_curve_

    • [] t_

  • [] MLPRegressor

    • [] best_loss_

    • [] loss_curve_

    • [] t_

  • [] MiniBatchKMeans

    • [] contagens_

    • [] init_size_

    • [] n_iter_: int; Número de iterações.

  • [] MultiTaskElasticNet

    • [] dual_gap_

    • [] eps_

    • [] sparse_coef_

  • [] MultiTaskElasticNetCV

    • [] dual_gap_

  • [] MultiTaskLasso

    • [] dual_gap_

    • [] eps_

    • [] sparse_coef_

  • [] MultiTaskLassoCV

    • [] dual_gap_

  • [] OAS

    • [] localização_

  • [] OneVsRestClassifier

    • [] coef_: array, forma (1, n_features) ou (n_classes, n_features); Coeficiente das características na função de decisão.

    • [] interceptar

    • [] n_classes_: int; Número de classes exclusivas.

  • [] OrthogonalMatchingPursuit

    • [] n_nonzero_coefs_

  • [] PLSCanônico

    • [] coef_: array, forma (1, n_features) ou (n_classes, n_features); Coeficiente das características na função de decisão.

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

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [] PLSRegression

    • [] x_mean_

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [] PLSSVD

    • [] x_mean_

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [] PassiveAggressiveClassifier

    • [] função_da_perda_

  • [] RBFSampler

    • [] random_offset_

    • [] random_weights_

  • [] ShrunkCovariance

    • [] encolhimento

  • [] SkewedChi2Sampler

    • [] random_offset_

    • [] random_weights_

  • [] _BaseRidgeCV

    • [] alpha_

    • [] coef_

    • [] interceptar

  • [] _ConstantPredictor

    • [] y_

  • [] _RidgeGCV

    • [] alpha_

    • [] coef_

    • [] dual_coef_

    • [] interceptar

Vou adicionar feature_importances_ à documentação de ExtraTreeRegressor

Um grupo de especialistas em ciência de dados e eu começaremos a trabalhar na documentação de atributos BayesianRidge, [X_offset_, X_scale_].

Olá, nosso grupo de colaboradores trabalhará em:

  • PLSSVD
  • CCA
  • PCA incremental
  • MiniBatchKMeans
  • Laço

Possíveis correções em # 16826

O teste foi adicionado em # 16286.
No momento, ainda há algumas aulas que são ignoradas:
https://github.com/scikit-learn/scikit-learn/blob/753da1de06a764f264c3f5f4817c9190dbe5e021/sklearn/tests/test_docstring_parameters.py#L180

Alguns deles já têm PRs, portanto, certifique-se de verificar isso antes de começar a trabalhar nisso.

Alguns deles já têm PRs, portanto, certifique-se de verificar isso antes de começar a trabalhar nisso.

Uma boa opção também seria tentar ver os PRs abertos que não foram mesclados e tentar finalizá-los.

Como regra geral, se um RP não tiver alguma atividade por mais de 2 a 3 semanas, é bom tentar assumir e terminar.

Caso você esteja interessado em tal solução, existe uma forma de implementar uma extensão para sphinx que verifica se os parâmetros estão todos documentados ou não incorretos (você pode ver um exemplo aqui: https://github.com/sdpython/pyquickhelper/blob /master/src/pyquickhelper/sphinxext/sphinx_docassert_extension.py). Talvez seja útil adicionar um personalizado à documentação do scikit-learn.

@sdpython , isso seria maravilhoso! Se você não está trabalhando em outra coisa, talvez possa propor um rascunho de RP? Obrigado!

Interessante!

IIRC temos testes comuns que verificam se todos os atributos estão documentados. Ele foi adicionado em https://github.com/scikit-learn/scikit-learn/pull/16286. Também me lembro que mne-python tinha algo semelhante.

Não tenho uma opinião informada sobre qual abordagem é preferível, mas diria que documentar os parâmetros ausentes é provavelmente uma prioridade mais alta do que decidir como queremos fazer a verificação.

O problema de fazer isso na esfinge que, em nosso caso, construir uma documentação leva muito tempo (devido à geração de todos os exemplos), portanto, um teste de unidade ou ferramenta autônoma seria mais fácil de usar. Observe que já usamos a validação numpydoc em https://github.com/scikit-learn/scikit-learn/issues/15440 e alguma validação da docstring com anotações de tipo pode ser feita com https://github.com/terrencepreilly / darglint. Portanto, provavelmente devemos evitar a situação de usar 5 ferramentas de validação diferentes para docstrings também :)

Gosto da capacidade de usar o pytest para verificar os resultados, por exemplo:

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

então talvez não seja necessário alterar a construção da nossa esfinge para isso.

Eu verifiquei quais docstrings de atributo ainda estão faltando (a lista acima está desatualizada). Estes são os que encontrei:

BayesianGaussianMixture, [mean_precision_prior]
BayesianRidge, [X_offset_, X_scale_]
BernoulliNB, [coef_, intercept_]
Vidoeiro, [ajuste_, ajuste_parcial_]
CCA, [x_mean_, x_std_, y_mean_, y_std_]
DecisionTreeRegressor, [classes_, n_classes_]
DummyClassifier, [output_2d_]
DummyRegressor, [output_2d_]
ElasticNet, [dual_gap_]
ElasticNetCV, [dual_gap_]
ExtraTreeRegressor, [classes_, n_classes_]
FeatureAgglomeration, [n_components_]
LarsCV, [ativo_]
Lasso, [dual_gap_]
LassoLarsCV, [active_]
LassoLarsIC, [alphas_]
MiniBatchKMeans, [counts_, 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_]
PLSCanônico, [x_mean_, x_std_, y_mean_, y_std_]
PLSSVD, [x_mean_, x_std_, y_mean_, y_std_]
SVR, [probA_, probB_]

Obrigado @marenwestermann!

Estou trabalhando no MiniBatchKMeans

Estou trabalhando no Lasso.

Agora estou trabalhando para adicionar o atributo sparse_coef_ a MultiTaskElasticNet e MultiTaskLasso.

Estou trabalhando no LarsCV.

@thomasjpfan é dito nas classes SVR e OneClassSVM :
"O atributo probA_ está obsoleto na versão 0.23 e será removido na versão 0.25." e
"O atributo probB_ está obsoleto na versão 0.23 e será removido na versão 0.25."

Portanto, esses atributos provavelmente não precisam mais de documentação, certo?
A partir daqui, esses dois atributos também serão obsoletos na classe NuSVR ?

Os atributos classes_ e n_classes_ para ExtraTreeRegressor são falsos positivos.

Portanto, esses atributos provavelmente não precisam mais de documentação, certo?
A partir daqui, esses dois atributos também serão preteridos na classe NuSVR?

Uma vez que os estamos descontinuando, eu diria que não precisaríamos documentá-los.

Os atributos classes_ e n_classes_ para ExtraTreeRegressor são falsos positivos.

Sim, eles devem ser descontinuados e removidos, se ainda não estiverem.

A classe DecisionTreeRegressor diz:
"o atributo n_classes_ deve ser descontinuado da versão 0.22 e será removido na 0.24."
"o atributo classes_ deve ser descontinuado da versão 0.22 e será removido na 0.24."

Portanto, esses atributos também não precisam de documentação, certo?

Portanto, esses atributos também não precisam de documentação, certo?

Certo @Abilityguy , obrigado por apontar isso.

Posso ver abaixo a incompatibilidade em _RidgeGCV:
Erro de docstring: incompatibilidade de atributo em _RidgeGCV
alfa_
melhor pontuação_
coef_
dual_coef_
interceptar_
n_features_in_

e em _BaseRidgeCV:
Erro de docstring: incompatibilidade de atributo em _BaseRidgeCV
alfa_
melhor pontuação_
coef_
interceptar_
n_features_in_

Posso pegar? Eu sou o primeiro temporizador e quero contribuir.

@marenwestermann na classe FeatureAgglomeration, é dito que, na versão 0.21, n_connected_components_ foi adicionado para substituir n_components_, então n_components_ seria falso positivo certo ..?

@ srivathsa729 do meu entendimento, sim. No entanto, seria bom se um dos desenvolvedores principais pudesse verificar novamente.

Vou pegar o ElasticNet

A documentação dos atributos X_offset_ e X_scale_ para BayesianRidge foi adicionada com # 18607.

O atributo output_2d_ está obsoleto em DummyClassifier e DummyRegressor (consulte # 14933).

Eu executei o script fornecido por @amueller no topo deste PR (o código precisa ser ligeiramente modificado porque as coisas mudaram). Não consegui encontrar mais nenhum atributo que precise ser documentado, com exceção de n_features_in_ que vejo que foi introduzido em # 16112. Este atributo não está documentado em todas as classes às quais foi introduzido. Deve ser documentado?
ping @NicolasHug

Esta página foi útil?
0 / 5 - 0 avaliações