如何解决在Sklearn自定义变压器中添加TimeSeries功能
我正在使用类似以下的Times Series数据集:
我想添加一些功能,例如SMA,EWMA和其他可能的指标,使我的数据集保持这种方式:
我想在开发和调整模型时使用Sklearn管道来完成在火车数据集中添加要素的工作。但是,当我在管道中放置nan值时,收到以下错误:
"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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。