2016-05-30 73 views
0

下面我的代码预测的数字是非常具体的,我没有得到任何确切的匹配,但有些非常接近。例如,某个日期实际上有388个事件,这可能预测为397.Scikit学习未来值的预测时间间隔?

  • 我可以输出一个范围如370-410吗?或者看到该值会在一个范围内的百分比机会?或者我应该将这些值分类并以这种方式检查准确性?

代码:

def make_prediction(label, prediction): 
    X = df[[col1, col2, col3]].values 
    y = df[label].values 
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2) 
    X_train.shape, X_test.shape 
    clf = linear_model.LinearRegression() 
    clf.fit(X_train, y_train) 
    output = clf.predict(X) 
    result = np.c_[X, output] 
    df_result = pd.DataFrame(result, columns=[col1, col2, col3, prediction]) 
    return df_result 

所以上面的代码放置一个值的每一行(它是在这种情况下,一个日期,但我从1编号它们向前基于在数据集中的第一个值。如何预测未来值?当我运行上面的代码时,我只能得到现有数据的预测值,如何在其他数据集上使用该模型或输入未来日期?

+0

基于输出,你为什么不能有这将其转换成范围的包装? –

+0

如何?这是我第一次使用Scikit-learn,并且使用了我在网上找到的几个笔记本和博客来镜像我的代码。尽管他们使用分类,所以他们能够检查他们的预测是否符合现实。但我的预测并不完全一致。我试图根据过去几个月的每日历史数据来预测下周的每周工作日事件。这是一个时间序列分析。 – trench

回答

1

假设您需要在预测值,你可以使用熊猫cut()如下:

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([270,201,375,370,410,510], columns=['prediction']) 

In [3]: bins = [0,370,420,600] 

In [4]: group_labels = ['(0-370]', '(371-420]', '(421-600]'] 

In [5]: df['prediction_range'] = pd.cut(df.prediction, bins, labels=group_labels) 

In [6]: df 
Out[6]: 
    prediction prediction_range 
0   270   (0-370] 
1   201   (0-370] 
2   375  (371-420] 
3   370   (0-370] 
4   410  (371-420] 
5   510  (421-600] 

参考:Binning Data In Pandas