Umelá inteligencia - obchodovanie na burze s kryptomenami 2. diel
Dnes si vytvoríme rekurentnú neurónuvú sieť a naučíme ju predpovedať budúcnosť Dogecoinu.
Súvisiace diely
Umelá inteligencia - obchodovanie na burze s kryptomenami 1. dielV predchádzajúcich dieloch ste videli
Umelá inteligencia - nám predpovie budúcnosťUmelá inteligencia sa učí počítať
Umelá inteligencia - prvý praktický príklad v rozpoznávaní obrazu
Data augmentation
Vytvorenie datasetu
Prvé kroky k programovaniu
Umelá inteligencia v rozpoznávaní obrazu
Umelá inteligencia nás všetkých zabije
Úvod
Minule sme začali s predpovedaním Dogecoinu na burze, dnes si pokus dokončíme.Model rekurentnej neurónovej siete
V prvom pokuse si vyskúšame Rekurentnú neurónovú sieť. Tá sa dá zjednodušene vysvetliť tak, že sa časť výstupu vracia na vstup a tým sa udržuje náväznosť na predchádzajúce informácie. V našom modele sme použili štyri vrstvy LSTM a na konci Dense. Sieť ma 1440 vstupov a 10 výstupov. Čiže na učenie/predpovedanie vložíme do siete 1440 kurzov (1440 minút = deň) a predpovedáme 10minút. Celkový objem dát je za viac ako jeden rok v minútových intervaloch.Sieť z programátorského hľadiska vyzerá takto:
def lstm_medium (max_input_len, max_output_len): # Initialising the RNN model = Sequential()# Adding the first LSTM layer and some Dropout regularisation model.add(LSTM(units = 50, return_sequences = True, input_shape = (max_input_len, 1))) # Adding a second LSTM layer and some Dropout regularisation model.add(LSTM(units = 50, return_sequences = True)) model.add(Dropout(0.2)) # Adding a third LSTM layer and some Dropout regularisation model.add(LSTM(units = 50, return_sequences = True)) model.add(Dropout(0.2)) # Adding a fourth LSTM layer and some Dropout regularisation model.add(LSTM(units = 50)) model.add(Dropout(0.2)) # Adding the output layer model.add(Dense(units = max_output_len)) # Compiling the RNN model.compile(optimizer = 'adam', loss = 'mean_squared_error') return modelPre zrozumiteľnejšie zobrazenie použijeme funkciu model.summary():
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= lstm (LSTM) (None, 1440, 50) 10400 _________________________________________________________________ lstm_1 (LSTM) (None, 1440, 50) 20200 _________________________________________________________________ dropout (Dropout) (None, 1440, 50) 0 _________________________________________________________________ lstm_2 (LSTM) (None, 1440, 50) 20200 _________________________________________________________________ dropout_1 (Dropout) (None, 1440, 50) 0 _________________________________________________________________ lstm_3 (LSTM) (None, 50) 20200 _________________________________________________________________ dropout_2 (Dropout) (None, 50) 0 _________________________________________________________________ dense (Dense) (None, 10) 510 ================================================================= Total params: 71,510 Trainable params: 71,510 Non-trainable params: 0 _________________________________________________________________alebo keras.utils.plot_model:
Z celkových dát vždy vyberieme 1440 údajov pre vstup a 10 pre výstup, potom sa v dátach posunieme o 10minút a postup sa opakuje.
Parametre učenia si môžeme upravovať v train.py v sekcií PARAMETERS:
#################################################### # PARAMETERS #################################################### INPUT_LEN = 1440 OUTPUT_LEN = 10 SHIFT = 10 EPOCHS = 30 BATCH_SIZE = 128 FILEPATH = "weights.hdf5" ####################################################Naučené váhy sa ukladajú do súboru weights.hdf5.
Spustenie učenia sa
Učenie spustíme príkazom:python3 train.pyOpakuje sa 30krát a na notebooku mi to trvalo cca hodinu. Sieť sa učí podozrivo rýchlo, tak si vyskúšame ako sa výsledky budú zhodovať so skutočnosťou.
Predikcia budúcnosti
Na otestovanie ako sieť dobre, alebo zle predpovedá budúcnosť nám slúži príkaz:python3 predict.pyTram da da dá! Prvý výsledok vyzerá výborne:
Modrá je predpoveď a zelená skutočné dáta.
Druhý test vyzerá tiež výborne až si človek hovorí, že Indovia mali predsa len pravdu.
Mno a tretí uletel úplne do preč.
All in one
git clone https://github.com/bedna-KU/CryptoCoin_stock_trading.git cd CryptoCoin_stock_trading sudo apt install python3-dev sudo apt install python3-tk python3 -m pip install -r requirements.txt python3 binance/save_historical_data.py --symbol DOGEUSDT --start "1. Dec 2019" --interval 1m python3 csv_columns.py --action save --columns "0 1 2 3 4 5" python3 train.py python3 predict.py
Záver
Záver je približne taký ako som čakal, tak čo teraz ďalej? Máte nejaké nápady?Podľa mňa môžeme použiť všetky data, čiže aj otvárací, najvyšší a najnižší kurz. Potom môžeme skúsiť pridať aj objem obchodov. Keď to nezaberie, tak môžeme k dátam pridať kurz Bitcoinu. Alebo dáta z CERNu, ako som už býval spomínal. Môžeme použiť aj dlhší vstupný reťazec než jeden deň, ale to už notebook nezvládal, tak toto asi testnem na lepšom HW. Na čo sa teším, žeby mohla zabrať konvolučná vrstva, tak uvidíme a zrejme tu pokusov bude pribúdať :-)
Mno a predict,oy je dosť splácaný, ale funguje, tak moc nenadávajte :-)
Nevešajte hlavu, pokračujeme a určite na to kápneme.
Pre pridávanie komentárov sa musíte prihlásiť.
Pokiaľ viem, tak takéto prediktory sa používajú štatisticky. Napr. pri náhodnom nákupe a predaji nech je zisk v pravdepodobnosti 50:50, ale s prediktorom je zisk v pravdepodobnosti 51:49. Tak pri množstve obchodov by sa to malo prejaviť ako zisk. Vraj tieto modely prestávajú fungovať, keď príde kríza. Vtedy ich treba prestaviť. Praktické skúsenosti s týmto však nemám.
Toto bol klasický Indický model, mno povedzme trochu vylepšený. Nabudúce skúsime niečo lepčí. Toto bola len taká povinná jazda, čo na nete letí.
Ale aj tak dík za reakciu.