TypeError: fit () отсутствует 1 обязательный позиционный аргумент: 'y' (с использованием sklearn - ExtraTreesRegressor) - PullRequest
0 голосов
/ 03 августа 2020

Просто пробовал библиотеку 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 равно none. другие примеры мне не очень помогли, но также может быть, что я новичок в python и не могу обнаружить простую ошибку кода.

документация fit ():

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

Заранее благодарим за помощь.

1 Ответ

1 голос
/ 03 августа 2020

Проблема здесь

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

Вам необходимо создать экземпляр ensemble.ExtraTreesRegressor, прежде чем вызывать fit. Измените этот код на

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...