在Sklearn自定义变压器中添加TimeSeries功能

问题描述

我正在使用类似以下的Times Series数据集:

Dataset Example

我想添加一些功能,例如SMA,EWMA和其他可能的指标,使我的数据集保持这种方式:

Dataset with some features

我想在开发和调整模型时使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...