问题描述
我正在使用类似以下的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 (将#修改为@)