丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給skura
發(fā)送

0

AI 教你投資:用深度學習預測虛擬貨幣價格

本文作者: skura 2020-01-02 18:20
導語:由于缺乏指數,與股市等傳統(tǒng)金融預測相比,加密貨幣的預測相對較難。

AI 教你投資:用深度學習預測虛擬貨幣價格

Chris Liverani 發(fā)表在 Unsplash 雜志上的照片

2017 年,由于加密貨幣市值連續(xù)幾個月呈指數增長,其受歡迎程度飆升。加密貨幣的價格在 2018 年 1 月達到 8000 多億美元的峰值。

盡管機器學習已經成功地通過一系列不同的時間序列模型來預測股市價格,但它在預測加密貨幣價格方面的應用卻非常有限。其背后的原因是顯而易見的,因為加密貨幣的價格取決于許多因素,如技術進步、內部競爭、市場交付壓力、經濟問題、安全問題、政治因素等。如果采取明智的投資策略,它們價格的高波動性將帶來巨大的利潤。不幸的是,由于缺乏指數,與股市等傳統(tǒng)金融預測相比,加密貨幣的預測相對較難。

在這篇文章中,作者將用總共四個步驟來預測加密貨幣的價格:

  • 獲取實時加密貨幣數據

  • 準備訓練和測試數據

  • 用 LSTM 神經網絡預測貨幣價格

  • 可視化預測結果

挑戰(zhàn)

使用數據集中的所有交易特征(如價格、交易量、未平倉、高值和低值)預測加密貨幣價格。

數據

數據集可以從 CryptoCompare 網站下載。

數據集總共包含 5 個特征。具體情況如下:

  1. Close Price:指當日貨幣的市場收盤價

  2. High Price:當天貨幣的最高價格

  3. Low Price:是當天貨幣的最低價

  4. Open Price:當日貨幣的市場公開價格

  5. Volume:當天交易的貨幣量

代碼在哪里?

不費吹灰之力,讓我們從代碼開始。完整的 github 項目可以在這里找到:https://github.com/abhinavsagar/Cryptocurrency-Price-Prediction 

從加載所需的所有庫和依賴項開始:

import json
import requests
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout, LSTM
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.metrics import mean_absolute_error
%matplotlib inline

我使用了加拿大的匯率,并將實時數據存儲到 pandas 數據框中,將字符串日期時間轉換為 Python 日期時間對象。這是必需的,因為文件中的日期時間對象是作為字符串對象讀取的,對字符串而不是日期時間對象執(zhí)行時間差之類的操作非常容易。

endpoint = 'https://min-api.cryptocompare.com/data/histoday'
res = requests.get(endpoint + '?fsym=BTC&tsym=CAD&limit=500')
hist = pd.DataFrame(json.loads(res.content)['Data'])
hist = hist.set_index('time')
hist.index = pd.to_datetime(hist.index, unit='s')
target_col = 'close'

讓我們看看數據集的所有交易特性,如價格、成交量、開盤、高價、低價,是什么樣子的。

hist.head(5)

AI 教你投資:用深度學習預測虛擬貨幣價格

接下來,我將數據分為兩組:訓練集和測試集,它們分別占據 80% 和 20% 的數據量。這里只是為了這個項目才這樣做的,在實際項目中,你應該始終將數據分為訓練、驗證、測試三個數據集(占比可以分別為 60%、20%、20%)。

def train_test_split(df, test_size=0.2):
   split_row = len(df) - int(test_size * len(df))
   train_data = df.iloc[:split_row]
   test_data = df.iloc[split_row:]
  

return train_data, test_datatrain, test = train_test_split(hist, test_size=0.2)

現在,讓我們使用以下代碼繪制加密貨幣(加元)價格隨時間變化的曲線:

def line_plot(line1, line2, label1=None, label2=None, title='', lw=2):
    fig, ax = plt.subplots(1, figsize=(13, 7))
    ax.plot(line1, label=label1, linewidth=lw)
    ax.plot(line2, label=label2, linewidth=lw)
    ax.set_ylabel('price [CAD]', fontsize=14)
    ax.set_title(title, fontsize=16)
    ax.legend(loc='best', fontsize=16)


line_plot(train[target_col], test[target_col], 'training', 'test', title='')

AI 教你投資:用深度學習預測虛擬貨幣價格

我們可以觀察到,2018 年 12 月至 2019 年 4 月期間,加密貨幣的價格明顯下降;2019 年 4 月至 2019 年 8 月,其價格持續(xù)上漲,在 7、8 月份出現波動;從 2019 年 9 月起,價格不斷下降。在這次價格波動中,值得注意的是,加密貨幣在冬季價格較低,在夏季價格上漲。但是,由于數據集太小,這不能得出可以普遍適用的結論。同樣,對于加密貨幣,很難概括任何有價值的結論。

接下來,我寫了幾個函數來規(guī)一化這些值。規(guī)一化是機器學習中常用的一種數據準備技術。規(guī)一化的目標是將數據集中數值列的值更改為公共比例,而不會扭曲值范圍中的差異。

def normalise_zero_base(df):
    return df / df.iloc[0] - 1

def normalise_min_max(df):
    return (df - df.min()) / (data.max() - df.min())

接下來,我寫了一個函數來提取大小為 5 的窗口的數據,如下代碼所示:

def extract_window_data(df, window_len=5, zero_base=True):
    window_data = []
    for idx in range(len(df) - window_len):
        tmp = df[idx: (idx + window_len)].copy()
        if zero_base:
            tmp = normalise_zero_base(tmp)
        window_data.append(tmp.values)
    return np.array(window_data)

我繼續(xù)編寫函數,以準備數據的格式,稍后將其輸入神經網絡。我使用了和前面相同的概念,將數據分成兩組:訓練集和測試集,它們分別占總數據的 80% 和 20% ,代碼如下:

def prepare_data(df, target_col, window_len=10, zero_base=True, test_size=0.2):
    train_data, test_data = train_test_split(df, test_size=test_size)
    X_train = extract_window_data(train_data, window_len, zero_base)
    X_test = extract_window_data(test_data, window_len, zero_base)
    y_train = train_data[target_col][window_len:].values
    y_test = test_data[target_col][window_len:].values
    if zero_base:
        y_train = y_train / train_data[target_col][:-window_len].values - 1
        y_test = y_test / test_data[target_col][:-window_len].values - 1

    return train_data, test_data, X_train, X_test, y_train, y_test

LSTM

LSTM 的工作原理是使用特殊的門允許每個 LSTM 層從前一層和當前層獲取信息。數據通過多個門(如遺忘門、輸入門等)和各種激活函數(如 tanh 函數、relu 函數)并通過 LSTM 單元。它的主要優(yōu)點是允許每個 LSTM 單元在一定時間內記住這個模式。需要注意的是,LSTM 能夠記住重要的信息,同時忘記不相關的信息。LSTM 體系結構如下所示:

AI 教你投資:用深度學習預測虛擬貨幣價格

LSTM 體系架構

現在讓我們建立模型。序列模型用于將所有層(輸入、隱藏和輸出)堆疊起來。該神經網絡由一個 LSTM 層、20% 脫落層和一個具有線性激活函數的稠密層組成。我使用 Adam 作為優(yōu)化器,使用均方誤差作為損失函數來編譯模型。

def build_lstm_model(input_data, output_size, neurons=100, activ_func='linear', dropout=0.2, loss='mse', optimizer='adam'):
    model = Sequential()
    model.add(LSTM(neurons, input_shape=(input_data.shape[1], input_data.shape[2])))
    model.add(Dropout(dropout))
    model.add(Dense(units=output_size))
    model.add(Activation(activ_func))
    model.compile(loss=loss, optimizer=optimizer)
    return model

接下來,我設置一些參數供以后使用。這些參數是:隨機數種子,窗長度,測試集大小,第一層神經元數量,批量大小,損失和優(yōu)化器等。

np.random.seed(42)
window_len = 5
test_size = 0.2
zero_base = True
lstm_neurons = 100
epochs = 20
batch_size = 32
loss = 'mse'
dropout = 0.2
optimizer = 'adam'

現在讓我們使用輸入 x_train 和標簽 y_train 來訓練模型。

train, test, X_train, X_test, y_train, y_test = prepare_data(
    hist, target_col, window_len=window_len, zero_base=zero_base, test_size=test_size)model = build_lstm_model(
    X_train, output_size=1, neurons=lstm_neurons, dropout=dropout, loss=loss,
    optimizer=optimizer)
history = model.fit(
    X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=1, shuffle=True)

讓我們來看看 20 個 epoch 的模型訓練快照。

AI 教你投資:用深度學習預測虛擬貨幣價格

神經網絡的訓練

我用平均絕對誤差(MAE)作為評價指標。選擇 MAE 而不是均方根誤差(RMSE)的原因是 MAE 更易于解釋。RMSE 并不單獨描述平均誤差,因此更難理解。因為我們希望即使是對完全不懂技術的讀來說,模型也可以很容易理解,因此 MAE 看起來是一個更好的選擇。

平均絕對誤差

平均絕對誤差測量一組預測中誤差的平均大小,而不考慮它們的方向。它是實際觀測值和預測觀測值之間的絕對差在測試樣本上的平均值,其中所有的個體差異具有相同的權重。

AI 教你投資:用深度學習預測虛擬貨幣價格

targets = test[target_col][window_len:]
preds = model.predict(X_test).squeeze()
mean_absolute_error(preds, y_test)
# 0.027955859325876943

獲得 MAE 值看起來不錯。最后,讓我們使用以下代碼繪制實際價格和預測價格:

preds = test[target_col].values[:-window_len] * (preds + 1)
preds = pd.Series(index=targets.index, data=preds)
line_plot(targets, preds, 'actual', 'prediction', lw=3)

AI 教你投資:用深度學習預測虛擬貨幣價格

結論

在本文中,我演示了如何使用 LSTM 神經網絡實時預測加密貨幣價格。我使用了四個步驟:獲取實時貨幣數據、準備數據進行訓練和測試、使用 LSTM 神經網絡預測價格和可視化預測結果。可以隨意使用超參數或嘗試不同的神經網絡結構以獲得更好的結果。

via:https://towardsdatascience.com/cryptocurrency-price-prediction-using-deep-learning-70cfca50dd3a

雷鋒網雷鋒網雷鋒網

雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。

AI 教你投資:用深度學習預測虛擬貨幣價格

分享:
相關文章
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說