【问题标题】:How to read Scikit-Learn source code?如何阅读 Scikit-Learn 源代码?
【发布时间】:2019-01-09 16:09:04
【问题描述】:

我正在学习使用 scikit-learn 构建决策树。但是,当我使用示例代码时。我发现建树的内核代码是空的。

我正在使用以下代码:

from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)

我去 fit() 方法查看代码的详细信息。而且我认为实现决策树最重要的代码是tree.py第362行的以下代码。

 builder.build(self.tree_, X, y, sample_weight, X_idx_sorted)

但是,当我进入_tree.py中的build方法时,我发现所有方法都是空的,只包含'pass'关键字,例如:

""" Build a decision tree in depth-first fashion. """
def build(self, *args, **kwargs): # real signature unknown
    """ Build a decision tree from the training set (X, y). """
    pass

我想知道奇怪的代码。我不知道弄清楚。我对源代码有误吗?这段代码怎么运行?

我使用 PyCharm 作为我的 IDE,并使用 Anaconda3 作为我的环境....太奇怪了

【问题讨论】:

  • 不确定你在看哪里,但这是实现的(之一):github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/…
  • 我使用 PyCharm 作为我的 IDE,使用 Anaconda3 作为我的环境....太奇怪了
  • 哦,我现在明白了。有时 IDE 会为 cython 使用一些 python 存根函数。我猜语法检查器需要它才能正常工作(或类似的东西)
  • scikit-learn 的某些部分使用 Cython 代码来加快执行速度,例如树模块,然后是 svm 模块等。这实际上不是 IDE 可能正在寻找的正确的 python def 和类。
  • @Vivek Kumar 谢谢。也许我不应该用 PyCharm 检查它。

标签: python scikit-learn decision-tree


【解决方案1】:

sklearn 中的一些库是用 cython 编译的。 而且您在文件夹中找不到源代码。 它们以 .pyd 的形式放置在您的文件夹中,因此无法阅读。 .pyd 文件仅从其他 .py 文件(如库)导入。

您可以在 sklern git 存储库中以 .pyx 的形式找到原始源代码。 (文件名相同)

cython 语法与 python 语法有些不同,尤其是在定义变量方面。 如果要更改代码,则应将 .pyx 编译为 .pyd。

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 2013-05-16
    • 2015-06-14
    • 2010-09-23
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多