我正在尝试训练一个模型来预测我屋顶的太阳能发电。这是我当前的数据集:https://pastebin.com/gtZcGi2m。它是利用一些气象api和实际产生的电力建造的。
我在ML.NET中使用了这个,让它自动找到最好的模型。问题是,如果太阳辐射是0,但是时间大约是下午2点,它仍然可以预测2000-3000年的产生。基本上,它的表现很差。我认为分裂datetime列可能是有意义的。时间是最重要的组成部分,但也对月/日有影响。我怎样才能为自己的价值观做好准备,才能得到更好的榜样?
发布于 2022-11-21 10:41:03
如果使用Python,则可以利用库特征引擎从时间戳中自动提取日期和时间组件。
如果时间戳在索引中,可以执行如下操作:
创建玩具数据集:
import pandas as pd
X = {"ambient_temp": [31.31, 31.51, 32.15, 32.39, 32.62, 32.5, 32.52, 32.68],
"module_temp": [49.18, 49.84, 52.35, 50.63, 49.61, 47.01, 46.67, 47.52],
"irradiation": [0.51, 0.79, 0.65, 0.76, 0.42, 0.49, 0.57, 0.56],
"color": ["green"] * 4 + ["blue"] * 4,
}
X = pd.DataFrame(X)
X.index = pd.date_range("2020-05-15 12:00:00", periods=8, freq="15min")自动提取特征:
from feature_engine.datetime import DatetimeFeatures
dtf = DatetimeFeatures(variables="index")
Xtr = dtf.fit_transform(X)
Xtr生成的dataframe:
ambient_temp module_temp irradiation color month \
2020-05-15 12:00:00 31.31 49.18 0.51 green 5
2020-05-15 12:15:00 31.51 49.84 0.79 green 5
2020-05-15 12:30:00 32.15 52.35 0.65 green 5
2020-05-15 12:45:00 32.39 50.63 0.76 green 5
2020-05-15 13:00:00 32.62 49.61 0.42 blue 5
2020-05-15 13:15:00 32.50 47.01 0.49 blue 5
2020-05-15 13:30:00 32.52 46.67 0.57 blue 5
2020-05-15 13:45:00 32.68 47.52 0.56 blue 5
year day_of_week day_of_month hour minute second
2020-05-15 12:00:00 2020 4 15 12 0 0
2020-05-15 12:15:00 2020 4 15 12 15 0
2020-05-15 12:30:00 2020 4 15 12 30 0
2020-05-15 12:45:00 2020 4 15 12 45 0
2020-05-15 13:00:00 2020 4 15 13 0 0
2020-05-15 13:15:00 2020 4 15 13 15 0
2020-05-15 13:30:00 2020 4 15 13 30 0
2020-05-15 13:45:00 2020 4 15 13 45 0如果datetime特性位于一个或多个列中,而不是索引中,则可以指示在variables参数中使用哪些列:
dtf = DatetimeFeatures(variables=["var_1", "var_2"])类DatetimeFeatures默认创建许多特性,您可以通过初始化转换器时设置参数features_to_extract="all"来创建所有可能的特性。或者,传递一个包含您想要创建的功能的列表。
DatetimeFeatures 文档中的更多细节。
DatetimeFeatures运行在熊猫dt模块的顶部。
https://datascience.stackexchange.com/questions/112357
复制相似问题