как обсуждалось в # 13385, мы должны убедиться, что все атрибуты задокументированы.
если вы хотите поработать над этим, вы должны выбрать конкретный подмодуль и исправить все несоответствия документации атрибутов в этом подмодуле.
Вот сценарий для поиска оставшихся (могут быть ложные срабатывания):
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)
Я уже нашел по крайней мере одно несоответствие в атрибутивной документации в описании класса NMF. Думаю, я смогу взять часть этой работы. Я почти готов предложить некоторые изменения в подмодулях decomposition
и random_projection
.
Я могу устранить несоответствия в документации по атрибутам подмодуля tree
, в том числе:
Я работаю над LinearRegression, [rank_, singular_].
Я работаю над LinearSVC, [n_iter_] и LinearSVR, [n_iter_]
Я возьму Gradient boosting
ie
неважно, неправильно прочитал, где атрибуты отсутствуют, а где нет
Похоже, есть также недокументированный атрибут classes_
для классификаторов подмодуля naive_bayes
. Я начал это исправлять.
Я буду работать над TfidfVectorizer, [fixed_vocabulary_]
Буду работать над:
Я работаю на:
РЕДАКТИРОВАТЬ: открыла проблему для изменения этих атрибутов с общедоступных на частные (ссылка: # 14364)
Я работаю над:
KernelCenterer, [K_fit_all_, K_fit_rows_]
MinMaxScaler, [n_samples_seen_]
Буду работать над:
Я также обнаружил, что модули KNeighborsClassifier
, KNeighborsRegressor
и, возможно, другие классы модуля neighbors
вообще не имеют документации по атрибутам. В настоящее время работает над KNeighborsRegressor
с двумя атрибутами:
effective_metric_
effective_metric_params_
Класс KNeighborsClassifier
имеет четыре атрибута:
classes_
effective_metric_
effective_metric_params_
outputs_2d_
@alexitkes хороший улов. Благодаря!
Работа над QuadraticDiscriminantAnalysis, [классы_, ковариация_]
Работа над KNeighborsClassifier, [классы_, эффективная_метрика_, эффективная_метрика_парам_, выходы_2d_]
RadiusNeighborsClassifier, [классы_, эффективная_метрика_, эффективная_метрика_парам_, выходы_2d_]
Работа над:
LinearSVC, [классы_]
NuSVC, [class_weight_, classes_, fit_status_, probA_, probB_, shape_fit_]
SVC, [class_weight_, classes_, shape_fit_]
Работа над:
Работа над:
CountVectorizer, [стоп-слова_, словарь_]
DictVectorizer, [имена_компонентов_, словарь_]
Привет !! Я хотел бы помочь с этим .. Может кто-нибудь, пожалуйста, скажите мне, с чего мне начать ??
Работаем над функциями в dict_learning.py
@spbail
Работа над LinearDiscriminantAnalysis с @ olgadk7
Работа над несовпадением атрибутов в RidgeClassifierCV @ npatta01
Работа над DecisionTreeRegressor с @ ingrid88 + @ npatta01
Работа над LinearDiscriminantAnalysis с @ olgadk7
Ложное срабатывание для сценария атрибута выше. Это было задокументировано.
Работа над AdditiveChi2Sampler с @ olgadk7
Работа над LabelEncoder с @eugeniaft
попробую поработать на randomtreeclassifier!
работа над
Перцептрон
работает над BernoulliRBM
Работа над ExtraTreeClassifer
Работа над LabelEncoder с @eugeniaft
LabelEncoder выглядит так, будто в нем нет несоответствий, мы работаем над OneClassSVM
Я думаю, что древовидные регрессоры должны вместо этого отказаться от своих классов.
работает над SVR
Работа над:
работает над LinearRegression, [rank_, singular_]
работает над LatentDirichletAllocation, [bound_, doc_topic_prior_, exp_dirichlet_component_, random_state_, topic_word_prior_]
работа над
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_]
Атрибуты oob_ - это адрес в PR # 14779, n_features_ и base_estimator_ - ложные срабатывания.
работа над
AdaBoostClassifier, [base_estimator_]
Обновление: уже исправлено в https://github.com/scikit-learn/scikit-learn/pull/14477
Я думаю, что мы не должны рекомендовать эту проблему для следующих спринтов или использовать более тщательно подобранную версию.
Основываясь на моем опыте предыдущего спринта, все еще остается много ложных срабатываний, и в конечном итоге мы просим участников фактически отказаться от общедоступных атрибутов, чтобы сделать их закрытыми, что, возможно, намного сложнее (и может расстраивать, поскольку участники считают, что они работали на ничего).
Пинговать @amueller @thomasjpfan WDYT?
Я думаю, что мы не должны рекомендовать эту проблему для следующих спринтов или использовать более тщательно подобранную версию.
Может быть, если бы у нас был общий инструмент проверки для строки документации, такой как предложенный в https://github.com/numpy/numpydoc/issues/213, для участников было бы немного проще. Хотя я согласен с тем, что он не полностью учитывает тот факт, что некоторые атрибуты являются общедоступными, хотя этого не должно быть.
TfidfVectorizer, SpectralEmbedding, SparseRandomProjection
обновляются.
Мне было интересно взять эту проблему в качестве своей первой, но после некоторого случайного выбора подмодулей, перечисленных скриптом, единственными классами, которые я обнаружил как неправильно задокументированные, являются классы PLS *. Но они живут в файле _pls_.py, который не является общедоступным. Должен ли я работать над ними или найти другой хороший первый выпуск?
Пока фактические классы являются общедоступными, они имеют право. Открытые классы перечислены в doc/modules/classes.rst
. Классы PLS * есть, поэтому не стесняйтесь их документировать
Имеет ли смысл расположить все атрибуты в алфавитном порядке? Я думаю, это обеспечит структуру раздела и упростит его чтение.
@pwalchessen Я согласен, звучит как хорошая идея. Как упоминалось лично, я бы тоже добавил это к тесту.
Они все еще кажутся открытыми и очевидными:
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_
и еще много чего ...
Обновлен список выдающихся атрибутов, которые необходимо добавить.
Я собираюсь добавить feature_importances_
в документацию для ExtraTreeRegressor
Мы с группой специалистов по науке о данных начнем работу над документацией по атрибутам BayesianRidge, [X_offset_, X_scale_].
Привет, наша группа участников будет работать над:
Возможные исправления в # 16826
Тест был добавлен в # 16286.
В настоящее время есть еще несколько пропущенных занятий:
https://github.com/scikit-learn/scikit-learn/blob/753da1de06a764f264c3f5f4817c9190dbe5e021/sklearn/tests/test_docstring_parameters.py#L180
У некоторых из них уже есть PR, поэтому обязательно проверьте их, прежде чем начинать работу над этим.
У некоторых из них уже есть PR, поэтому обязательно проверьте их, прежде чем начинать работу над этим.
Хорошим вариантом было бы также попытаться посмотреть на открытые PR, которые не были объединены, и попытаться завершить их.
Как показывает практика, если PR не проявляет активности более 2-3 недель, можно попытаться взять его на себя и попытаться закончить.
Если вы заинтересованы в таком решении, есть способ реализовать расширение для sphinx, которое проверяет, все ли параметры задокументированы или не указаны неправильно (вы можете увидеть пример здесь: https://github.com/sdpython/pyquickhelper/blob /master/src/pyquickhelper/sphinxext/sphinx_docassert_extension.py). Может быть, будет полезно добавить собственный в документацию scikit-learn.
@sdpython , это было бы замечательно! Если вы не работаете над чем-то другим, возможно, вы могли бы предложить проект PR? Благодаря!
Интересно!
IIRC у нас есть общие тесты, которые проверяют, что все атрибуты задокументированы. Он был добавлен в https://github.com/scikit-learn/scikit-learn/pull/16286. Также я, кажется, помню, что у меня-питона было нечто подобное.
У меня нет информированного мнения о том, какой подход предпочтительнее, но я бы сказал, что документирование недостающих параметров, вероятно, является более приоритетным, чем решение, как мы хотим проводить проверку.
Проблема с выполнением этого в sphinx, что в нашем случае создание документации занимает много времени (из-за генерации всех примеров), поэтому будет проще использовать модульный тест или автономный инструмент. Обратите внимание, что ранее мы использовали проверку numpydoc в https://github.com/scikit-learn/scikit-learn/issues/15440, а некоторая проверка строки документации с аннотациями типов могла быть выполнена с помощью https://github.com/terrencepreilly / дарглинт. Поэтому нам, вероятно, следует избегать ситуации использования 5 различных инструментов проверки для строк документации :)
Мне нравится возможность использовать pytest для проверки результатов, например:
pytest -v --runxfail -k IsolationForest sklearn/tests/test_docstring_parameters.py
так что, возможно, нет необходимости менять нашу сборку sphinx для этого.
Я проверил, какие строки документации атрибутов все еще отсутствуют (список выше устарел). Вот те, которые я нашел:
Байесовско-гауссовское смешение, [mean_precision_prior]
Байесовский гребень, [X_offset_, X_scale_]
БернуллиNB, [coef_, intercept_]
Береза, [fit_, partial_fit_]
CCA, [x_mean_, x_std_, y_mean_, y_std_]
DecisionTreeRegressor, [классы_, n_classes_]
DummyClassifier, [output_2d_]
DummyRegressor, [output_2d_]
ElasticNet, [dual_gap_]
ElasticNetCV, [dual_gap_]
ExtraTreeRegressor, [классы_, n_classes_]
FeatureAgglomeration, [n_components_]
LarsCV, [active_]
Лассо, [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_]
PLSCanonical, [x_mean_, x_std_, y_mean_, y_std_]
PLSSVD, [x_mean_, x_std_, y_mean_, y_std_]
SVR, [probA_, probB_]
Спасибо, @marenwestermann!
Я работаю над MiniBatchKMeans
Я работаю над Лассо.
Сейчас я работаю над добавлением атрибута sparse_coef_
в MultiTaskElasticNet и MultiTaskLasso.
Я работаю над LarsCV.
@thomasjpfan в классах SVR
и OneClassSVM
сказано:
«Атрибут probA_ устарел в версии 0.23 и будет удален в версии 0.25». и
«Атрибут probB_ устарел в версии 0.23 и будет удален в версии 0.25».
Следовательно, эти атрибуты, вероятно, больше не нуждаются в документации, верно?
Исходя из этого, будут ли эти два атрибута устаревшими в классе NuSVR
?
Атрибуты classes_
и n_classes_
для ExtraTreeRegressor являются ложными срабатываниями.
Следовательно, эти атрибуты, вероятно, больше не нуждаются в документации, верно?
Будут ли эти два атрибута устаревшими в классе NuSVR?
Поскольку мы осуждаем их, я бы сказал, что нам не нужно их документировать.
Атрибуты classes_ и n_classes_ для ExtraTreeRegressor являются ложными срабатываниями.
Да, они должны быть устаревшими, а затем удалены, если они еще не были.
Класс DecisionTreeRegressor
говорит:
«Атрибут n_classes_ не рекомендуется использовать в версии 0.22 и будет удален в версии 0.24».
«Атрибут classes_ устарел с версии 0.22 и будет удален в версии 0.24».
Значит, эти атрибуты тоже не нуждаются в документации?
Значит, эти атрибуты тоже не нуждаются в документации?
Правильно, @Abilityguy , спасибо, что указали на это.
Я вижу ниже несоответствие в _RidgeGCV:
Ошибка строки документации: несоответствие атрибутов в _RidgeGCV
альфа_
лучший результат_
coef_
dual_coef_
intercept_
n_features_in_
и в _BaseRidgeCV:
Ошибка строки документации: несоответствие атрибутов в _BaseRidgeCV
альфа_
лучший результат_
coef_
intercept_
n_features_in_
Могу я поднять это? Я новичок и хочу внести свой вклад.
@marenwestermann в классе FeatureAgglomeration, говорят, что в версии 0.21 n_connected_components_ был добавлен для замены n_components_, тогда n_components_ будет ложноположительным, верно ..?
@ srivathsa729, насколько я понимаю, да. Однако было бы хорошо, если бы один из основных разработчиков мог дважды проверить.
Возьмусь за ElasticNet
Документация по атрибутам X_offset_ и X_scale_ для BayesianRidge была добавлена в # 18607.
Атрибут output_2d_ устарел в DummyClassifier и DummyRegressor (см. №14933).
Я запустил сценарий, предоставленный @amueller в верхней части этого PR (код нужно немного изменить, потому что все изменилось). Мне не удалось найти никаких других атрибутов, которые необходимо документировать, за исключением n_features_in_
который, как я вижу, был введен в # 16112. Этот атрибут недокументирован, я думаю, во всех классах, в которых он был представлен. Следует ли это задокументировать?
пинг @NicolasHug
Самый полезный комментарий
Отсутствуют строки документации атрибутов для каждого оценщика
Укажите эту проблему в своем PR