Pandas 在Sklearn Custom Transformer中添加TimeSeries功能
我使用的是一个时间序列数据集,如下所示: 我想添加一些功能,如SMA、EWMA和其他可能的指标,让我的数据集保持这样: 在开发和调整模型时,我想使用Sklearn管道在我的train datatset中添加特性。但是,当我将nan值放入管道中时,会收到以下错误:Pandas 在Sklearn Custom Transformer中添加TimeSeries功能,pandas,scikit-learn,time-series,pipeline,feature-engineering,Pandas,Scikit Learn,Time Series,Pipeline,Feature Engineering,我使用的是一个时间序列数据集,如下所示: 我想添加一些功能,如SMA、EWMA和其他可能的指标,让我的数据集保持这样: 在开发和调整模型时,我想使用Sklearn管道在我的train datatset中添加特性。但是,当我将nan值放入管道中时,会收到以下错误: "ValueError: Found input variables with inconsistent numbers of samples:" 我知道在删除nan值后,我的X小于Y。但我找不到解释我如何做到
"ValueError: Found input variables with inconsistent numbers of samples:"
我知道在删除nan值后,我的X小于Y。但我找不到解释我如何做到这一点的东西
有没有办法在Sklearn管道中创建这些时间序列功能
示例代码:
import pandas as pd
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.base import TransformerMixin, BaseEstimator
from sklearn.linear_model import LinearRegression
dates = pd.date_range('2000-1-1', '2010-1-1')
df = pd.DataFrame()
df["dates"] = dates
df["values"] = np.arange(1, len(dates)+1) * 1000
df["next_values"] = df["values"].shift(1)
df.set_index("dates", inplace=True)
df.dropna(inplace=True)
X = df.drop("next_values", axis=1)
y = df["next_values"]
class ExampleTransformer(BaseEstimator, TransformerMixin):
def __init__(self, sma1_period, sma2_period):
self.sma1_period = sma1_period
self.sma2_period = sma2_period
def fit(self, X, y):
return self
def transform(self, X):
out_df = pd.DataFrame()
out_df["values"] = X["values"]
out_df["sma1"] = X["values"].rolling(self.sma1_period).mean()
out_df["sma2"] = X["values"].rolling(self.sma2_period).mean()
# Drop NaN values
out_df.dropna(inplace=True)
return out_df
pipe = Pipeline(steps=[
("exe_trans", ExampleTransformer(10, 20)),
("lin_reg", LinearRegression())
])
pipe.fit(X, y)
# ValueError: Found input variables with inconsistent numbers of samples: [3634, 3653]
这个问题是由于您正在删除X的行,而不是y的行,结果是不同的形状。然而,正如回答的那样,您不能使用转换器来改变y