gpt4 book ai didi

python - _transform() 接受 2 个位置参数,但给出了 3 个

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:04 30 4
gpt4 key购买 nike

我尝试构建一个具有变量转换的管道我按照下面的方式做

import numpy as np
import pandas as pd
import sklearn
from sklearn import linear_model
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline

数据框

df = pd.DataFrame({'y': [4,5,6], 'a':[3,2,3], 'b' : [2,3,4]})

我尝试为预测获取一个新变量

class Complex():
def __init__(self, X1, X2):
self.a = X1
self.b = X2
def transform(self, X1, X2):
age = pd.DataFrame(self.a - self.b)
return age
def fit_transform(self, X1, X2):
self.fit( X1, X2)
return self.transform(X1, X2)

def fit(self, X1, X2):
return self

然后我做一个管道

X = df[['a', 'b']]
y = df['y']
regressor = linear_model.SGDRegressor()
pipeline = Pipeline([
('transform', Complex(X['a'], X['b'])) ,
('model_fitting', regressor)
])
pipeline.fit(X, y)

我得到错误

pred = pipeline.predict(X)
pred
TypeError Traceback (most recent call last)
<ipython-input-555-7a07ccb0c38a> in <module>()
----> 1 pred = pipeline.predict(X)
2 pred

C:\Program Files\Anaconda3\lib\site-packages\sklearn\utils\metaestimators.py in <lambda>(*args, **kwargs)
52
53 # lambda, but not partial, allows help() to work with update_wrapper
---> 54 out = lambda *args, **kwargs: self.fn(obj, *args, **kwargs)
55 # update the docstring of the returned function
56 update_wrapper(out, self.fn)

C:\Program Files\Anaconda3\lib\site-packages\sklearn\pipeline.py in predict(self, X)
324 for name, transform in self.steps[:-1]:
325 if transform is not None:
--> 326 Xt = transform.transform(Xt)
327 return self.steps[-1][-1].predict(Xt)
328

TypeError: transform() missing 1 required positional argument: 'X2'

我做错了什么?我看到错误在类 Complex() 中。如何解决?

最佳答案

所以问题是 transform 需要一个 array of shape [n_samples, n_features]

的参数

请参阅 documentation of sklearn.pipeline.Pipeline 中的示例部分,它使用 sklearn.feature_selection.SelectKBest 作为转换,你可以看到它的 source它期望 X 是一个数组,而不是单独的变量,例如 X1X2

简而言之,您的代码可以这样修复:


import pandas as pd
import sklearn
from sklearn import linear_model
from sklearn.pipeline import Pipeline

df = pd.DataFrame({'y': [4,5,6], 'a':[3,2,3], 'b' : [2,3,4]})

class Complex():
def transform(self, Xt):
return pd.DataFrame(Xt['a'] - Xt['b'])

def fit_transform(self, X1, X2):
return self.transform(X1)

X = df[['a', 'b']]
y = df['y']
regressor = linear_model.SGDRegressor()
pipeline = Pipeline([
('transform', Complex()) ,
('model_fitting', regressor)
])
pipeline.fit(X, y)

pred = pipeline.predict(X)
print(pred)

关于python - _transform() 接受 2 个位置参数,但给出了 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40363650/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com