python虚拟货币开发

币圈百科 阅读 3 2023-05-05 16:08:48

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

加密货币是基于时间序列数据和在一定频率上的值变化。在此基础上,递归神经网络在时间序列数据中非常有用。递归神经网络帮助我们根据过去的时间序列预测未来的价格。

数据清理

使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

与通过机器学习库或某些存储库获得的数据不同的是,真实世界的数据以一种混乱的格式出现,用机器学习算法进行预测的主要部分是输入正确的数据。我们进行预测的大部分过程是清理数据

示例数据下载地址:http://www.kankanyun.com/data/crypto_data.zip

#1:导入必要的库

import pandas as pdimport osfrom sklearn import preprocessing from collections import dequeimport numpy as npimport randomimport timeimport tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, LSTM, BatchNormalization,Flattenfrom tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

这是我们将用于数据分析和神经网络构建的Python库

# 2:要声明的一些重要变量

SEQ_LEN = 60 #This is for 60 MinsFUTURE_PRED_PERIOD = 3 #MinsRATIO_TO_PRED = "ETH-USD"EPOCHS = 6BATCH_SIZE = 64NAME_MODEL = f"{RATIO_TO_PRED}-{SEQ_LEN}-SEQ-{FUTURE_PRED_PERIOD}-PRED-{int(time.time())}"DIR_data = "crypto_data/"
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

变量SEQ_LEN被声明为时间序列(即我们使用过去60分钟的时间序列数据来预测未来3分钟,即FUTURE_PRED_PERIOD)。在本例中,我们使用Ethereum,因此我们将RATIO_TO_PRED声明为ETH-USD,即Ethereum数据集。

#3:数据预处理(循环和更改索引)

使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

正如您看到的dataFrame图像(上图),需要清理和归一化数据。所以,我们开始第一个 步骤中的清理和获取数据在正确的格式,Python代码如下:

#Importing Out data(Saved by WEB SCRAPING)files_name = ['BTC-USD','LTC-USD','ETH-USA','BCH-USD']files_path = ['BTC-USD.csv','LTC-USD.csv','ETH-USD.csv','BCH-USD.csv']df_main = pd.dataFrame()for nums,file in enumerate(files_path): all_datasets = os.path.join(DIR_data,file) data1 = pd.read_csv(all_datasets,names=['time','low','high','open','close','volume']) data1.rename(columns={"close":f'{files_name[nums]}_close','volume':f'{files_name[nums]}_volume'},inplace=True) data1.set_index("time",inplace=True) data1 = data1[[f'{files_name[nums]}_close',f'{files_name[nums]}_volume']] #print(data1.head()) if bool(df_main.empty) != False:  df_main = data1 else:  df_main = df_main.join(data1)
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

上面的Python代码中,我们循环遍历files_path变量上的所有文件。我们使用nums作为Array的索引并将file作为文件名。然后我们所做的是我们分离每一种加密货币的Close和Volume列因为我们将使用Close和Volume列来进行预测(我们是否应该投资)。我们使用的是Python 3.6+版本的F-Strings。If语句的最后一行将检查声明的data Frame 是否为空。

#3:数据预处理 - 预处理函数

def classification_for_stock(current_price,future_price): if float(current_price) < float(future_price):  return 1 else:  return 0#This is a Test Function to Make sure every thing is rightdef checker_function(): df_main['future'] = df_main[f'{RATIO_TO_PRED}_close'].shift(-FUTURE_PRED_PERIOD) df_main['target'] = list(map(classification_for_stock ,df_main[f'{RATIO_TO_PRED}_close'], df_main['future'])) #print(df_main[[f'{RATIO_TO_PRED}_close','future', 'target']].head(7))checker_function()
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

这里我们创建了一个简单的函数来创建一个示例Future和目标列。这在我们的主要预处理函数中很有用,让我们开始吧,准备好处理数据

def preprocessing_data(df): df = df.drop('future',axis=1) for cols in df.columns:  if cols != "target":   df[cols] = df[cols].pct_change()   df.dropna(inplace=True)   df[cols] = preprocessing.scale(df[cols].values) df.dropna(inplace=True) sequential_data = [] prev_days = deque(maxlen=SEQ_LEN)  for value in df.values:  prev_days.append([x for x in value[:-1]])  if len(prev_days) == SEQ_LEN:   sequential_data.append([np.array(prev_days),value[-1]]) random.shuffle(sequential_data) #print(sequential_data) #Balancing Recurrent Neural Network sequence #Seperating O and 1 from Prediction Column for Feeding buys = [] sells = [] #We Can't Split time series data into a Ratio so We Loop #and find the Minimum(Total Value of Both) for seque, target in sequential_data:  if target == 0:   sells.append([seque, target])  elif target == 1:   buys.append([seque, target]) lower_threshold = min(len(buys), len(sells)) #Setting Up our data over the Split considering both Total and Ratio buys = buys[:lower_threshold] sells = sells[:lower_threshold] #Finally we are throwing our Filtered data into out sequence sequential_data = buys+sells random.shuffle(sequential_data) X = [] y = [] for data_x, target in sequential_data:  X.append(data_x)  y.append(target) return np.array(X), y
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

第2-9行,我们删除Future列,因为这是数据清理,所以不使用这一列。我们希望预测目标。由于这是一个时间序列数据,我们将会有一定的频率从当前数据到上一个数据的变化,所以我们使用Pandas内置的pct_change()函数计算%-Change。这个函数会在dataframe中导致空值或NaN值,所以我们需要删除这些值,这样我们就会降低NaN值。然后我们对日期进行归一化,这可以使用preprocess .scale()函数来完成。

第10-17行,我们把清理后的数据追加到数组sequential_data中。我们正在裁剪预处理dataframe中的值,并分别附加特征和标签列。现在你可能会想,Deque是什么?Deque是一个特殊的函数,它获取附加的数据,并在达到最大长度后删除首先附加的元素。我们将把特征和列附加到sequential_data数组并对其进行Shuffling。

第22-37行,1(想买)和0(不想买)的比率是不确定的,但是我们需要相同数量的1和0来提高神经网络模型的性能,所以我们将1(Buys 数组)和0(Sells数组)都附加到单独的数组中。我们不能将时间序列数据分割成7:3之类的比例。因此,我们将附加到一个数组中,并找到要设置为阈值的最小值。然后定义Sequential_data变量并对其进行Shuffling。

第39-44行,这是preprocessing_data()函数的最后一部分。我们正在创建两个数组X(用于特征数据)和y(用于预测的标签数据)。数组X是一个用于计算的Numpy数组。基本上,整个函数将返回两个数组,np.array(X)和y(标签)。

#4:创建测试和训练数据

preprocessing_data(df_main)time_sque = sorted(df_main.index.values)last_5perc_data_threshold = time_sque[-int(0.05*len(time_sque))]#We are creating Validation set for last 5% of our data#The rest is Main data for Neural Networkvalidation_df_main = df_main[(df_main.index >= last_5perc_data_threshold)]df_main = df_main[(df_main.index < last_5perc_data_threshold)]#Setting up Our Test and Validation data for RNNtrain_data_x, train_data_y = preprocessing_data(df_main)validation_x, validatino_y = preprocessing_data(validation_df_main)# print(f'Training data :{len(train_data_x)}, Validation data: {len(validation_x)}')# print(f"Don't Buys: {train_data_y.count(0)}, Buys: {train_data_y.count(1)}")# print(f"Validation Don't Buys: {validatino_y.count(0)}, Validation Buys: {validatino_y.count(1)}")
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

数据中拆分训练和测试

我们将最后5%的数据作为我们模型的验证集。所以我们将5%的数据与主dataframe分开。我们将预处理数据输入变量(Train_x和Train_y)

#5:构建我们的深度神经网络模型

#We are Going to Build the Modelrnn_model = Sequential()rnn_model.add(LSTM(128, input_shape=(train_data_x.shape[1:]), return_sequences=True))rnn_model.add(Dropout(0.2))rnn_model.add(BatchNormalization())rnn_model.add(LSTM(128, return_sequences=True))rnn_model.add(Dropout(0.1))rnn_model.add(BatchNormalization())rnn_model.add(LSTM(128, return_sequences=True))rnn_model.add(Dropout(0.1))rnn_model.add(BatchNormalization())rnn_model.add(LSTM(128, return_sequences=True))rnn_model.add(Dropout(0.2))rnn_model.add(BatchNormalization())rnn_model.add(Flatten())rnn_model.add(Dense(32,activation="relu"))rnn_model.add(Dropout(0.2))rnn_model.add(Dense(2,activation="softmax"))
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

我们使用循环神经网络尤其是LSTM(长短期记忆)用于处理视频文件或股票预测等时间序列的数据,因为它们在消失的梯度问题中起着至关重要的作用。

在这个模型中,我们使用三个128节点神经网络,drop out为0.2,这有助于我们的神教网络模型有效地学习数据。在最终Dense层,我们使用Softmax激活函数,因为它返回具有最高概率的值(0或1)。

#6:运行我们神经网络模型

optimizer = tf.keras.optimizers.Adam(lr=0.001,decay=1e-6)rnn_model.compile(loss="sparse_categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"])#Fitting a Model to our datamode_fit = rnn_model.fit( train_data_x,train_data_y, batch_size=BATCH_SIZE,epochs=EPOCHS, validation_data=(validation_x,validatino_y), callbacks=None, )
使用Python|Tensorflow构建循环神经网络模型进行加密货币预测

#7:保存我们的神经网络模型

rnn_model.save(f'{NAME_MODEL}.h5')

保存我们的模型以供日后预测是非常重要的。因为一些深度学习模型可能需要几个月的时间来训练,所以保存训练过的模型是很重要的。有很多方法可以做到这一点,但是我喜欢使用内置的model.Save()方法。

相关内容

标签: data 数据 df

python虚拟货币开发文档下载: PDF DOC TXT
文章来源: 小月
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2384272385@qq.com举报,一经查实,本站将立刻删除。
上一篇: 区块链资产钱包哪个好?十大最新最安全的区块链钱包排名排行榜 下一篇: 比特大陆是虚拟货币吗

相关资讯