当前位置: 首页 > 面试题库 >

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

邹祺
2023-03-14
问题内容

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

import csv
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt


plt.switch_backend('newbackend')

seq_num=[]
win=[]

def get_data(filename):
    with open(filename, 'r') as csvfile:
        csvFileReader = csv.reader(csvfile)
        next(csvFileReader) # skipping column names
        for row in csvFileReader:
            seq_num.append(int(row[0])
            win.append(int(row[6]))
    return

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= 'Data') 
    plt.plot(y, svr_rbf.predict(X), color= 'red', label= 'RBF model') 
    plt.plot(y,svr_lin.predict(X), color= 'green', label= 'Linear model') 
    plt.plot(y,svr_poly.predict(X), color= 'blue', label= 'Polynomial model') 
    plt.xlabel('X, other features')
    plt.ylabel('win')
    plt.title('Support Vector Regression')
    plt.legend()
    plt.show()

    return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]

get_data('net_data.csv')


predicted_win = predict_win(X, y, 29)

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

0.007804347,10.0.0.11:49438,10.0.12.12:5001,32,3796291040,3796277984,10,2147483647,28960,3034,29312
0.007856739,10.0.0.11:49438,10.0.12.12:5001,32,3796293936,3796278008,11,2147483647,29056,2999,29312
0.010605189,10.0.0.11:49438,10.0.12.12:5001,32,3796320000,3796291040,20,2147483647,55040,2969,29312
0.010850907,10.0.0.11:49438,10.0.12.12:5001,32,3796348960,3796305520,30,2147483647,84096,2946,29312
0.013598458,10.0.0.11:49438,10.0.12.12:5001,32,3796377920,3796320000,40,2147483647,113024,2951,29312
0.01368011,10.0.0.11:49438,10.0.12.12:5001,32,3796434392,3796348960,60,2147483647,170880,2956,29312
0.015104265,10.0.0.11:49438,10.0.12.12:5001,32,3796434392,3796363440,70,2147483647,199936,2940,29312
0.016406964,10.0.0.11:49438,10.0.12.12:5001,32,3796490864,3796377920,80,2147483647,220160,2943,29312
0.016465876,10.0.0.11:49438,10.0.12.12:5001,32,3796537200,3796432944,81,80,330240,2925,29312
0.018355321,10.0.0.11:49438,10.0.12.12:5001,32,3796547336,3796434392,81,80,333056,2914,29312
0.020171945,10.0.0.11:49438,10.0.12.12:5001,32,3796603808,3796490864,83,80,382336,2956,29312
0.237314523,10.0.0.11:49438,10.0.12.12:5001,32,3810417728,3809658976,529,396,1775360,7109,29312
0.237409075,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,530,397,1859328,7381,29312
0.237486647,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,371,371,1960704,7365,29312
0.237807596,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,371,371,1980928,7362,29312
0.237989588,10.0.0.11:49438,10.0.12.12:5001,44,3810417728,3809700968,371,371,1989632,7400,29312
0.259123971,10.0.0.11:49438,10.0.12.12:5001,32,3811590608,3811251776,261,260,2267648,5885,29312
0.259174008,10.0.0.11:49438,10.0.12.12:5001,32,3811655768,3811289424,261,260,2267648,5918,29312
0.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))  # <----This line

    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= 'Data') 
    plt.plot(y, svr_rbf.predict(X), color= 'red', label= 'RBF model') 
    plt.plot(y,svr_lin.predict(X), color= 'green', label= 'Linear model') 
    plt.plot(y,svr_poly.predict(X), color= 'blue', label= 'Polynomial model') 
    plt.xlabel('X, other features')
    plt.ylabel('win')
    plt.title('Support Vector Regression')
    plt.legend()
    plt.show()

    return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]

其次,我不知道为什么有读取CSV的完整功能。忽略它并使用熊猫。这是将起作用的示例代码:

from sklearn import svm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def 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 model')
    plt.plot(y,svr_lin.predict(X),color='green',label='Linear model')
    plt.plot(y,svr_poly.predict(X),color='blue', label='Polynomial model')
    plt.xlabel('X, other features')
    plt.ylabel('win')
    plt.title('Support Vector Regression')
    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.values

y = 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]

在中间步骤中,您需要清理导入的数据,将其从数据帧转换为numpy数组,将第7列复制为适合的回归值,从训练数据中删除它,并重建新的数组,然后再拟合为SVR。

df = pd.read_csv('data.csv')

data_np_array = df.values

y = 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))

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



 类似资料:
  • 问题内容: 这是我训练完整模型并保存它的代码: 之后,我看到大多数时候人们都建议我们使用测试数据集来检查预测,这也是我尝试过并获得良好结果的结果。 但是问题出在我创建的模型的使用上。我想对未来30天或每分钟的天气预报。现在,我拥有训练有素的模型,但是无法获得所能做的事情或使用什么代码来使用该模型并无法预测未来30天或一分钟的价格。 请给我建议出路。一个星期以来,我一直在解决这个问题,无法进行任何成

  • 我正在阅读Keras中关于使用LSTM进行多元时间序列预测的教程https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/#comment-442845 我已经看完了整个教程,遇到了一个如下的问题- 在本教程中,在步骤“t-1”中,列车和测试拆分有8个功能,即“污染”、“露水”、“温度”、

  • 我不知道语法是什么意思。感谢任何帮助。 谢谢你。

  • 问题内容: 我想到一个与使用pybrain进行时间序列回归相关的问题。我计划在pybrain中使用LSTM层来训练和预测时间序列。 我在下面的链接中找到了示例代码 例如请求:递归神经网络,用于预测序列中的下一个值 在上面的示例中,网络能够在训练后预测序列。但是问题是,网络通过将数据一次性输入到输入层来获取所有顺序数据。例如,如果训练数据每个都有10个特征,那么这10个特征将同时被同时馈送到10个输

  • 我目前正在处理一个样本数据,该样本数据要求我在R中对给定的数据集执行时间序列预测。所以我需要每天做预测。我收到以下错误消息。 (x,趋势):二进制运算符的非数字参数 我的数据格式 在项目栏中我有三种类型,在区域栏中有18个区域,每个区域我有三个项目,每个项目我有两年的数据(2016-01-01至2017-01-31),我需要预测下一年的数量栏(2018-01-31) 我正在使用下面的代码 当我运行

  • 我有多个部门(零售领域)的每周时间序列数据,基于一些研究,我正在自动化为每个时间序列寻找模型参数的过程。到目前为止,我已经为for循环中的每个时间序列实现了以下模型: 1) ARIMA(R中的auto.ARIMA) 2) stlf(无法使用R的ets功能,因为我有每周数据) 3) TBAT 4) 基于ARIMA误差的回归(使用傅里叶项) 5)基线模型:幼稚 我想了解如何为每个时间序列选择模型。我对

  • 例如,使用我训练的模型来预测未来的数据。也可能是随机/自定义范围。假设我想预测2017年的逐日降雨数据。或者得到25-02-2017的预测数据。也可能是数据集结束后的X天的数据。

  • 问题内容: 有没有一种方法可以使用Oracle分析功能为数据集生成时间序列预测?我们如何在SQL / ORACLE中执行外推。 下面是我的需要 我有如下数据集,我想预测/推断明年 问题答案: 您可以使用REGR线性回归函数创建简单的预测。 下面是示例架构。或者,您可以使用此SQLFiddle。 该函数处理数字对,它不理解诸如“收入不能低于0”之类的业务规则。如果您希望将预测限制为始终保持在0或之上