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

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

0

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

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

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

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

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

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

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

  • 獲取實時加密貨幣數(shù)據(jù)

  • 準備訓(xùn)練和測試數(shù)據(jù)

  • 用 LSTM 神經(jīng)網(wǎng)絡(luò)預(yù)測貨幣價格

  • 可視化預(yù)測結(jié)果

挑戰(zhàn)

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

數(shù)據(jù)

數(shù)據(jù)集可以從 CryptoCompare 網(wǎng)站下載。

數(shù)據(jù)集總共包含 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

我使用了加拿大的匯率,并將實時數(shù)據(jù)存儲到 pandas 數(shù)據(jù)框中,將字符串日期時間轉(zhuǎn)換為 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'

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

hist.head(5)

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

接下來,我將數(shù)據(jù)分為兩組:訓(xùn)練集和測試集,它們分別占據(jù) 80% 和 20% 的數(shù)據(jù)量。這里只是為了這個項目才這樣做的,在實際項目中,你應(yīng)該始終將數(shù)據(jù)分為訓(xùn)練、驗證、測試三個數(shù)據(jù)集(占比可以分別為 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)

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

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 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

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

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

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

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

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

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ù)編寫函數(shù),以準備數(shù)據(jù)的格式,稍后將其輸入神經(jīng)網(wǎng)絡(luò)。我使用了和前面相同的概念,將數(shù)據(jù)分成兩組:訓(xùn)練集和測試集,它們分別占總數(shù)據(jù)的 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 層從前一層和當前層獲取信息。數(shù)據(jù)通過多個門(如遺忘門、輸入門等)和各種激活函數(shù)(如 tanh 函數(shù)、relu 函數(shù))并通過 LSTM 單元。它的主要優(yōu)點是允許每個 LSTM 單元在一定時間內(nèi)記住這個模式。需要注意的是,LSTM 能夠記住重要的信息,同時忘記不相關(guān)的信息。LSTM 體系結(jié)構(gòu)如下所示:

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

LSTM 體系架構(gòu)

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

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

接下來,我設(shè)置一些參數(shù)供以后使用。這些參數(shù)是:隨機數(shù)種子,窗長度,測試集大小,第一層神經(jīng)元數(shù)量,批量大小,損失和優(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'

現(xiàn)在讓我們使用輸入 x_train 和標簽 y_train 來訓(xùn)練模型。

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 的模型訓(xùn)練快照。

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

神經(jīng)網(wǎng)絡(luò)的訓(xùn)練

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

平均絕對誤差

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

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

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

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

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 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

結(jié)論

在本文中,我演示了如何使用 LSTM 神經(jīng)網(wǎng)絡(luò)實時預(yù)測加密貨幣價格。我使用了四個步驟:獲取實時貨幣數(shù)據(jù)、準備數(shù)據(jù)進行訓(xùn)練和測試、使用 LSTM 神經(jīng)網(wǎng)絡(luò)預(yù)測價格和可視化預(yù)測結(jié)果。可以隨意使用超參數(shù)或嘗試不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)以獲得更好的結(jié)果。

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

雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

AI 教你投資:用深度學(xué)習(xí)預(yù)測虛擬貨幣價格

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