我是Python的新手,并且已经阅读了python科学库的一些API示例。
在一个库中,scikit-learn,代码示例总是在没有参数的情况下调用构造函数一次,然后再次调用所有参数。
这是一个例子(参见最后一行,以及最后一行之前的第三行(clf = linear _....),取自sklearn.linear_model.SGDRegressor
的文档:
>>> import numpy as np
>>> from sklearn import linear_model
>>> n_samples, n_features = 10, 5
>>> np.random.seed(0)
>>> y = np.random.randn(n_samples)
>>> X = np.random.randn(n_samples, n_features)
>>> clf = linear_model.SGDRegressor()
>>> clf.fit(X, y)
...
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
random_state=None, shuffle=True, verbose=0, warm_start=False)
我想我可能误解了一些关于Python的东西,因为我不明白为什么构造函数被调用两次?这是否有原因,或者只是一种奇怪的方式来展示所有构造函数的可能参数?
答案 0 :(得分:3)
您正在阅读的内容是doctest,这是一个嵌入在文档字符串中的测试。
Doctests使用前缀为>>>
的行来表示可运行的示例,而其输出显示为无前缀。
测试运行器将示例的输出与文档测试中写入的输出相匹配。
我们可以通过在IPython解释器中运行示例来看到:
In [18]: import numpy as np
In [19]: np.random.seed(0)
In [20]: y = np.random.randn(n_samples)
In [21]: X = np.random.randn(n_samples, n_features)
In [22]: clf = linear_model.SGDRegressor()
In [23]: clf.fit(X, y)
Out[23]:
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
random_state=None, shuffle=True, verbose=0, warm_start=False)
<强> TLDR 强>;您看到的第二个构造函数不在代码中,只是fit
方法输出的表示。