python - 用于训练模型的管道上的滚动平均值
问题描述
我在使用管道拟合模型时遇到问题,该管道看起来添加具有某些特征的滚动平均值的列,然后训练模型。
数据框:
columns=['yr', 'mnth', 'hr', 'season', 'holiday', 'weekday', 'workingday', 'weathersit', 'temp', 'atemp', 'hum', 'windspeed', 'y']
df=pd.DataFrame(np.array([ [0, 1, 0, 1, 0, 6, 0, 1, 0.24, 2.879, 0.81, 0, 16],
[0, 1, 1, 1, 0, 6, 0, 1, 0.22, 2.727, 0.80, 0, 40],
[0, 1, 2, 1, 0, 6, 0, 1, 0.22, 2.727, 0.80, 0, 32],
[0, 1, 3, 1, 0, 6, 0, 1, 0.24, 2.879, 0.75, 0, 13],
[0, 1, 4, 1, 0, 6, 0, 1, 0.24, 2.879, 0.75, 0, 1]]), columns=columns)
X_train=df.drop('y')
y_train=df['y']
一些特征的滚动平均函数:
def rollingAv(Data):
a=Data['atemp']
a_shifted = a.shift(1)
a_window = a_shifted.rolling(window=4)
a_means = a_window.mean()
Data['a_means'] = a_means
h=Data['hum']
h_shifted = h.shift(1)
h_window = h_shifted.rolling(window=4)
h_means = h_window.mean()
Data['h_means'] = h_means
w=Data['windspeed']
w_shifted = w.shift(1)
w_window = w_shifted.rolling(window=4)
w_means = w_window.mean()
Data['w_means'] = w_means
Data=Data.dropna(subset=['a_means', 'h_means','w_means'])
return Data.values
滚动平均类以适应和转换管道
class BikeRentalFeatureExtractor(BaseEstimator):
def __init__(self):
pass
def fit(self,X, y=None):
X=X.values
if y.shape[0]>0:
y=y[4:]
return y
else:
pass
def transform(x):
return rollingAv(x)
管道和模型
model = Pipeline(steps=[
("extractor", BikeRentalFeatureExtractor()),
("regressor", RandomForestRegressor())
])
parameters = {'regressor__n_estimators':[50,100,200,300]}
st = ShuffleSplit(n_splits=5, test_size=0.2, random_state=0)
clf = GridSearchCV(estimator=model, param_grid=parameters)
clf.fit(X_train,y_train)
我没有错误,直到clf.fit(X_train,y_train)
它似乎与数据相关,因为尽管我收到以下消息,但我删除了该列,我再次尝试,问题继续出现在下一列:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-21-86937c1966f0> in <module>()
----> 1 clf.fit(X_train,y_train)
12 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/base.py in _try_aggregate_string_function(self, arg, *args, **kwargs)
276
277 raise AttributeError(
--> 278 f"'{arg}' is not a valid function for '{type(self).__name__}' object"
279 )
280
AttributeError: 'yr' is not a valid function for 'Series' object
解决方案
fit
假定返回self
transform
是一种方法,应该self
作为第一个参数。
推荐阅读
- javascript - 如果 URL 包含这些字词,则隐藏 div
- c# - 在没有 Active Directory 的情况下管理我的 Windows 应用程序逻辑中的用户
- python - Webapp2 Python set_cookie 不支持同站点cookie?
- python - 在我的案例中,如何使用附加字段设置多对多
- apache-spark - 为什么第一次和第二次执行spark sql查询的执行时间不同?
- python - Python attrs 类属性缓存延迟加载
- html - 为什么SVG图像父元素高度比图像大?
- linux - 复制过去 24 小时内内容更改的特定命名目录
- vba - VBA 编译错误与非常简单的子宏预期:=
- dart - Dart:Dart 如何匹配类的构造函数中的命名参数?