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

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

0

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

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

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

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

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

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

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

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

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

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

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

挑戰(zhàn)

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

數(shù)據(jù)

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

數(shù)據(jù)集總共包含 5 個(gè)特征。具體情況如下:

  1. Close Price:指當(dāng)日貨幣的市場(chǎng)收盤(pán)價(jià)

  2. High Price:當(dāng)天貨幣的最高價(jià)格

  3. Low Price:是當(dāng)天貨幣的最低價(jià)

  4. Open Price:當(dāng)日貨幣的市場(chǎng)公開(kāi)價(jià)格

  5. Volume:當(dāng)天交易的貨幣量

代碼在哪里?

不費(fèi)吹灰之力,讓我們從代碼開(kāi)始。完整的 github 項(xiàng)目可以在這里找到:https://github.com/abhinavsagar/Cryptocurrency-Price-Prediction 

從加載所需的所有庫(kù)和依賴(lài)項(xiàng)開(kāi)始:

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í)時(shí)數(shù)據(jù)存儲(chǔ)到 pandas 數(shù)據(jù)框中,將字符串日期時(shí)間轉(zhuǎn)換為 Python 日期時(shí)間對(duì)象。這是必需的,因?yàn)槲募械娜掌跁r(shí)間對(duì)象是作為字符串對(duì)象讀取的,對(duì)字符串而不是日期時(shí)間對(duì)象執(zhí)行時(shí)間差之類(lèi)的操作非常容易。

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ù)集的所有交易特性,如價(jià)格、成交量、開(kāi)盤(pán)、高價(jià)、低價(jià),是什么樣子的。

hist.head(5)

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

接下來(lái),我將數(shù)據(jù)分為兩組:訓(xùn)練集和測(cè)試集,它們分別占據(jù) 80% 和 20% 的數(shù)據(jù)量。這里只是為了這個(gè)項(xiàng)目才這樣做的,在實(shí)際項(xiàng)目中,你應(yīng)該始終將數(shù)據(jù)分為訓(xùn)練、驗(yàn)證、測(cè)試三個(gè)數(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)在,讓我們使用以下代碼繪制加密貨幣(加元)價(jià)格隨時(shí)間變化的曲線(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ù)測(cè)虛擬貨幣價(jià)格

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

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

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

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

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

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

LSTM 體系架構(gòu)

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

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

接下來(lái),我設(shè)置一些參數(shù)供以后使用。這些參數(shù)是:隨機(jī)數(shù)種子,窗長(zhǎng)度,測(cè)試集大小,第一層神經(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 和標(biāo)簽 y_train 來(lái)訓(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)

讓我們來(lái)看看 20 個(gè) epoch 的模型訓(xùn)練快照。

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

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

我用平均絕對(duì)誤差(MAE)作為評(píng)價(jià)指標(biāo)。選擇 MAE 而不是均方根誤差(RMSE)的原因是 MAE 更易于解釋。RMSE 并不單獨(dú)描述平均誤差,因此更難理解。因?yàn)槲覀兿M词故菍?duì)完全不懂技術(shù)的讀來(lái)說(shuō),模型也可以很容易理解,因此 MAE 看起來(lái)是一個(gè)更好的選擇。

平均絕對(duì)誤差

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

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

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

獲得 MAE 值看起來(lái)不錯(cuò)。最后,讓我們使用以下代碼繪制實(shí)際價(jià)格和預(yù)測(cè)價(jià)格:

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ù)測(cè)虛擬貨幣價(jià)格

結(jié)論

在本文中,我演示了如何使用 LSTM 神經(jīng)網(wǎng)絡(luò)實(shí)時(shí)預(yù)測(cè)加密貨幣價(jià)格。我使用了四個(gè)步驟:獲取實(shí)時(shí)貨幣數(shù)據(jù)、準(zhǔn)備數(shù)據(jù)進(jìn)行訓(xùn)練和測(cè)試、使用 LSTM 神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)價(jià)格和可視化預(yù)測(cè)結(jié)果??梢噪S意使用超參數(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)載。詳情見(jiàn)轉(zhuǎn)載須知。

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

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