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)
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
.
Je peux prendre en charge les incompatibilités de documentation d'attribut du sous-module tree
, qui incluent:
Je travaille sur LinearRegression, [rank_, singular_].
Je travaille sur LinearSVC, [n_iter_] et LinearSVR, [n_iter_]
Je prendrai Gradient boosting
ie
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:
Je travaille sur:
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:
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:
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:
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.
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:
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
Commentaire le plus utile
Attribut docstrings manquant pour chaque estimateur
Faites référence à ce problème dans votre PR