如#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_,单数]。
我正在使用LinearSVC,[n_iter_]和LinearSVR,[n_iter_]
我将占用Gradient boosting
即
没关系,误读了缺少属性的地方以及没有缺失的地方
看起来对于naive_bayes
子模块的分类器,也没有记录classes_
属性。 我已经开始修复它。
我将研究TfidfVectorizer,[fixed_vocabulary_]
我将致力于:
我正在尝试:
编辑:打开一个问题,以将这些属性从公共更改为私有(参考:#14364)
我正在努力:
KernelCenterer,[K_fit_all_,K_fit_rows_]
MinMaxScaler,[n_samples_seen_]
我将致力于:
我还发现KNeighborsClassifier
, KNeighborsRegressor
以及可能的neighbors
模块其他类根本没有属性文档。 当前在KNeighborsRegressor
,它具有2个属性:
effective_metric_
effective_metric_params_
KNeighborsClassifier
类具有四个属性:
classes_
effective_metric_
effective_metric_params_
outputs_2d_
@alexitkes好收获。 谢谢!
进行二次判别分析,[classes_,covariance_]
使用KNeighborsClassifier,[classes_,effective_metric_,effective_metric_params_,outputs_2d_]
RadiusNeighborsClassifier,[类,有效度量,有效度量参数,输出_2d_]
工作于:
LinearSVC,[classes_]
NuSVC,[class_weight_,classes_,fit_status_,probA_,probB_,shape_fit_]
SVC,[class_weight_,classes_,shape_fit_]
工作于:
工作于:
CountVectorizer,[stop_words_,词汇_]
DictVectorizer,[feature_names_,词汇_]
嗨! 我想帮忙解决这个问题。任何人都可以告诉我应该从哪里开始吗?
我们正在处理dict_learning.py
@spbail中的函数
使用@ olgadk7进行LinearDiscriminantAnalysis
在RidgeClassifierCV @ npatta01中处理属性不匹配
使用@ ingrid88 + @ npatta01在DecisionTreeRegressor上工作
使用@ olgadk7进行LinearDiscriminantAnalysis
上面的属性脚本为假。 这已被记录。
使用@ olgadk7在AdditiveChi2Sampler上工作
使用@eugeniaft处理LabelEncoder
将尝试在randomtreeclassifier上工作!
从事
感知器
在BernoulliRBM上工作
在ExtraTreeClassifer上工作
使用@eugeniaft处理LabelEncoder
LabelEncoder看起来没有任何不匹配,我们正在研究OneClassSVM
我认为树回归器应该弃用其类。
在SVR上工作
工作于:
正在使用LinearRegression,[rank_,单数]
正在处理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中修复
我认为我们不应该在下一个sprint中推荐此问题,或者使用更多精选版本。
根据我在上一个冲刺中的经验,仍然存在很多误报,我们最终要求贡献者实际弃用公共属性以将其私有化,这可能会更加困难(并且可能会令人沮丧,因为贡献者认为他们为之工作)没有)。
Ping @amueller @thomasjpfan WDYT吗?
我认为我们不应该在下一个sprint中推荐此问题,或者使用更多精选版本。
也许如果我们有一个针对文档字符串的通用验证工具(例如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,并尝试完成它们。
根据经验,如果公关活动超过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。 我似乎还记得mne-python也有类似的东西。
对于哪种方法更可取,我没有知情的意见,但是我想说,记录缺失的参数可能比决定我们要如何进行检查的优先级更高。
在sphinx中这样做的问题是,在我们的案例中,建立文档需要花费很长时间(由于生成所有示例),因此单元测试或独立工具将更易于使用。 请注意,我们之前在https://github.com/scikit-learn/scikit-learn/issues/15440中使用了numpydoc验证,并且可以使用https://github.com/terrencepreilly对带有类型注释的docstring进行一些验证/ darglint。 因此,我们可能应该避免对文档字符串也使用5种不同的验证工具的情况:)
我喜欢使用pytest来检查结果的功能,例如:
pytest -v --runxfail -k IsolationForest sklearn/tests/test_docstring_parameters.py
因此也许没有必要为此更改狮身人面像版本。
我检查了仍然缺少哪些属性文档字符串(上面的列表已过期)。 这些是我发现的:
BayesianGaussianMixture,[mean_precision_prior]
BayesianRidge,[X_offset_,X_scale_]
BernoulliNB,[coef_,intercept_]
桦木,[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_]
套索[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_]
正交匹配追踪,[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
还将不赞成使用这两个属性吗?
ExtraTreeRegressor的属性classes_
和n_classes_
是误报。
因此,这些属性可能不再需要文档,对吗?
从这里开始,在NuSVR类中也将不赞成使用这两个属性吗?
既然我们要弃用它们,我会说我们不需要记录它们。
ExtraTreeRegressor的classes_和n_classes_属性为误报。
是的,应该弃用,如果尚未删除,则将其删除。
DecisionTreeRegressor
类说:
“将从版本0.22开始弃用n_classes_属性,并将在版本0.24中将其删除。”
“ classes_属性将从0.22版开始弃用,并将在0.24版中删除。”
因此,这些属性也不需要文档吗?
因此,这些属性也不需要文档吗?
对@Abilityguy ,感谢您指出这一点。
我可以在_RidgeGCV中看到以下不匹配项:
Docstring错误:_RidgeGCV中的属性不匹配
α_
最好成绩_
coef_
dual_coef_
截距_
n_features_in_
并在_BaseRidgeCV中:
Docstring错误:_BaseRidgeCV中的属性不匹配
α_
最好成绩_
coef_
截距_
n_features_in_
我可以收起来吗? 我是第一时间,想贡献自己的力量。
@FeenAgglomeration类中的
从我的理解@ srivathsa729是的。 但是,如果核心开发人员之一可以再次检查,那就太好了。
我将介绍ElasticNet
#18607已添加了BayesianRidge的属性X_offset_和X_scale_的文档。
在DummyClassifier和DummyRegressor中已弃用了output_2d_属性(请参阅#14933)。
我在此PR的顶部运行了@amueller提供的脚本(由于周围的情况,代码需要稍作修改)。 除了n_features_in_
之外,我再也找不到需要记录的属性了,而#16112中引入了
ping @NicolasHug
最有用的评论
每个估算器缺少属性文档字符串
在您的PR中参考此问题