Scikit-learn: S'assurer que tous les attributs sont documentés

Créé le 12 juil. 2019  ·  79Commentaires  ·  Source: scikit-learn/scikit-learn

comme discuté dans # 13385, nous devons nous assurer que tous les attributs sont documentés.

si vous voulez travailler là-dessus, vous devez choisir un sous-module spécifique et corriger toutes les discordances de documentation d'attributs dans ce sous-module.

Voici un script pour trouver les autres (il peut y avoir des faux positifs):

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

Commentaire le plus utile

Attribut docstrings manquant pour chaque estimateur

Faites référence à ce problème dans votre PR

  • [x] ARDRegression, [intercept_]
  • [x] AdaBoostClassifier, [base_estimator_]
  • [x] AdaBoostRegressor, [base_estimator_]
  • [x] AdditiveChi2Sampler, [sample_interval_]
  • [x] AgglomerativeClustering, [n_components_] (obsolète)
  • [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_]
  • [] Bouleau, [fit_, partial_fit_]
  • [] CCA, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] CheckingClassifier, [classes_]
  • [x] ComplémentNB, [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, [components_]
  • [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] KNeighborsClassifier, [classes_, effective_metric_, effective_metric_params_, sorties_2d_]
  • [x] KNeighborsRegressor, [effective_metric_, effective_metric_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, [active_]
  • [x] Lasso, [dual_gap_]
  • [x] LassoLarsCV, [active_]
  • [x] LassoLarsIC, [alphas_]
  • [x] LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
  • [x] LinearDiscriminantAnalysis, [covariance_]
  • [x] LinearRegression, [rank_, singular_]
  • [x] LinearSVC, [classes_]
  • [x] LocalOutlierFactor, [effective_metric_, effective_metric_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, [count_, 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] NearestCentroid, [classes_]
  • [x] NearestNeighbors, [effective_metric_, effective_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, [location_]
  • [] 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] 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] QuadraticDiscriminantAnalysis, [classes_, covariance_]
  • [x] RBFSampler, [random_offset_, random_weights_]
  • [] RFE, [classes_]
  • [] RFECV, [classes_]
  • [x] RadiusNeighborsClassifier, [classes_, effective_metric_, effective_metric_params_, sorties_2d_]
  • [x] RadiusNeighborsRegressor, [effective_metric_, effective_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, [classes_]
  • [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, [shrinkage]
  • [x] SkewedChi2Sampler, [random_offset_, random_weights_]
  • [x] SparseRandomProjection, [composants_, densité_]
  • [x] SpectralEmbedding, [n_neighbors_]
  • [x] TfidfVectorizer, [stop_words_, vocabulary_]

Tous les 79 commentaires

J'ai déjà trouvé au moins une incompatibilité dans la documentation des attributs dans la description de la classe NMF. Je pense que je peux prendre une partie de ce travail. Je suis presque prêt à proposer des changements dans les sous-modules decomposition et random_projection .

Attribut docstrings manquant pour chaque estimateur

Faites référence à ce problème dans votre PR

  • [x] ARDRegression, [intercept_]
  • [x] AdaBoostClassifier, [base_estimator_]
  • [x] AdaBoostRegressor, [base_estimator_]
  • [x] AdditiveChi2Sampler, [sample_interval_]
  • [x] AgglomerativeClustering, [n_components_] (obsolète)
  • [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_]
  • [] Bouleau, [fit_, partial_fit_]
  • [] CCA, [coef_, x_mean_, x_std_, y_mean_, y_std_]
  • [x] CheckingClassifier, [classes_]
  • [x] ComplémentNB, [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, [components_]
  • [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] KNeighborsClassifier, [classes_, effective_metric_, effective_metric_params_, sorties_2d_]
  • [x] KNeighborsRegressor, [effective_metric_, effective_metric_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, [active_]
  • [x] Lasso, [dual_gap_]
  • [x] LassoLarsCV, [active_]
  • [x] LassoLarsIC, [alphas_]
  • [x] LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
  • [x] LinearDiscriminantAnalysis, [covariance_]
  • [x] LinearRegression, [rank_, singular_]
  • [x] LinearSVC, [classes_]
  • [x] LocalOutlierFactor, [effective_metric_, effective_metric_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, [count_, 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] NearestCentroid, [classes_]
  • [x] NearestNeighbors, [effective_metric_, effective_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, [location_]
  • [] 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] 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] QuadraticDiscriminantAnalysis, [classes_, covariance_]
  • [x] RBFSampler, [random_offset_, random_weights_]
  • [] RFE, [classes_]
  • [] RFECV, [classes_]
  • [x] RadiusNeighborsClassifier, [classes_, effective_metric_, effective_metric_params_, sorties_2d_]
  • [x] RadiusNeighborsRegressor, [effective_metric_, effective_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, [classes_]
  • [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, [shrinkage]
  • [x] SkewedChi2Sampler, [random_offset_, random_weights_]
  • [x] SparseRandomProjection, [composants_, densité_]
  • [x] SpectralEmbedding, [n_neighbors_]
  • [x] TfidfVectorizer, [stop_words_, vocabulary_]

Je peux prendre en charge les incompatibilités de documentation d'attribut du sous-module tree , qui incluent:

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

Je travaille sur LinearRegression, [rank_, singular_].

Je travaille sur LinearSVC, [n_iter_] et LinearSVR, [n_iter_]

Je prendrai Gradient boosting ie

  • GradientBoostingClassifier [base_estimator_, max_features_, n_classes_, n_features_]

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

peu importe, mal lu où les attributs manquent et où pas

Il semble qu'il y ait aussi classes_ attribut naive_bayes . J'ai commencé à le réparer.

Je vais travailler sur TfidfVectorizer, [fixed_vocabulary_]

Je vais travailler sur:

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

Je travaille sur:

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

EDIT: a ouvert un problème pour changer ces attributs de public à privé (référence: # 14364)

Je travaille sur:
KernelCenterer, [K_fit_all_, K_fit_rows_]
MinMaxScaler, [n_samples_seen_]

Je vais travailler sur:

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

J'ai aussi découvert que le module KNeighborsClassifier , KNeighborsRegressor et peut-être d'autres classes du module neighbors n'ont aucune documentation d'attribut. Travaille actuellement sur KNeighborsRegressor qui a 2 attributs:

  • effective_metric_
  • effective_metric_params_

La classe KNeighborsClassifier a quatre attributs:

  • classes_
  • effective_metric_
  • effective_metric_params_
  • outputs_2d_

@alexitkes bonne prise. Merci!

Travailler sur QuadraticDiscriminantAnalysis, [classes_, covariance_]

Travailler sur KNeighborsClassifier, [classes_, effective_metric_, effective_metric_params_, sorties_2d_]
RadiusNeighborsClassifier, [classes_, effective_metric_, effective_metric_params_, sorties_2d_]

Travaille sur:
LinearSVC, [classes_]
NuSVC, [class_weight_, classes_, fit_status_, probA_, probB_, shape_fit_]
SVC, [poids_classe_, classes_, forme_fit_]

Travaille sur:

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

Travaille sur:

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

Hii !! Je voudrais aider avec celui-ci .. Quelqu'un peut-il me dire par où dois-je commencer?

Nous travaillons sur les fonctions dans dict_learning.py @spbail

Travailler sur LinearDiscriminantAnalysis avec @ olgadk7

Travailler sur la non-correspondance d'attributs dans RidgeClassifierCV @ npatta01

Travailler sur DecisionTreeRegressor avec @ ingrid88 + @ npatta01

Travailler sur LinearDiscriminantAnalysis avec @ olgadk7

Faux positif pour le script d'attribut ci-dessus. Cela a été documenté.

Travailler sur AdditiveChi2Sampler avec @ olgadk7

Travailler sur LabelEncoder avec @eugeniaft

essaiera de travailler sur randomtreeclassifier!

travaille sur

Perceptron

travaillant sur BernoulliRBM

Travailler sur ExtraTreeClassifer

Travailler sur LabelEncoder avec @eugeniaft

LabelEncoder semble ne pas correspondre, nous travaillons sur OneClassSVM

Je pense que les régresseurs d'arbre devraient plutôt désapprouver leurs classes.

travailler sur SVR

Travaille sur:

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

travail sur LinearRegression, [rank_, singular_]

travail sur LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]

travaille sur
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_]
Les attributs oob_ sont des adresses dans PR # 14779, n_features_ & base_estimator_ sont des faux positifs.

travaille sur
AdaBoostClassifier, [base_estimator_]

Mise à jour: a déjà été corrigé dans https://github.com/scikit-learn/scikit-learn/pull/14477

Je pense que nous ne devrions pas recommander ce problème pour les prochains sprints, ou utiliser une version beaucoup plus organisée.

Sur la base de mon expérience du sprint précédent, il y a encore beaucoup de faux positifs, et nous finissons par demander aux contributeurs de déprécier les attributs publics pour les rendre privés, ce qui est sans doute beaucoup plus difficile (et peut être frustrant car les contributeurs estiment qu'ils ont travaillé pour rien).

Ping @amueller @thomasjpfan WDYT?

Je pense que nous ne devrions pas recommander ce problème pour les prochains sprints, ou utiliser une version beaucoup plus organisée.

Peut-être que si nous avions un outil de validation général pour docstring tel que proposé dans https://github.com/numpy/numpydoc/issues/213, les choses seraient un peu plus faciles pour les contributeurs. Bien que je sois d'accord pour dire que cela ne tient pas entièrement compte du fait que certains attributs sont publics alors qu'ils ne devraient pas l'être.

TfidfVectorizer, SpectralEmbedding, SparseRandomProjection sont mis à jour.

Je me demandais de prendre ce problème comme mon premier problème, mais après une sélection aléatoire de sous-modules répertoriés par script, les seules classes que j'ai trouvées comme non correctement documentées sont les classes PLS *. Mais ils vivent dans le fichier _pls_.py, qui semble être non public. Dois-je travailler dessus ou trouver un autre bon premier numéro?

Tant que les classes réelles sont publiques, elles sont éligibles. Les classes publiques sont répertoriées dans doc/modules/classes.rst . Les classes PLS * sont là alors n'hésitez pas à les documenter

Est-il judicieux de classer également tous les attributs par ordre alphabétique? Je pense que cela fournirait une structure à la section et la rendrait plus facile à lire.

@pwalchessen Je suis d'accord, ça sonne comme une bonne idée. Comme mentionné en personne, j'ajouterais également cela au test.

Ceux-ci semblent toujours ouverts et assez évidents:

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_

et un tas de plus ...

Liste mise à jour des attributs exceptionnels qui doivent être ajoutés.

  • [] BayesianGaussianMixture

    • [x] mean_precision_prior

    • [] mean_precision_prior_

  • [] BayesianRidge

    • [] X_offset_

    • [] X_scale_

  • [] BernoulliNB

    • [] tableau coef_

    • [] intercepter_

  • [] Bouleau

    • [ ] en forme_

    • [] partial_fit_

  • [] CCA

    • [] tableau coef_, forme (1, n_features) ou (n_classes, n_features); Coefficient des caractéristiques dans la fonction de décision.

    • [] x_mean_: array, shape (n_features,) La moyenne sur les entités.

    • [] x_std_

    • [] y_mean_

    • [] y_std_

  • [x] CatégoriqueNB

    • [x] classes_ (classes_: tableau, forme (n_classes,)

      Une liste d'étiquettes de classe connues du classificateur.

  • [] ComplémentNB

    • [] coef_: tableau, forme (1, n_features) ou (n_classes, n_features); Coefficient des caractéristiques dans la fonction de décision.

    • [] intercepter_

  • [x] CountVectorizer

    • [x] stop_words_

    • [x] vocabulaire_

  • [x] DecisionTreeClassifier

    • [x] feature_importances_

  • [] DecisionTreeRegressor

    • [] classes_: en forme de tableau, forme (n_classes,); Étiquettes de classe uniques

    • [] n_classes_: int; Nombre d'étiquettes de classe uniques

    • [x] feature_importances_

  • [] DictVectorizer

    • [] feature_names_

    • [ ] vocabulaire_

  • [] DummyClassifier

    • [] output_2d_

  • [] DummyRegressor

    • [] output_2d_

  • [] ElasticNet

    • [] dual_gap_

    • [] sparse_coef_

  • [] ElasticNetCV

    • [] dual_gap_

  • [] Enveloppe elliptique

    • [] dist_

    • [] raw_covariance_

    • [] raw_location_

    • [] raw_support_

  • [] ExtraTreeClassifier

    • [] feature_importances_

  • [] ExtraTreeRegressor

    • [] classes_: en forme de tableau, forme (n_classes,); Étiquettes de classe uniques

    • [] feature_importances_

    • [] n_classes_: int; Nombre d'étiquettes de classe uniques

  • [] FeatureAgglomeration

    • [] n_composants_

    • [x] distances_

  • [] GaussianProcessClassifier

    • [] base_estimator_

    • [x] noyau_

  • [x] GaussianRandomProjection

    • [x] composants_

  • [] GradientBoostingClassifier

    • [] max_features_

    • [] n_classes_: int; Nombre de classes uniques.

    • [] n_features_: int; Nombre de fonctionnalités utilisées.

    • [x] oob_improvement_

    • [x] feature_importances_

  • [] GradientBoostingRegressor

    • [] max_features_

    • [] n_classes_: int; Nombre de classes uniques.

    • [] n_estimators_

    • [] n_features_: int; Nombre de fonctionnalités utilisées.

    • [x] oob_improvement_

    • [x] feature_importances_

  • [] HistGradientBoostingClassifier

    • [] bin_mapper_

    • [ ] Des classes_

    • [] do_early_stopping_

    • [] loss_

    • [] n_features_: int; Le nombre de fonctionnalités sélectionnées.

    • [x] n_iter_

    • [] marqueur_

  • [] HistGradientBoostingRegressor

    • [] bin_mapper_

    • [] do_early_stopping_

    • [] loss_

    • [] n_features_: int; Le nombre de fonctionnalités sélectionnées.

    • []

    • [] marqueur_

  • [] IncrementalPCA

    • [ ] taille du lot_

  • [] IsolationForest

    • [] base_estimator_

    • [] estimators_features_

    • [x] estimators_samples_

    • [] n_features_: int; Le nombre de fonctionnalités sélectionnées.

  • [] KernelCenterer

    • [] K_fit_all_

    • [] K_fit_rows_

  • [] KernelDensity

    • [] arbre_

  • [] LarsCV

    • [ ] actif_

  • [] Lasso

    • [] dual_gap_

    • [x] sparse_coef_

  • [] LassoLarsCV

    • [ ] actif_

  • [] LassoLarsIC

    • [] alphas_

  • [] LatentDirichletAllocation

    • [x] lié_

    • [x] doc_topic_prior_

    • [] exp_dirichlet_component_

    • [] random_state_

  • [] LocalOutlierFactor

    • [] effective_metric_

    • [] effective_metric_params_

    • [] n_samples_fit_: int; Nombre d'échantillons dans les données ajustées.

  • [] MDS

    • [] dissimilarity_matrix_

    • [] n_iter_: int; Nombre d'itérations.

  • [] MLPClassifier

    • [] best_loss_

    • [] loss_curve_

    • [] t_

  • [] MLPRegressor

    • [] best_loss_

    • [] loss_curve_

    • [] t_

  • [] MiniBatchKMeans

    • [] compte_

    • [] init_size_

    • [] n_iter_: int; Nombre d'itérations.

  • [] MultiTaskElasticNet

    • [] dual_gap_

    • [] eps_

    • [] sparse_coef_

  • [] MultiTaskElasticNetCV

    • [] dual_gap_

  • [] MultiTaskLasso

    • [] dual_gap_

    • [] eps_

    • [] sparse_coef_

  • [] MultiTaskLassoCV

    • [] dual_gap_

  • [] OEA

    • [ ] emplacement_

  • [] OneVsRestClassifier

    • [] coef_: tableau, forme (1, n_features) ou (n_classes, n_features); Coefficient des caractéristiques dans la fonction de décision.

    • [] intercepter_

    • [] n_classes_: int; Nombre de classes uniques.

  • [] OrthogonalMatchingPursuit

    • [] n_nonzero_coefs_

  • [] PLSCanonical

    • [] coef_: tableau, forme (1, n_features) ou (n_classes, n_features); Coefficient des caractéristiques dans la fonction de décision.

    • [] x_mean_: float ???; Moyenne 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

    • [] loss_function_

  • [] RBFSampler

    • [] random_offset_

    • [] random_weights_

  • [] ShrunkCovariance

    • [] rétrécissement

  • [] SkewedChi2Sampler

    • [] random_offset_

    • [] random_weights_

  • [] _BaseRidgeCV

    • [] alpha_

    • [] coef_

    • [] intercepter_

  • [] _ConstantPredictor

    • [] y_

  • [] _RidgeGCV

    • [] alpha_

    • [] coef_

    • [] dual_coef_

    • [] intercepter_

Je vais ajouter feature_importances_ à la documentation pour ExtraTreeRegressor

Un groupe de majors en science des données et moi-même commencerons à travailler sur la documentation des attributs BayesianRidge, [X_offset_, X_scale_].

Bonjour, notre groupe de contributeurs travaillera sur:

  • PLSSVD
  • CCA
  • ACP incrémentale
  • MiniBatchKMeans
  • Lasso

Correctifs potentiels dans # 16826

Le test a été ajouté dans # 16286.
Il y a actuellement encore quelques cours qui sont ignorés:
https://github.com/scikit-learn/scikit-learn/blob/753da1de06a764f264c3f5f4817c9190dbe5e021/sklearn/tests/test_docstring_parameters.py#L180

Certains d'entre eux ont déjà des PR, alors assurez-vous de le vérifier avant de commencer à travailler dessus.

Certains d'entre eux ont déjà des PR, alors assurez-vous de le vérifier avant de commencer à travailler dessus.

Une bonne option serait également d'essayer d'examiner les PR ouverts qui n'ont pas été fusionnés et d'essayer de les terminer.

En règle générale, si un PR n'a pas d'activité pendant plus de 2-3 semaines, il est bon d'essayer de le reprendre et d'essayer de le terminer.

Si vous êtes intéressé par une telle solution, il existe un moyen d'implémenter une extension pour sphinx qui vérifie que les paramètres sont tous documentés ou non mal orthographiés (vous pouvez voir un exemple ici: https://github.com/sdpython/pyquickhelper/blob /master/src/pyquickhelper/sphinxext/sphinx_docassert_extension.py). Peut-être qu'il peut être utile d'en ajouter un personnalisé à la documentation scikit-learn.

@sdpython , ce serait merveilleux! Si vous ne travaillez pas sur autre chose, vous pourriez peut-être proposer un projet de PR? Merci!

Intéressant!

IIRC nous avons un test commun qui vérifie que tous les attributs sont documentés. Il a été ajouté dans https://github.com/scikit-learn/scikit-learn/pull/16286. Il me semble aussi me souvenir que mne-python avait quelque chose de similaire.

Je n'ai pas d'opinion éclairée sur l'approche préférable, mais je dirais que documenter les paramètres manquants est probablement une priorité plus élevée que de décider comment nous voulons faire la vérification.

Le problème avec le fait de faire cela dans sphinx que dans notre cas, la construction d'une documentation prend beaucoup de temps (en raison de la génération de tous les exemples), donc un test unitaire ou un outil autonome serait plus facile à utiliser. Notez que nous avons précédemment utilisé la validation numpydoc dans https://github.com/scikit-learn/scikit-learn/issues/15440 et qu'une certaine validation de la docstring avec des annotations de type pourrait être effectuée avec https://github.com/terrencepreilly / darglint. Nous devrions donc probablement éviter d'utiliser 5 outils de validation différents pour les docstrings :)

J'aime la possibilité d'utiliser pytest pour vérifier les résultats, par exemple:

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

alors peut-être qu'il n'est pas nécessaire de changer notre construction de sphinx pour cela.

J'ai vérifié quels attributs docstrings sont toujours manquants (la liste ci-dessus est obsolète). Ce sont ceux que j'ai trouvés:

BayesianGaussianMixture, [mean_precision_prior]
BayesianRidge, [X_offset_, X_scale_]
BernoulliNB, [coef_, intercept_]
Bouleau, [fit_, partial_fit_]
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, [active_]
Lasso, [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_]
PLSCanonique, [x_mean_, x_std_, y_mean_, y_std_]
PLSSVD, [x_mean_, x_std_, y_mean_, y_std_]
SVR, [probA_, probB_]

Merci @marenwestermann!

Je travaille sur MiniBatchKMeans

Je travaille sur Lasso.

Je travaille maintenant sur l'ajout de l'attribut sparse_coef_ à MultiTaskElasticNet et MultiTaskLasso.

Je travaille sur LarsCV.

@thomasjpfan il est dit dans les classes SVR et OneClassSVM :
"L'attribut probA_ est obsolète dans la version 0.23 et sera supprimé dans la version 0.25." et
"L'attribut probB_ est obsolète dans la version 0.23 et sera supprimé dans la version 0.25."

Par conséquent, ces attributs n'ont probablement plus besoin de documentation, non?
À partir de là, ces deux attributs seront-ils également obsolètes dans la classe NuSVR ?

Les attributs classes_ et n_classes_ pour ExtraTreeRegressor sont des faux positifs.

Par conséquent, ces attributs n'ont probablement plus besoin de documentation, non?
À partir de là, ces deux attributs seront-ils également obsolètes dans la classe NuSVR?

Puisque nous les déprécions, je dirais que nous n'aurions pas besoin de les documenter.

Les attributs classes_ et n_classes_ pour ExtraTreeRegressor sont des faux positifs.

Oui, ceux-ci devraient être obsolètes, puis supprimés s'ils ne le sont pas déjà.

La classe DecisionTreeRegressor dit:
"l'attribut n_classes_ doit être obsolète à partir de la version 0.22 et sera supprimé dans la version 0.24."
"l'attribut classes_ doit être obsolète à partir de la version 0.22 et sera supprimé dans la version 0.24."

Donc, ces attributs n'ont pas besoin de documentation non plus?

Donc, ces attributs n'ont pas besoin de documentation non plus?

Bien @Abilityguy , merci de l'avoir signalé.

Je peux voir ci-dessous une incompatibilité dans _RidgeGCV:
Erreur Docstring: incompatibilité d'attribut dans _RidgeGCV
alpha_
meilleur score_
coef_
dual_coef_
intercepter_
n_features_in_

et dans _BaseRidgeCV:
Erreur de chaîne de documents: incompatibilité d'attribut dans _BaseRidgeCV
alpha_
meilleur score_
coef_
intercepter_
n_features_in_

Puis-je le reprendre? Je suis le premier chronométreur et souhaite contribuer.

@marenwestermann dans la classe FeatureAgglomeration, on dit que, dans la version 0.21, n_connected_components_ a été ajouté pour remplacer n_components_, alors n_components_ serait un faux positif non ..?

@ srivathsa729 d' après ma compréhension oui. Cependant, ce serait bien si l'un des développeurs principaux pouvait vérifier.

Je vais utiliser ElasticNet

La documentation des attributs X_offset_ et X_scale_ pour BayesianRidge a été ajoutée avec # 18607.

L'attribut output_2d_ est obsolète dans DummyClassifier et DummyRegressor (voir # 14933).

J'ai exécuté le script fourni par @amueller en haut de ce PR (le code doit être légèrement modifié car les choses ont bougé). Je n'ai pas trouvé d'autres attributs à documenter à l'exception de n_features_in_ qui, selon moi, a été introduit dans # 16112. Cet attribut n'est pas documenté dans toutes les classes auxquelles il a été introduit. Doit-il être documenté?
ping @NicolasHug

Cette page vous a été utile?
0 / 5 - 0 notes