支持向量回归预测怎么做_使用支持向量回归进行Facebook股票预测

使用Python和支持向量回归

8a0fa06c79064dfcca56c62de5b77a2e.png

在本文中,我将向您展示如何使用称为支持向量回归(SVR)的机器学习算法创建自己的股票预测Python程序。在这个程序中,我将使用Facebook(FB)股票数据,并根据数据预测某天的开盘价。

支持向量回归(SVR)是一种支持向量机,也是一种用于分析数据进行回归分析的监督学习算法。1996年,由Christopher J. C. BurgesVladimir N. VapnikHarris DruckerAlexander J. SmolaLinda Kaufman提出了该版本的SVM回归模型。SVR生成的模型只依赖于训练数据的一个子集,因为用于构建模型的成本函数忽略了任何接近模型预测的训练数据。

支持向量机优点:

  1. 它在高维空间中效果明显。
  2. 如果有清晰的间隔界限,工作效果会很好。
  3. 少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本,“剔”除大量冗余样本。

支持向量回归缺点:

  1. 当我们有大量数据集时,它表现不佳。
  2. 如果数据集有噪声(大量额外的无意义信息),性能就会很低。

内核类型:

  1. 线性
  2. 多项式
  3. 高斯核函数( 径向基函数 rbf )
  4. Sigmoid

开始编程:

在编写单行代码之前,我们最好是在代码前添加注释来描述我们需要做的事情。通过这种方式,可以回顾代码并确切知道它的作用。我们使用支持向量回归(SVR)模型来预测某一天FB股票的价格。

导入我们需要的库

import pandas as pdimport numpy as npfrom sklearn.svm import SVRimport matplotlib.pyplot as plt
57adbda7181c6e4be06c7deac2f1779a.png

接下来,我将把从finance.yahoo.com获得的Facebook(FB)股票数据加载到一个名为'df'的数据框缩写变量中。然后输出前几行的数据。

注意:这是过去31天,2019-05-01至2019-05-31的雅虎数据。

但雅虎可能在某些日子里没有记录股票的价格,因此数据集中的记录数量可能少于天数。

#Load the datadf = pd.read_csv('FB_30_days.csv')df.head()
e297d73d7bd732774cbfe185d67f35fd.png
51b5644fa173bd20663d28627cb13cbf.png

来自FB_30_days.csv的前5行数据

通过将它们设置为空列表,创建将用作独立和依赖数据集的变量。

#Create the lists / X and y data setdates = []prices = []
28737ac21e4372fddd338fec6fcaab7c.png

获取数据集中的行数和列数,以查看每个行的数量和列的数量,数据有22行和7列。

#Get the number of rows and columns in the data setdf.shape
f76542700433dd944cdbeb40a25c7939.png

数据集中有22行和7列

数据集中有22行和7列

输出最后一行数据(这将是我们测试的数据)。注意日期是2019-05-31,所以当天的日期是31号。这将是模型的输入,用于预测开盘价为180.279999美元。

#Print the last row of data (this will be the data that we test on)df.tail(1) 
1feb41b4edc8289cba73ce385488b4d5.png
739eb4787e684c5d3886ee85289010da.png

用于测试/验证模型的最后一行数据

通过获取除了用于测试模型的最后一行之外的所有数据来重新创建数据框,并将缺少最后一行的新数据重新存储到'df'。然后输出新数据集的新行数和列数。

#Get all of the data except for the last rowdf = df.head(len(df)-1)print(df.shape)
89fc44df45bfc36f023ed61bccffd844.png

新数据少了一行。总共有21行7列的数据

获取Date列中的所有行并将其存储到名为'df_dates'的变量中,并从Open列获取所有行,并将数据存储到名为'df_open'的变量中。

df_dates = df.loc[:,'Date'] # Get all of the rows from the Date columndf_open = df.loc[:,'Open'] #Get all of the rows from the Open column
074d01fdcfe1bb03b49d2d040d0f786c.png

创建独立的数据集'X',并将数据存储在变量'dates'中。

创建依赖数据集'y',并将数据存储在变量'prices'中。

两者都可以通过将数据附加到每个列表来完成。

注意:对于独立数据集,我们只需要从日期开始的那一天,因此我使用split函数获取当天的日期并将其转换为整数,同时将数据附加到日期列表中。

#Create the independent data set 'X' as datesfor date in df_dates: dates.append( [int(date.split('-')[2])] ) #Create the dependent data set 'y' as pricesfor open_price in df_open: prices.append(float(open_price))
7f5ac10e136b80497f66ec6df0eb79ef.png

查看数据集中记录的日期天数。

#See what days were recoreded in teh data setprint(dates)
600c2f4b6fb62a676430bf1217c352bb.png
c0ed82ebac88779c027e856cc30da141.png

数据集中记录的日期

创建一个函数,该函数使用3个不同的支持向量回归(SVR)模型和三个不同的内核,这样可以查看哪个内核表现最佳。这个函数将有三个参数,日期,价格和我们想要预测价格的日期。为此,首先我将创建具有3个不同内核的3个SVR模型(线性,多项式,径向基函数)。接下来,我将使用日期和价格数据对每个模型进行训练。最后但并非最不重要的是,我将在图表上绘制模型,以查看哪个最适合当天的预测。

#Function to make predictions using 3 different support vector regression models with 3 different kernalsdef predict_prices(dates, prices, x):  #Create 3 Support Vector Regression Models 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)  #Train the models on the dates and prices svr_lin.fit(dates,prices) svr_poly.fit(dates, prices) svr_rbf.fit(dates, prices)  #Plot the models on a graph to see which has the best fit plt.scatter(dates, prices, color = 'black', label='Data') plt.plot(dates, svr_rbf.predict(dates), color = 'red', label='RBF model') plt.plot(dates, svr_lin.predict(dates), color = 'green', label='Linear model') plt.plot(dates, svr_poly.predict(dates), color = 'blue', label='Polynomial model') plt.xlabel('Date') plt.ylabel('Price') plt.title('Support Vector Regression') plt.legend() plt.show()  #return all three model predictions return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]
46ff7388e5038ca611e3711bad855813.png

现在我可以开始进行FB股票价格预测了。回顾原始数据集中除去的的最后一行数据,日期是2019-05-31,这将是预测开盘价格的模型输入,即180.279999美元。

现在我将测试模型并将我所需要预测的日期设置为31。下图中的最优模型似乎是RBF,它是使用称为径向基函数的内核的支持向量回归模型。该模型预测第31天的价格为180.333549美元,这非常接近实际价格180.279999美元

#Predict the price of FB on day 31predicted_price = predict_prices(dates, prices, [[31]])print(predicted_price)
02d54085e47ef7824824f79ecd9ecb4c.png
2ca33ecf4a39937d5c94b4ff6a8e3c75.png

目前来说你已经完成了创建SVR程序来预测FB股票的内容!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值