1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 运用spss modeler运用支持向量机_使用支持向量回归进行Facebook股票预测

运用spss modeler运用支持向量机_使用支持向量回归进行Facebook股票预测

时间:2021-12-10 17:17:15

相关推荐

运用spss modeler运用支持向量机_使用支持向量回归进行Facebook股票预测

使用Python和支持向量回归

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

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

支持向量机优点:

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

支持向量回归缺点:

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

内核类型:

线性多项式高斯核函数( 径向基函数 rbf )Sigmoid

开始编程:

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

导入我们需要的库

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

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

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

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

#Load the datadf = pd.read_csv('FB_30_days.csv')df.head()

来自FB_30_days.csv的前5行数据

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

#Create the lists / X and y data setdates = []prices = []

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

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

数据集中有22行和7列

数据集中有22行和7列

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

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

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

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

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

新数据少了一行。总共有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

创建独立的数据集'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))

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

#See what days were recoreded in teh data set

数据集中记录的日期

创建一个函数,该函数使用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 Modelssvr_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 pricessvr_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 fitplt.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 predictionsreturn svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]

现在我可以开始进行FB股票价格预测了。回顾原始数据集中除去的的最后一行数据,日期是-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)

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。