预测:使用SVR模块进行时间序列未来事件的预测

我想使用scikit-learn中的SVR模块进行时间序列未来事件的预测。以下是我正在尝试使用的源代码:

import csvimport numpy as npfrom sklearn.svm import SVRimport matplotlib.pyplot as pltplt.switch_backend('newbackend')seq_num=[]win=[]def get_data(filename):    with open(filename, 'r') as csvfile:        csvFileReader = csv.reader(csvfile)        next(csvFileReader) # 跳过列名        for row in csvFileReader:            seq_num.append(int(row[0]))            win.append(int(row[6]))    return seq_num, windef predict_win(X, y, x):    # win = np.reshape(X,(len(X), 1))     svr_lin = SVR(kernel= 'linear', C= 1e3)    svr_poly = SVR(kernel= 'poly', C= 1e3, degree= 2)    svr_rbf = SVR(kernel= 'rbf', C= 1e3, gamma= 0.1)     svr_rbf.fit(X, y)     svr_lin.fit(X, y)    svr_poly.fit(X, y)    plt.scatter(X, y, color= 'black', label= '数据')     plt.plot(y, svr_rbf.predict(X), color= 'red', label= 'RBF模型')     plt.plot(y,svr_lin.predict(X), color= 'green', label= '线性模型')     plt.plot(y,svr_poly.predict(X), color= 'blue', label= '多项式模型')     plt.xlabel('X,其他特征')    plt.ylabel('胜')    plt.title('支持向量回归')    plt.legend()    plt.show()    return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]seq_num, win = get_data('net_data.csv')predicted_win = predict_win(seq_num, win, 29)

我的数据集非常大,所以我包含了CSV数据集的一部分。我对第七列感兴趣。我想预测第七列的值何时增加或减少。是否可以仅查看第七列并进行时间序列预测?对此的任何帮助将不胜感激!谢谢!

0.007804347,10.0.0.11:49438,10.0.12.12:5001,32,3796291040,3796277984,10,2147483647,28960,3034,293120.007856739,10.0.0.11:49438,10.0.12.12:5001,32,3796293936,3796278008,11,2147483647,29056,2999,293120.010605189,10.0.0.11:49438,10.0.12.12:5001,32,3796320000,3796291040,20,2147483647,55040,2969,293120.010850907,10.0.0.11:49438,10.0.12.12:5001,32,3796348960,3796305520,30,2147483647,84096,2946,293120.013598458,10.0.0.11:49438,10.0.12.12:5001,32,3796377920,3796320000,40,2147483647,113024,2951,293120.01368011,10.0.0.11:49438,10.0.12.12:5001,32,3796434392,3796348960,60,2147483647,170880,2956,293120.015104265,10.0.0.11:49438,10.0.12.12:5001,32,3796434392,3796363440,70,2147483647,199936,2940,293120.016406964,10.0.0.11:49438,10.0.12.12:5001,32,3796490864,3796377920,80,2147483647,220160,2943,293120.016465876,10.0.0.11:49438,10.0.12.12:5001,32,3796537200,3796432944,81,80,330240,2925,293120.018355321,10.0.0.11:49438,10.0.12.12:5001,32,3796547336,3796434392,81,80,333056,2914,293120.020171945,10.0.0.11:49438,10.0.12.12:5001,32,3796603808,3796490864,83,80,382336,2956,293120.237314523,10.0.0.11:49438,10.0.12.12:5001,32,3810417728,3809658976,529,396,1775360,7109,293120.237409075,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,530,397,1859328,7381,293120.237486647,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,371,371,1960704,7365,293120.237807596,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,371,371,1980928,7362,293120.237989588,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,371,371,1989632,7400,293120.259123971,10.0.0.11:49438,10.0.12.12:5001,32,3811590608,3811251776,261,260,2267648,5885,293120.259174008,10.0.0.11:49438,10.0.12.12:5001,32,3811655768,3811289424,261,260,2267648,5918,293120.262546461,10.0.0.11:49438,10.0.12.12:5001,32,3811720928,3811354584,261,260,2267648,5823,29312

回答:

好的,以下svm函数存在问题:

第二行,win = ...未使用,将会导致错误。删除它。

def predict_win(X, y, x):    # win = np.reshape(X,(len(X), 1))  # <----这一行    svr_lin = SVR(kernel= 'linear', C= 1e3)    svr_poly = SVR(kernel= 'poly', C= 1e3, degree= 2)    svr_rbf = SVR(kernel= 'rbf', C= 1e3, gamma= 0.1)     svr_rbf.fit(X, y)     svr_lin.fit(X, y)    svr_poly.fit(X, y)    plt.scatter(X, y, color= 'black', label= '数据')     plt.plot(y, svr_rbf.predict(X), color= 'red', label= 'RBF模型')     plt.plot(y,svr_lin.predict(X), color= 'green', label= '线性模型')     plt.plot(y,svr_poly.predict(X), color= 'blue', label= '多项式模型')     plt.xlabel('X,其他特征')    plt.ylabel('胜')    plt.title('支持向量回归')    plt.legend()    plt.show()    return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]

其次,我不知道为什么需要一个完整的函数来读取csv。忽略它,使用pandas。以下是一个可行的样本代码:

from sklearn import svmimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltdef predict_win(X,y,x):    svr_lin = svm.SVR(kernel='linear',C=1e3)    svr_poly = svm.SVR(kernel='poly',C=1e3, degree=2)    svr_rbf = svm.SVR(kernel='rbf',C=1e3,gamma=0.1)    svr_rbf.fit(X,y)    svr_lin.fit(X,y)    svr_poly.fit(X,y)    plt.plot(y,svr_rbf.predict(X),color='red',label='RBF模型')    plt.plot(y,svr_lin.predict(X),color='green',label='线性模型')    plt.plot(y,svr_poly.predict(X),color='blue', label='多项式模型')    plt.xlabel('X,其他特征')    plt.ylabel('胜')    plt.title('支持向量回归')    plt.legend()    plt.show()    return [svr_rbf.predict(x)[0],svr_lin.predict(x)[0],svr_poly.predict(x)[0]]df = pd.read_csv('data.csv')data_np_array = df.valuesy = np.ndarray.copy(data_np_array[:,6])Xleft = np.ndarray.copy(data_np_array[:,:6])Xright = np.ndarray.copy(data_np_array[:,7:])X = np.hstack((Xleft,Xright))x0 = np.ndarray.copy(X[0,:])xp = predict_win(X,y,x0)percent_off = [min(data_np_array[0,2],prediction)/max(data_np_array[0,2],prediction) for prediction in xp]

在拟合到SVR之前,必须完成中间步骤,包括清理导入的数据,将其从数据框转换为numpy数组,将第七列复制为要拟合的回归,从训练数据中删除它,并重建一个新的数组。

df = pd.read_csv('data.csv')data_np_array = df.valuesy = np.ndarray.copy(data_np_array[:,6])Xleft = np.ndarray.copy(data_np_array[:,:6])Xright = np.ndarray.copy(data_np_array[:,7:])X = np.hstack((Xleft,Xright))

让我知道这些是否有效。我只是从上面的数据表中取了几行。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注