编程技术网

关注微信公众号,定时推送前沿、专业、深度的编程技术资料。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

极客时间

通过逐步实施的股票市场预测机器学习

shikhar mishra Python 2022-1-10 23:42 163人围观

腾讯云服务器

This article was published as a part of the Data Science Blogathon

股市预测介绍

股市预测和分析是一些最困难的工作。这有许多原因,包括市场波动性和各种其他依赖性和独立变量,影响市场上一定股票的价值。这些变量使任何股票市场专家都非常困难,以极为精确地预测市场的上升和下降。

然而,随着机器学习的引入及其强大的算法,最近的市场研究和股票市场预测进步已经开始包括分析股票市场数据的这种方法。

In summary, Machine Learning Algorithms are widely utilized by many organizations in Stock market prediction. This article will walk through a simple implementation of analyzing and forecasting the stock prices of a Popular Worldwide Online Retail Store in Python using various Machine Learning Algorithms.

Image 1

股市预测问题陈述

Let us see the data on which we will be working before we begin implementing the software to anticipate stock market values. In this section, we will examine the stock price of Microsoft Corporation (MSFT) as reported by the National Association of Securities Dealers Automated Quotations (NASDAQ). The stock price data will be supplied as a Comma Separated File (.csv), that may be opened and analyzed in Excel or a Spreadsheet.

MSFT的股票列在纳斯达克上,其价值更新了股票市场的每个工作日。应该指出的是,市场不允许周六和周日交易,因此两个日期之间存在差距。每日日期都表示股票的股票,股票的最高和最低价值,以及当天结束时的截止值。

调整后的密切值反映了股息宣布的股票的价值(太技术!)。此外,提供市场的股票总量,其中提供了这些信息,由机器学习/数据科学家的工作看,要查看数据并开发不同的算法,这些算法可能会从历史数据中提取模式微软公司股票。

长期内记忆

我们将使用长期内存(LSTM)方法创建机器学习模型,以预测Microsoft Corporation股票价值。它们用于通过乘以和添加对信息进行微小的更改。长期记忆(LSTM)是深度学习人工复发性神经网络(RNN)架构。

与传统的前锋神经网络不同,LSTM具有反馈连接。它可以处理单个数据点(例如图片)以及完整数据序列(例如语音或视频)。

计划实施

我们现在将参加我们将在Python中利用机器学习的部分来估计使用LSTM的库存值。

导入库

众所周知,第一步是导入预处理Microsoft Corporation股票数据所需的库以及构建和可视化LSTM模型输出所需的其他库。我们将使用TensorFlow框架中的Keras库。所有模块都是从Keras库导入的。

#Importing the Libraries
import pandas as PD
import NumPy as np
%matplotlib inline
import matplotlib. pyplot as plt
import matplotlib
from sklearn. Preprocessing import MinMaxScaler
from Keras. layers import LSTM, Dense, Dropout
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib. dates as mandates
from sklearn. Preprocessing import MinMaxScaler
from sklearn import linear_model
from Keras. Models import Sequential
from Keras. Layers import Dense
import Keras. Backend as K
from Keras. Callbacks import EarlyStopping
from Keras. Optimisers import Adam
from Keras. Models import load_model
from Keras. Layers import LSTM
from Keras. utils.vis_utils import plot_model

开始可视化股票市场预测数据

Using the Pandas Data Reader library, we will upload the stock data from the local system as a Comma Separated Value (.csv) file and save it to a pandas DataFrame. Finally, we will examine the data.

#Get the Dataset
df=pd.read_csv(“MicrosoftStockData.csv”,na_values=[‘null’],index_col=’Date’,parse_dates=True,infer_datetime_format=True)
df.head()

通过打印DataFrame形状来检查空值

在此步骤中,首先,我们将打印数据集的结构。我们检查数据框中的空值,以确保没有。数据集中的空值存在于培训期间的问题,因为它们用作异常值,在培训过程中创建了广泛的方差。

#Print the shape of Dataframe  and Check for Null Values
print(“Dataframe Shape: “, df. shape)
print(“Null Value Present: “, df.IsNull().values.any())
Output:
>> Dataframe Shape: (7334, 6)
>>Null Value Present: False
Date Open High Low Close Adj Close Volume
1990-01-02 0.605903 0.616319 0.598090 0.616319 0.447268 53033600
1990-01-03 0.621528 0.626736 0.614583 0.619792 0.449788 113772800
1990-01-04 0.619792 0.638889 0.616319 0.638021 0.463017 125740800
1990-01-05 0.635417 0.638889 0.621528 0.622396 0.451678 69564800
1990-01-08 0.621528 0.631944 0.614583 0.631944 0.458607 58982400

步骤4 - 真实调整的关闭值的图

调整后的关闭值是将使用机器学习模型预测的最终输出值。该数字表示股票市场交易特定日期的股票的股票价格。

#Plot the True Adj Close Value
df[‘Adj Close’].plot()

设置目标变量并选择要素

然后在以下步骤中将输出列分配给目标变量。这是微软股票的调整后的相对价值。此外,我们选择用作目标变量(依赖变量)的独立变量的功能。我们选择四个特征来占培训目的:

  • Open
  • High
  • Low
  • Volume
#Set Target Variable
output_var = PD.DataFrame(df[‘Adj Close’])
#Selecting the Features
features = [‘Open’, ‘High’, ‘Low’, ‘Volume’]

缩放

为了减少表中数据的计算成本,我们将股票值扩展到0到1之间的值。结果,大量的所有数据都减少,因此存储器消耗降低。此外,由于数据不会以巨大的价值展开,因此我们可以通过缩放来实现更高的精度。要执行此操作,我们将使用SCI-Kit-Learn库的MinMaxScaler类。

#Scaling
scaler = MinMaxScaler()
feature_transform = scaler.fit_transform(df[features])
feature_transform= pd.DataFrame(columns=features, data=feature_transform, index=df.index)
feature_transform.head()
Date Open High Low Volume
1990-01-02 0.000129 0.000105 0.000129 0.064837
1990-01-03 0.000265 0.000195 0.000273 0.144673
1990-01-04 0.000249 0.000300 0.000288 0.160404
1990-01-05 0.000386 0.000300 0.000334 0.086566
1990-01-08 0.000265 0.000240 0.000273 0.072656

如上表所示,与上面给出的真实值相比,特征变量的值按比较下降到较低的值。

创建培训集和股票市场预测的测试集

在将其送入培训模型之前,我们必须将整个数据集分为培训和测试集。该机器学习LSTM模型将在训练集中的数据上培训,并在测试集上进行测试以获得精度和反向化。

SCI-kit-rement库的TimeSeriessplit类将用于此。我们将分割数设置为10,表示将使用10%的数据作为测试集,90%的数据将用于培训LSTM模型。利用该时间序列分割的优点是以规则的时间间隔检查分割时间序列数据样本。

#Splitting to Training set and Test set
timesplit= TimeSeriesSplit(n_splits=10)
for train_index, test_index in timesplit.split(feature_transform):
        X_train, X_test = feature_transform[:len(train_index)], feature_transform[len(train_index): (len(train_index)+len(test_index))]
        y_train, y_test = output_var[:len(train_index)].values.ravel(), output_var[len(train_index): (len(train_index)+len(test_index))].values.ravel()

LSTM的数据处理

一旦训练和测试集最终确定,我们将将数据输入到LSTM模型中。在我们做到的之前,我们必须将培训和测试设置数据转换为LSTM模型可以解释的格式。由于LSTM需要要在3D形式中提供数据,我们首先将训练和测试数据转换为NumPy阵列,然后将它们重构为格式(样本数,1,功能数量)匹配。现在,6667是训练集中的样本数量为7334的90%,并且特征的数量为4,因此训练集被重新装入以反映这一点(6667,1,4)。同样,测试集被重新装入。

#Process the data for LSTM
trainX =np.array(X_train)
testX =np.array(X_test)
X_train = trainX.reshape(X_train.shape[0], 1, X_train.shape[1])
X_test = testX.reshape(X_test.shape[0], 1, X_test.shape[1])

建立LSTM模型的股市预测

最后,我们在建造LSTM模型时到达了这一点。在此步骤中,我们将使用一个LSTM层构建一个连续的Keras模型。LSTM层具有32个单元,然后是一个神经元的一个致密层。

我们使用ADAM优化器和均方误差作为损耗功能编译模型。对于LSTM模型,这是最优选的组合。该模型在下面绘制并呈现。

#Building the LSTM Model
lstm = Sequential()
lstm.add(LSTM(32, input_shape=(1, trainX.shape[1]), activation=’relu’, return_sequences=False))
lstm.add(Dense(1))
lstm.compile(loss=’mean_squared_error’, optimizer=’adam’)
plot_model(lstm, show_shapes=True, show_layer_names=True)

培训股市预测模型

最后,我们使用拟合功能来培训上面创建的LSTM模型100个以批量大小为8的训练数据。

#Model Training
history=lstm.fit(X_train, y_train, epochs=100, batch_size=8, verbose=1, shuffle=False)
Eросh  1/100
834/834  [==============================]  –  3s  2ms/steр  –  lоss:  67.1211
Eросh  2/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  70.4911
Eросh  3/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  48.8155
Eросh  4/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  21.5447
Eросh  5/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  6.1709
Eросh  6/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  1.8726
Eросh  7/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.9380
Eросh  8/100
834/834  [==============================]  –  2s  2ms/steр  –  lоss:  0.6566
Eросh  9/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.5369
Eросh  10/100
834/834  [==============================]  –  2s  2ms/steр  –  lоss:  0.4761
.
.
.
.  
Eросh  95/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.4542
Eросh  96/100
834/834  [==============================]  –  2s  2ms/steр  –  lоss:  0.4553
Eросh  97/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.4565
Eросh  98/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.4576
Eросh  99/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.4588
Eросh  100/100
834/834  [==============================]  –  1s  2ms/steр  –  lоss:  0.4599

最后,我们可以观察到损失值随着100时代训练程序而导致的,达到0.4599的值。

LSTM预测

既然我们就准备好了我们的模型,我们可以使用它来预测通过使用测试集上的LSTM网络训练的模型来预测Microsoft股票的相邻密切值。这是通过在已创建的LSTM模型上采用简单的预测功能来实现的。

#LSTM Prediction
y_pred= lstm.predict(X_test)

比较预测的VS True调整关闭值 - LSTM

最后,现在我们已经投影了测试集的值,我们可以使用LSTM机器学习模型显示图表以比较adj关闭的真实值和adj关闭的预测值。

#Predicted vs True Adj Close Value – LSTM
plt.plot(y_test, label=’True Value’)
plt.plot(y_pred, label=’LSTM Value’)
plt.title(“Prediction by LSTM”)
plt.xlabel(‘Time Scale’)
plt.ylabel(‘Scaled USD’)
plt.legend()
plt.show()

上图的图表演示了上面创建的极其基本的单个LSTM网络模型检测到一些模式。我们可能通过微调许多参数并将更多LSTM层添加到模型中来获得更准确地描述每个特定公司的库存价值。

结论

然而,随着机器学习的引入及其强大的算法,最近的市场研究和股票市场预测进步已经开始包括分析股票市场数据的这种方法。每日日期都表示股票的股票,股票的最高和最低价值,以及当天结束时的截止值。此外,提供了市场上的股票的总体积,其中提供了这些信息,由机器学习数据师的工作来看,查看数据并开发不同的算法,可能有助于找到适当的库存价值。

预测股市是几年甚至十年前的耗时和费力的程序。然而,随着机器学习的股票市场预测,该程序变得更加简单。机器学习不仅可以节省时间和资源,而且在表现方面也优于人们。它始终愿意使用训练有素的计算机算法,因为它只会根据事实,数字和数据建议您,并且不会因素或偏见。

图像来源:

  • Image 1: https://www.moneycontrol.com/news/photos/business/stocks/buzzing-stocks-tcs-nazara-technologies-ril-and-other-stocks-in-news-today-7566571.html
The media shown in this article are not owned by Analytics Vidhya and are used at the Author’s discretion.

有关的

转自:https://www.analyticsvidhya.com/blog/2021/10/machine-learning-for-stock-market-prediction-with-step-by-step-implementation/
原作者: Prashant Sharma
腾讯云服务器 阿里云服务器


关注微信
^