归一化时间序列 - Scikit

时间:2015-05-19 13:09:16

标签: python machine-learning scikit-learn regression normalization

我有:

  1. 3维基百科文章访问次数(每周)(A-B-C)
  2. 地面实况数据(每周)
  3. 总维基百科英文文章流量计数(每周)
  4. 我的目的是,使用 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)//包含带有numpy数组的A-B-C文章

         

    ground_truth =(150,1)//在numpy数组中包含地面实况数据

    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交叉验证是否合理?

    感谢。

1 个答案:

答案 0 :(得分:0)

要扩展数据,您可以使用sklearn.preprocessing.scale。如果dateindex,它就像wiki3_scaled = scale(wiki3)一样简单(如果没有,那么date也会被缩放,你很可能不会这样做要)。

使用total_en进行规范化是一项建模决策。如果您有理由相信A / total_en是一个比A更好的功能,那就去吧。更好的是,尝试两者。

如果您尝试从当天ground truthAB预测C,那么它不是真正的时间 - 系列问题和k-fold交叉验证肯定是明智的。如果您尝试预测今天的ground truth来自ABCground truth,并且可能相应的滞后变量,然后我不明白你为什么不能交叉验证;只需要小心设置,以便训练历史并对未来进行交叉验证。

您可以在Cross Validated上获得关于这些建模决策的更好答案,因为StackOverFlow更注重编程。