Scikit-learn: 修复所有类中默认值的文档

创建于 2019-12-02  ·  118评论  ·  资料来源: scikit-learn/scikit-learn

描述

许多类中的默认值文档要么没有包含在内,要么在编写方式上不一致,要么已经过时。 我想召集一些人来处理每个类的默认值文档,因为有大量的类存在这些问题。 有人告诉我,默认值应该记录为“default=<'value'>”,所以我在这个假设下创建了这个问题。

解决方案

以下是我看到的一些应该更改的参数:

  • 没有提到是否应该根据代码检查默认值,因为一些参数完全没有
  • “可选”应更改为“默认=<'值'>”
  • 确保默认值的记录方式在类中保持一致,即将所有内容更改为“default='value'>”格式
  • 每个 PR 修改一个文件

如果几个人每个人都在几个班级上工作,那么这应该很快就完成了! 这些都应该是相当简单的修复。

#### 例子
https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html
上面的链接是一个示例,其中未指示默认值但参数表示“可选”,并且其中指示的默认值都不一致记录。

Sprint good first issue

最有用的评论

从逻辑上讲,如果参数是可选的,那么默认值不应该总是None吗? 有一个默认值不是None表明它应该是必需的。

如果有默认值,这通常意味着文献发现这是一个合理的默认值,这也表明该参数对性能有影响,因此它不应该是可选的,而应该只是提及默认值是什么。 根据定义,这些似乎更接近必需的参数,我们只是碰巧为用户做出了明智的选择,以便他们可以更改或不更改。

或者更实际地说,目前是否有任何我们发现的可选参数具有数字默认值,但指定None会引发异常? 这也表明该参数实际上是必需的,但已根据文献/研究选择了合理的默认值。

或者,也许这些年来我一直在混淆requiredoptional的含义? 哈哈。 无论哪种方式,我都愿意提供帮助!

所有118条评论

你好@cgsavard ,我想在这方面工作。 我可以开始查看 AgglomerativeClustering 类吗?

@vachanda 加油! 我们可以继续在这里发布我们正在处理的内容,以便其他人知道。

感谢您协调此@cgsavard

贡献者注意事项:请遵循以下指南: https: //scikit-learn.org/stable/developers/contributing.html#guidelines -for-writing-documentation

@cgsavard ,是否有存在差异的类列表,或者我们是否必须逐一检查并更新它们?

@vachanda不幸的是,我没有列表。 我刚刚浏览了文件并查看需要更新的内容。

我正在研究 AffinityPropagation、SpectralCoclustering、SpectralBiclustering 和 Birch。

我正在研究 FeatureAgglomeration、KMeans 和 MiniBatchKMeans。

从逻辑上讲,如果参数是可选的,那么默认值不应该总是None吗? 有一个默认值不是None表明它应该是必需的。

如果有默认值,这通常意味着文献发现这是一个合理的默认值,这也表明该参数对性能有影响,因此它不应该是可选的,而应该只是提及默认值是什么。 根据定义,这些似乎更接近必需的参数,我们只是碰巧为用户做出了明智的选择,以便他们可以更改或不更改。

或者更实际地说,目前是否有任何我们发现的可选参数具有数字默认值,但指定None会引发异常? 这也表明该参数实际上是必需的,但已根据文献/研究选择了合理的默认值。

或者,也许这些年来我一直在混淆requiredoptional的含义? 哈哈。 无论哪种方式,我都愿意提供帮助!

@jmwoloso我们在optional的用法方面确实不一致,因此我们最近决定将其删除。

我也想做出贡献。 我可以继续这个吗

@glemaitre好的,这绝对有道理。 那么我们将一起删除optional动词,对吗,同时还要注意文档字符串中的默认值?

我们发现的每一个都应该作为一个问题单独打开,或者我们如何分阶段我们正在做的所有这些工作,因为有多个人正在处理与这个问题相关的多个事情?

@cyrus303 @jmwoloso您可以获得一个类(最多一个模块)并进行更正。 这个想法是删除可选项并在有一个(通常有一个)时添加一个默认值。 由于我们正在接触文档,我们应该确保行上的样式遵循我们的新样式指南: https: //scikit-learn.org/dev/developers/contributing.html#guidelines -for-writing-documentation

您可以提及您正在使用哪个类/模块,打开一个 PR 链接以避免重复工作:)。 期待对其进行审查。

嘿! 我将在tree类( tree.DecisionTreeClassifiertree.DecisionTreeRegressortree.ExtraTreeClassifiertree.ExtraTreeRegressor )上工作。

我还将为neighbors模块解决此问题。

我将采用ensemble模块。

@glemaitreboolboolean任何偏好? 在ensemble看到两者的混合,即使在同一个班级。 不妨在我做默认值的时候把它们弄好。

编辑:

int vs integer同上。 我假设int在那一个上,但想确认一下。

编辑(再次):

还看到相对于该类的__init__签名具有不一致值的文档字符串,例如:

min_impurity_splitRandomForestClassifier

__init__签名有min_impurity_split=None而它的文档字符串说min_impurity_split : float, (default=0) 。 我假设更新文档字符串以匹配签名,因为我们希望保持类的行为一致(即我们希望在实例化时传递相同的默认值)?

@jmwoloso你能参考https://scikit-learn.org/stable/developers/contributing.html#guidelines -for -writing-documentation。 基本上你应该默认为 python 类型名称(bool、str、int、float)

__init__ 签名有 min_impurity_split=None 而它的文档字符串说 min_impurity_split : float, (default=0)。 我假设更新文档字符串以匹配签名,因为我们希望保持类的行为一致(即我们希望在实例化时传递相同的默认值)?

我们应该匹配函数签名中的参数。 此值默认参数已更改,文档字符串未更新。

@cgsavard ,我想贡献,但这将是我的第一次,所以需要一些牵手。 我对 python 非常熟悉,对文本编辑器有点方便,最近在此处完成了 fork -> clone -> edit -> PR 工作流教程。 请指教下一步...谢谢!

@cgsavard
我可以在 Imputer 上工作吗?

@cgsavard ,我想在linear_model班上工作。

我也在研究Neural NetworkDecompositionFeature ExtractionMetricsPreprocess类。

有人可以检查我的 pr #15964,看看为什么代码 cov 失败。 这是我第一次投稿。 请指导。

忽略 codecov。 这是一个误报,因为我们不接触代码。 我会尽快审查公关

从我的手机发送 - 抱歉,简短且可能拼写错误。

我刚刚做了我的第一个贡献 #15988

我将采用naive_bayes模块。

我刚刚做了我的第一个贡献#16019

大家好,正在处理sklearn/neighbors ,谢谢。

对 sklearn/semi_ supervisor 有贡献。谢谢

@cgsavard ,我也想做出贡献,我将采用sklearn/svm模块。 谢谢

对 sklearn/semi_ supervisor 有贡献。谢谢
PR #16042 是否需要进一步编辑

@glemaitre在 #16105 中,我不得不深入研究构造以获取默认值,文档字符串有时似乎不准确和过时。

此外,我尝试使用不那么模棱两可、简洁且数学严谨的方法来定义参数范围。 例如,我将positive float更改float in (0, inf]或将0<= shrinkage <=1更改float in (0, 1) 。 长话短说,我尽我所能做到简洁准确,但请多花 5% 的注意力来审查这个 PR。 谢谢。

@cgsavard ,这是一个非常好的冲刺问题! 如果您同意,我计划将其添加到我们的 Sprint 列表中。 我已经总结了 PR 已经解决的类,以及它们的通讯 PR这里
您介意链接问题描述中的要点吗? 这将使信息从一开始就可用。 我还要问你的描述,以澄清每个PR应一次解决一个文件(最大的一个模块)在解释这里? 这将真正帮助贡献者和评论者! 非常感谢!

对于那些对此问题感兴趣的人,命令

git grep "optional.*default"

将输出仍受此问题影响的文件(感谢@ogrisel!:))。

@cgsavard你好,我想在model_selection @WiMLDS 上工作

@lopusz和我想在 random_projection.py 上工作

祝大家玩得开心!

@adrinjalali @noatamir @WiMLDS

@ETay203和我想在mean_shift @WiMLDS_Berlin sprint 上工作。

@magda-zielinska 和我想在 pipeline.py 上工作

@adrinjalali @noatamir @WiMLDS

@lopusz和 @magda-zielinska,我想在 kernel_approximation.py 上工作

我现在要处理 _optics.py

重新开放:在#16216 中被“Fixes”关键字关闭。

重新开放:在#16207 中被“Fixes”关键字关闭

我现在要处理 sklearn/linear_model/_coordinate_descent.py

我清理了 base.py 并提交了 PR

我清理了 discriminant_analysis.py 并提交了 PR

我现在看看 sklearn/gaussian_process/*.py

GP @lopusz已经有很长的公关了 :)

@lopusz,我很抱歉,PR 涉及 GP 模块的其他问题,如果您不介意,可以继续进行处理 :)

@adrinjalali感谢您的关注!

确实,我没有很好地扫描公开的 PR,所以没有采取 GP 的事实更像是一个意外;)

我会确保跟踪什么是 PRed。

是的,全科医生的公关即将到来;)

这里还有什么可做的吗?

我正在处理sklearn/decomposition/_dict_learning.py

还剩下什么? 我愿意提供帮助。 . .

弄清楚剩下的可能是开始帮助的好地方:)

嗨,我一直在查看剩下的内容,我认为在之前查看的某些模块中仍然需要进行一些更新。
我打算解决这些问题,从集群模块开始,然后可以为每个模块提出 PR?
这是我的第一个贡献,所以如果我没有正确地遵循流程等,请告诉我。
谢谢!

这是需要修复的函数、类和模块的列表:

  • [x] sklearn.feature_selection.SelectorMixin
  • [x] sklearn.config_context
  • [x] sklearn.set_config
  • [x] sklearn.calibration.CalibratedClassifierCV
  • [x] sklearn.cluster.OPTICS
  • [x] sklearn.cluster.SpectralClustering
  • [x] sklearn.cluster.affinity_propagation
  • [x] sklearn.cluster.cluster_optics_dbscan
  • [x] sklearn.cluster.cluster_optics_xi
  • [x] sklearn.cluster.compute_optics_graph
  • [x] sklearn.cluster.mean_shift
  • [x] sklearn.cluster.spectral_clustering
  • [x] sklearn.cluster.ward_tree
  • [x] sklearn.cross_decomposition.CCA
  • [x] sklearn.cross_decomposition.PLSCanonical
  • [x] sklearn.cross_decomposition.PLSRegression
  • [x] sklearn.cross_decomposition.PLSSVD
  • [x] sklearn.datasets
  • [x] sklearn.decomposition
  • [x] sklearn.dummy
  • [x] sklearn.ensemble.HistGradientBoostingRegressor (实验性)
  • [x] sklearn.ensemble.HistGradientBoostingRegressor (实验性)
  • [x] sklearn.feature_extraction.image.grid_to_graph
  • [x] sklearn.feature_extraction.image.img_to_graph
  • [x] sklearn.feature_extraction.text.CountVectorizer
  • [x] sklearn.feature_extraction.text.HashVectorizer
  • [x] sklearn.feature_selection
  • [x] sklearn.impute
  • [x] sklearn.inspection.partial_dependence
  • [x] sklearn.inspection.permutation_importance
  • [x] sklearn.inspection.permutation_importance
  • [x] sklearn.inspection.PartialDependenceDisplay
  • [x] sklearn.inspection.plot_partial_dependence
  • [x] sklearn.isotonic.IsotonicRegression
  • [x] sklearn.isotonic.check_increasing
  • [x] sklearn.isotonic.isotonic_regression
  • [x] sklearn.kernel_approximation
  • [x] sklearn.kernel_ridge
  • [x] sklearn.linear_model.PassiveAggressiveClassifier
  • [x] sklearn.linear_model.LassoLars
  • [x] sklearn.linear_model.OrthogonalMatchingPursuit
  • [x] sklearn.linear_model.HuberRegressor
  • [x] sklearn.linear_model.RANSACRegressor
  • [x] sklearn.linear_model.TheilSenRegressor
  • [x] sklearn.linear_model.PassiveAggressiveRegressor
  • [x] sklearn.linear_model.orthogonal_mp
  • [x] sklearn.linear_model.orthogonal_mp_gram
  • [x] sklearn.manifold
  • [x] sklearn.metrics (除了sklearn.metrics.confusion_matrix , sklearn.metrics.roc_auc_score , sklearn.metrics.max_error sklearn.metrics.mean_poisson_deviance , sklearn.metrics.mean_gamma_deviance , sklearn.metrics.mean_tweedie_deviance , sklearn.metrics.plot_confusion_matrix , sklearn.metrics.plot_precision_recall_curve )
  • [x] sklearn.mixture
  • [x] sklearn.model_selection.GridSearchCV
  • [x] sklearn.model_selection.ParameterGrid
  • [x] sklearn.model_selection.ParameterSampler
  • [x] sklearn.model_selection.RandomizedSearchCV
  • [x] sklearn.model_selection.fit_grid_point
  • [x] sklearn.multiclass
  • [x] sklearn.multioutput
  • [x] sklearn.neural_network
  • [x] sklearn.preprocessing
  • [x] sklearn.random_projection
  • [x] sklearn.tree.export_graphviz
  • [x] sklearn.tree.export_text
  • [x] sklearn.tree.plot_tree
  • [x] sklearn.utils

希望我没有遗漏任何东西。

你好。 我会去尝试通过 feature_selection 文档

我们采用 sklearn.mixture 部分

取 cross_decomposition 部分

对于 2020 Scikit-Learn Sprint, @icoder18和我正在参加 sklearn.random_projection 部分

@adrinjalali我们完成了 sklearn/mixture

与@genvalen 一起为冲刺的 sklearn.linear_model 工作

以 sklearn.calibration.CalibratedClassifierCV

为 sklearn.utils.validation 处理这个问题

接下来我们将处理 sklearn.utils.random

处理 sklearn.impute

处理sklearn.tree.plot_tree

表 14 将采用 sklearn.neural_network

取 sklearn.kernel_approximation

sklearn.inspection

表 14 将采取 sklearn.preprocessing

获取数据集

使用 sklearn.mixture #17509

名单已更新。

谢谢你们!

将 sklearn.metrics 用于冲刺

取model_selection模块

@glemaitre我们可以更新此描述以包括最好一次提交一个文件吗?

你好,我想投稿。 不过,这是我的第一次……而且我不清楚我如何知道在哪个模块上还有工作要做? 谢谢 !

https://github.com/scikit-learn/scikit-learn/issues/15761#issuecomment -639461778 包含需要修复的模块列表。

谢谢。 然后以 sklearn.decomposition 为例。

我正在研究“sklearn.isotonic.isotonic_regression”

我正在研究“sklearn.multiclass.py”

你好,我可以试着把剩下的放在sklearn.tree吗? 这也是我第一次做出贡献。

感谢您的入住,很高兴得到您的帮助! 请继续; 我认为我们所有的 sprint 更新都已关闭。

在2020年7月4日,在10点45分,伊万Wiryadi [email protected]写道:


嗨,我可以尝试在 sklearn.tree 上使用剩余的吗? 这也是我第一次做出贡献。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看,或取消订阅。

嗨,我想做出我的第一个贡献。 我可以使用 sklearn.multioutput 吗?

我将继续使用 sklearn.utils,从 _encode.py 开始

我正在处理sklearn/decomposition/_dict_learning.py

我正在 sprint 中处理sklearn.kernel_ridge

嗨,我将开始研究 sklearn.feature_extraction.image.img_to_graph

我正在处理sklearn.feature_extraction.text.CountVectorizer

我正在处理sklearn.sklearn.kernel_ridge

我正在处理sklearn.ensemble.HistGradientBoostingRegressor

“我正在做这个”

在这个? @Hoda1394

“我正在做这个”

在这个? @Hoda1394

@TahiriNadia 已更正。

@cgsavard嘿,我可以解决这个问题吗? 我是第一次

我将处理sklearn.datasets

我可以在sklearn.linear_model._least_angle.py上工作吗

@glemaitre我正在研究sklearn.linear_model._least_angle.py ,我发现method ='lar'的使用不一致,有时它表示lars有时lar ,这种不一致也在代码(不仅在文档中),我可以看到lars是正确的,你能确认一下,我会做一个 PR。

'sklearn/ensemble/_hist_gradient_boosting/binning.py'

文件需要更改:

sklearn/_config.py
sklearn/dummy.py
sklearn/multioutput.py
sklearn/linear_model/_huber.py
sklearn/linear_model/_theil_sen.py
sklearn/linear_model/_ridge.py
sklearn/linear_model/_omp.py
sklearn/linear_model/_sag.py
sklearn/externals/_lobpcg.py
sklearn/externals/_lobpcg.py
sklearn/utils/extmath.py
sklearn/utils/__init__.py
sklearn/utils/graph.py
sklearn/utils/_mocking.py
sklearn/utils/sparsefuncs.py
sklearn/neighbors/_base.py
sklearn/gaussian_process/_gpc.py
sklearn/gaussian_process/kernels.py
sklearn/model_selection/_validation.py
~sklearn/decomposition/_fastica.py~
~sklearn/decomposition/_dict_learning.py~
~sklearn/decomposition/_factor_analysis.py~
~sklearn/decomposition/_incremental_pca.py~
~sklearn/decomposition/_lda.py~
~sklearn/decomposition/_pca.py~
~sklearn/decomposition/_truncated_svd.py~
~sklearn/decomposition/_sparse_pca.py~
~sklearn/decomposition/_nmf.py~
sklearn/流形/_mds.py
sklearn/流形/_spectral_embedding.py
sklearn/流形/_t_sne.py
sklearn/ensemble/_hist_gradient_boosting/grower.py
sklearn/ensemble/_hist_gradient_boosting/binning.py
sklearn/metrics/_ranking.py
sklearn/tree/_classes.py
sklearn/预处理/_discretization.py
sklearn/预处理/_encoders.py 第 620 行
sklearn/neural_network/_multilayer_perceptron.py 第 1054 行
sklearn/协方差/_robust_covariance.py

请检查是否有人已经在处理您选择的文件

@sadakmed ,对于所有“分解文件”,都有一个正在进行的拉取请求 #17739。

处理"gaussian_process.GaussianProcessRegressor""neighbors._base.py"

嗨,我是新人,我想开始贡献。 您还需要有关此问题的帮助吗? 还有什么文件需要帮助吗?

嘿@boricles!

查看https://github.com/scikit-learn/scikit-learn/issues/15761#issuecomment -639461778 以获取仍待修复的模块列表。

@alfaro96谢谢。 我刚才快速浏览了一下。 今晚我将选择一个模块,然后进行处理。

我正在研究 sklearn/config_context

嘿,我想我会看看我是否可以帮助处理文档。

@alfaro96我想在sklearn.feature_extraction.text.CountVectorizer ,如果它还没有被使用,特别是因为我个人在过去使用 Vectorizers 时遇到了一些陷阱。

另外,我注意到虽然sklearn.model_selection.learning_curve已更新,但有一个使用旧文档的过时教程,我应该保留它吗? 或者值得更新吗?

@alfaro96

修改后:
我看到sklearn.config_contextsklearn.set_config sklearn.config_config.py已修复,因此可以从任务列表中检出。

我想在sklearn.utils 。 我只看到了一个使用“可选”的参数文档实例。这意味着我只需要修复那个实例,对吗? 它在sklearn.utils._mocking.py

嘿,我想我会看看我是否可以帮助处理文档。

@madprogramer

@alfaro96我想在sklearn.feature_extraction.text.CountVectorizer ,如果它还没有被使用,特别是因为我个人在过去使用 Vectorizers 时遇到了一些陷阱。

~我查看了清单sklearn.feature_extraction.text.CountVectorizer参考,它似乎没有修复。 欢迎公关。~

编辑: sklearn.feature_extraction.text.CountVectorizer已经修复。

另外,我注意到虽然sklearn.model_selection.learning_curve已更新,但有一个使用旧文档的过时教程,我应该保留它吗? 或者值得更新吗?

值得更新,尽管这应该在单独的 PR 中完成。

谢谢!

@alfaro96

@haiatn

修改后:
我看到sklearn.config_contextsklearn.set_config sklearn.config_config.py已修复,因此可以从任务列表中检出。

我已经更新了清单

我想在sklearn.utils 。 我只看到了一个使用“可选”的参数文档实例。这意味着我只需要修复那个实例,对吗? 它在sklearn.utils._mocking.py

这就是想法,虽然sklearn.utils._mocking.py文件中的类不是公共 API 的一部分,所以我认为不值得更新它们。

不过,如果您可以在任何其他待修复的函数、类和模块中工作,那就太好了。

谢谢!

我看了检查表。 根据我所看到的,可以从清单中检查以下内容:

  • sklearn.feature_extraction.image.img_to_graph
  • sklearn.isotonic.IsotonicRegression
  • sklearn.isotonic.check_increasing
  • 我没有找到文件sklearn.ensemble.HistGradientBoostingRegressor但所有的sklearn.ensemble都可以

我可以处理sklearn.manifold._spectral_embeddingsklearn.feature_extraction.text.HashVectorizer吗? 我会在单独的公关中做到这一点。 我认为它们是唯一需要修复的文件(假设使用了sklearn.feature_extraction.text.CountVectorizer )。

我看了检查表。 根据我所看到的,可以从清单中检查以下内容:

  • sklearn.feature_extraction.image.img_to_graph
  • sklearn.isotonic.IsotonicRegression
  • sklearn.isotonic.check_increasing

谢谢@haiatn ,我已经更新了清单。

  • 我没有找到文件sklearn.ensemble.HistGradientBoostingRegressor但所有的sklearn.ensemble都可以

sklearn.ensemble.HistGradientBoostingClassifiersklearn.ensemble.HistGradientBoostingRegressor在这个文件中: scikit-learn/sklearn/ensemble/_hist_gradient_boosting/gradient_boosting.py 。 然而,它们已经被修复了。

我可以处理sklearn.manifold._spectral_embeddingsklearn.feature_extraction.text.HashVectorizer吗? 我会在单独的公关中做到这一点。 我认为它们是唯一需要修复的文件(假设使用了sklearn.feature_extraction.text.CountVectorizer )。

我查看了sklearn.manifold模块和sklearn.feature_extraction.text.HashingVectorizer并且它们已经修复(我已经相应地更新了清单)。

尽管如此, sklearn.utils模块中仍有几个函数需要修复。

谢谢@haiatn ,我们非常感谢您的帮助!

我现在将处理sklearn.utils._estimator_html_reprsklearn.utils.deprecationsklearn.utils._testing

我会完成 sklearn.utils。 我发现只有 3 个文件需要修复。

@alfaro96
你能审查我的开放拉取请求吗? 我认为他们是最后一个。

18360#18385#18386

嘿@haiatn!

我已经看过你的公开 PR。

谢谢!

现在我们合并了 sklearn.utils 剩下的东西,它是清单

最后一个打开的拉取请求 #18025,那么这个问题最终可能会被关闭。

你好,
我想开始贡献。 是否有任何等待修复默认值文档的类? 如果有的话,我可以接受。

嘿,开源的新手,我期待着修复文档,万一有需要修复的东西

此页面是否有帮助?
0 / 5 - 0 等级