【问题标题】:ValueError: cannot copy sequence with size 3509 to array axis with dimension 6ValueError:无法将大小为 3509 的序列复制到维度为 6 的数组轴
【发布时间】:2020-10-15 15:56:25
【问题描述】:

我正在尝试将我的数据拟合到逻辑回归量,但出现此错误。

class Train:
    def __init__(self, X_train, X_test, y_train, y_test):
        self.X_train = X_train,
        self.y_train = y_train,
        self.X_test = X_test,
        self.y_test = y_test

    def train(self):
        X_train = self.X_train
        y_train = self.y_train
        clf = LogisticRegression().fit(X_train, y_train)

X_trainy _train 是元组类型。这发生在 __init__ 方法中,所以我猜这是默认行为。
我对编写 OOP 代码非常陌生,因此我确信有更好的方法来完成此操作,并且错误可能是由于类之间传递的数据造成的。

编辑:当我将“clf = LogisticRegression().fit(X_train, y_train)”直接放在主要方法中时,这有效

【问题讨论】:

  • 嗨,欢迎来到 SO。你的错误在哪里?也请检查How to Ask

标签: python pandas oop machine-learning scikit-learn


【解决方案1】:

通过在__init__ 中的这些语句中添加逗号,您正在创建元组:

t = X_train,
type(t)
# tuple

此外,在初始化中将所有变量设置为类属性的目的是为了让它们可以在类方法之间共享,因此X_train = self.X_train 分配没有意义。所以你应该这样做:

class Train():
    def __init__(self, X_train, X_test, y_train, y_test):
        self.X_train = X_train
        self.y_train = y_train
        self.X_test = X_test
        self.y_test = y_test
        
    def train(self):
        self.cls = LogisticRegression() 
        self.cls.fit(self.X_train, self.y_train)

最后一点,我猜你的类包含一些额外的逻辑,而不是它现在包含的。否则没有意义,LogisticRegression 已经是一个带有fit 方法的类了。

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2013-09-12
    • 2016-09-20
    • 2021-07-24
    • 2023-03-06
    • 1970-01-01
    • 2017-10-13
    • 2021-10-12
    • 2020-05-04
    相关资源
    最近更新 更多