【问题标题】:TypeError: fit() missing 1 required positional argument: 'y' (using sklearn - ExtraTreesRegressor)TypeError: fit() 缺少 1 个必需的位置参数:'y'(使用 sklearn - ExtraTreesRegressor)
【发布时间】:2020-11-23 03:53:35
【问题描述】:

刚刚尝试了 Sklearn python 库,我重新使用了一些用于线性回归的代码,以拟合回归树模型作为我看到的示例(这里是示例代码):

def fit(self, X, y):
        """
        Fit a Random Forest model to data `X` and targets `y`.

        Parameters
        ----------
        X : array-like
            Input values.
        y: array-like
            Target values.
        """
        self.X = X
        self.y = y
        self.n = self.X.shape[0]
        self.model = ExtraTreesRegressor(**self.params)
        self.model.fit(X, y)

这是我编写/改用的代码

data = pd.read_csv("rmsearch.csv", sep=",")
data = data[["price", "type", "number_bedrooms"]]
predict = "price"

X = np.array(data.drop([predict], 1))
y = np.array(data[predict])
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=0.2)

etr = ensemble.ExtraTreesRegressor
etr.fit(x_train, y_train)
acc = etr.score(x_test, y_test)
print("Accuracy; ", acc)

我收到此错误:

etr.fit(x_train, y_train)
TypeError: fit() missing 1 required positional argument: 'y'

我知道 fit() 将“X”、“y”和“sample_weight”作为输入。但是,sample_weight 默认为无。其他示例对我帮助不大,但也可能是我对 python 还很陌生,无法发现简单的编码错误。

fit() 文档:

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html#sklearn.ensemble.ExtraTreesRegressor.fit

提前感谢您的帮助。

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    问题来了

    etr = ensemble.ExtraTreesRegressor
    etr.fit(x_train, y_train)
    

    您需要在调用fit 之前实例化ensemble.ExtraTreesRegressor。将此代码更改为

    etr = ensemble.ExtraTreesRegressor()
    etr.fit(x_train, y_train)
    

    你会得到y 丢失的看似奇怪的错误,因为.fit 是一个实例方法,所以这个函数的第一个参数实际上是self。当您在实例上调用.fit 时,会自动传递self。如果您在类(而不是实例)上调用.fit,则必须提供self。所以你的代码相当于ensemble.ExtraTreesRegressor.fit(self=x_train, x=y_train)

    有关差异的示例,请参见下面的示例。这两种形式在功能上是等效的,但是您可以看到第一种形式很笨重。

    from sklearn import ensemble
    
    # Synthetic data.
    x = [[0]]
    y = [1]
    
    myinstance = ensemble.ExtraTreesRegressor()
    ensemble.ExtraTreesRegressor.fit(myinstance, x, y)
    
    etr = ensemble.ExtraTreesRegressor()
    etr.fit(x, y)
    

    【讨论】:

    • 是的,是括号'()'。谢谢雅库布!! :)
    • 太好了,如果这回答了您的问题,请点击绿色复选标记将其标记为答案。
    猜你喜欢
    • 2021-10-19
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2021-04-28
    • 2020-02-15
    • 2019-03-08
    • 2016-06-30
    相关资源
    最近更新 更多