我有:
- 维基百科条目访问数(每周)(A-B-C)
- 地面真实数据(每周)
- 维基百科英文文章总访问量(每周)
我的目的是,用3个维基百科文章访问计数构建一个多元线性回归,并尝试预测未来的真实数据。
在开始构建多元线性回归之前,我想对我的3个维基百科访问计数数据进行一些预处理(规范化或缩放)。
我的数据格式是这样的
date | A (x1) | B (x2) | C (x3) | total_en | ground truth(y)
01/01/2008 | 5611 | 606 | 376 | 1467923911 | 3.13599886
08/01/2008 | 8147 | 912 | 569 | 1627405409 | 2.53335614
15/01/2008 | 9809 | 873 | 597 | 1744099880 | 2.91287713
22/01/2008 | 12020 | 882 | 600 | 1804646235 | 3.44497102
... | ... | ... | ... | ... | ...
没有归一化,我像这样构建多元线性回归。
wiki3。shape =(150,3)//包含A-B-C的文章
ground_truth =(150,1)//包含numpy数组中的ground truth数据
X_train, X_test, y_train, y_test = cross_validation.train_test_split(wiki3, ground_truth, test_size=0.3, random_state=1)
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
我的问题是为了更好的结果我如何规范化/缩放我的x1,x2,x3和y数据?
我应该用英文文章的总流量规范化每篇文章吗?还是应该用另一种方式?
K-Fold交叉验证对时间序列是否合理?
谢谢。
要扩展数据,可以使用sklearn.preprocessing.scale
。如果date
是您的index
,则与wiki3_scaled = scale(wiki3)
一样简单(如果不是,则date
也将缩放,这可能是您不想要的)。
使用total_en
进行规范化是一个建模决策。如果您有理由相信A / total_en
是一个比A
更好的特性,那么就使用它吧。最好两者都试试。
如果你试图从同一天的A
、B
和C
预测ground truth
,那么它就不是一个真正的时间序列问题,k-Fold交叉验证当然是明智的。如果你试图从今天的A
, B
, C
, ground truth
以及各自的滞后变量预测未来的ground truth
,那么我不明白为什么你也不能交叉验证;只是要小心地设置它,以便您根据历史进行培训,并针对未来进行交叉验证。
您可能会在Cross Validated上得到这些建模决策的更好答案,因为StackOverFlow更侧重于编程。