如果给定一组股价数据集我们是不是有可能预测出未来的股价走势中国中铁股票预测?从机器学习的角度来说,预测股价走势就是一个数据科学问题,但从有效市场理论来说,股票市场因为受众多因素影响是随机的和不可预测的seo教学。
在本文中我们将尝试使用三种不同的模型来预测苹果公司的股价,并且我们会把这三种模型的结果绘制在一张图上以进行比较雷正富。因此,本文主要将分为如下四部分:
安装依赖项
收集数据
编写模型脚本
可视化分析
下面是本实现所需要的四个依赖项电子商务网站seo:
pip install csv
pip install numpy
pip install scikit-learn
pip install matplotlib
其中,CSV 允许我们从股价 CSV 格式的文件中读取数据,Numpy 允许我们在数据集上执行计算,而 sikit-learn 允许我们构建预测模型,当然最后我们还需要使用 matplotlib 绘制数据点和模型曲线,因此我们才能进行可视化分析。
下面,首先需要从 Google Finance 下载数据集,我们可以在如下搜索框键入「NASDAQ:AAPL」,在点击左侧的历史数据后选择下载。
下面我们需要写模型,首先我们要导入函数库,小编使用的是 Jupyter notebook,上面四个包是 Anaconda 预安装的,所以直接导入并没有报错。
import csv
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
下面则是定义变量和读取数据的函数 get_data():
dates = []
prices = []
def get_data(filename):
with open(filename, \'r\') as csvfile:
csvFileReader = csv.reader(csvfile)
next(csvFileReader)
for row in csvFileReader:
dates.append(int(row[0].split(\'-\')[0]))
prices.append(float(row[1]))
return
在上面的代码中,我们首先需要初始化两个空列表,即 dates 和 prices。下面我们需要构建 get_data() 以读取股票数据并存入变量中,其中 filename 就是我们所下载的数据集名称。在这个函数中,我们需要打开 CSV 格式的文件,读取并储存在 CSV 文件变量中。Open() 函数代表抽取文件内容,其中\'r\'代表读取操作。如上所示,我们在使用 csv.reader() 读取 csv 文件变量后将其赋予 csvFileReader 变量。并且随后采用一个循环语句对于 csv 文件的每一行,将日期和价格分别添加到我们前面所定义的变量中,python 中的 append 方法会在列表尾部添加一个新元素。而 Python 中的 split() 方法通过指定分隔符对字符串进行切片,在本文的语句中 row[0].split(\'-\')[0] 代表 csv 文件每行的第一元素以\'-\'为标准进行分割,并且只取分割后的第一个元素,也就是每个月的哪一天。
def predict_prices(dates, prices, x):
dates = np.reshape(dates, (len(dates), 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_lin.fit(dates, prices)
svr_poly.fit(dates, prices)
svr_rbf.fit(dates, prices)
如上所示的代码,下面我们需要构建预测模型。首先需要使用 Numpy 将列表元素转换为 n*1 的矩阵,其中 reshape 函数的三个参数分别代表所要重塑的列表元素、长度为列表元素的个数、并且为 1*n 维矩阵,n 的值等于我们数据量的大小。下面我们创建出三种支持向量机模型。
支持向量机是一种强大的分类模型,它试图在保留最大间隔的条件下寻找决策边界并将数据分割出来,然后模型根据决策边界对新数据进行预测。SVM 同样可以用于回归任务,支持向量回归同样也是一种 SVM 模型,它将数据点间的间隔作为误差以预测最可能出现的下一个数据点。
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=\"Ploynomial Model\")
plt.xlabel(\'Dates\')
plt.ylabel(\'Price\')
plt.title(\'Support Vector Reg\')
plt.legend()
plt.show()
return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]
get_data(\'aapl.csv\')
predicted_prices = predict_prices(dates, prices, 29)
print(predicted_prices)
随后我们可以创建图表,我们可以将初始数据点表示为黑点,不同的模式使用不同颜色的曲线表示。如上所示,我们在使用 plot() 函数时,因为要在一张图上绘制所有的信息,所以我们需要将所有信息绘制完成后在 plot.show() 展示图像。其中 plt.scatter() 表示绘制散点图,而 plt.plot() 表示绘制连线图。在绘制模型曲线时,我们需要调用前面使用 scikit-learn 训练的模型预测器,比如说 svr_lin.fit(dates, prices) 代表使用数据拟合线性支持向量回归,而后面需要调用这一模型进行预测就需要使用 svr_lin.predict(dates),其代表着调用模型对变量 datas 中的数据进行预测。
下面展示了这三个模型所绘制出的可视化图表。