python - 使用 * 参数从 sklearn 进行子类化的正确方法

标签 python scikit-learn

我试图从 sklearn.svm.LinearSVC 进行子类化,并注意到签名中的 * 参数。我不确定这个 * 是否指的是 **kwargs 或 *args 或其他东西。我正在尝试将 init 函数子类化,如下所示。在这种情况下,我在 init 函数中添加了一个附加参数 new_string_in_subclass。 从 sklearn.svm 导入 LinearSVC

class LinearSVCSub(LinearSVC):
    def __init__(self, penalty='l2', loss='squared_hinge', *, dual=True, tol=0.0001, C=1.0, multi_class='ovr',
                 fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None,
                 max_iter=1000, sampler: new_string_in_subclass=None):

        super(LinearSVCSub, self).__init__(penalty=penalty, loss=loss, *, dual=dual, tol=tol,
                                            C=C, multi_class=multi_class, fit_intercept=fit_intercept,
                                                  intercept_scaling=intercept_scaling, class_weight=class_weight,
                                                  verbose=verbose, random_state=random_state, max_iter=max_iter)

        self.new_string_in_subclass = new_string_in_subclass

如果我想维护 LinearSVC 类的其他方法的功能,是否需要将 * 参数传递给父类(super class)的 __init__ 函数?如果是这样我该怎么做?现在我得到一个 SyntaxError 如下:

super(LinearSVCSub, self).init(penalty=penalty,loss=loss,*,dual=dual,tol=tol, ^ 语法错误:语法无效

最佳答案

A * 仅出现在方法的定义中,而不出现在对该方法的调用中。 * 表示其后面的所有参数只能按名称提供,不能按位置提供。只要在调用 super 时将其省略,就可以了。

关于python - 使用 * 参数从 sklearn 进行子类化的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64419385/

相关文章:

machine-learning - sklearn.model_selection GridSearchCV 抛出 KeyError : 'mean_train_score'

java - Twistd - Telnet - Python 服务器,Java 客户端,客户端在连接关闭之前永远不会接收字符串,此时所有字符串连接在一起并一起发送

Python 3 图像 base64 不保存到 html img 标签

python - CherryPy 用于网络托管控制面板应用程序

javascript - 提交时如何知道 JSP 页面中正在执行的页面或调用

python - 设置列表的正确顺序

python - 即使使用 random_state,每次运行代码时也会有不同的值

pandas - 了解scikit学习ValueError : setting an array element with a sequence due to data shape

python - 在列列表上使用 sklearn 转换器并保留输入列

python - 你能修复 scikit 学习中分类器的假阴性率吗