L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 1181

 

Il traduttore funziona. O traduci l'intera pagina, o fai un copia-incolla nel traduttore.

Ma una parola o un paragrafo non funziona affatto.

 
Maxim Dmitrievsky:

Ci sono un sacco di impostazioni, hai bisogno di un sacco di bottiglie per capirlo... :) forse il campione è piccolo come quelli ad albero sono principalmente progettati per i grandi, è necessario modificare qualcosa


naturalmente, di sicuro si può modificare, immagino persino che la percentuale di campionamento vada ad ogni albero ridotto di default, ma due volte due è un indicatore...)

 
Maxim Dmitrievsky:

tradurre una parola alla volta, utilizzando il plug-in di google translator per chrome. Non si può fare senza l'inglese. Anche se si leggono 1-2 parole, il significato sarà compreso nel suo insieme. Io stesso lo uso quando dimentico le parole. Basta cliccare sulla parola. È possibile evidenziare clausole/sentenze.

Naturalmente, è stupido tradurre tutto il testo in una volta, così non ricorderete mai le parole e non capirete il significato del testo.

Grazie, proverò a tradurre usando la tua metodologia, forse sarà ancora più produttivo che inventare le mie ipotesi, ma ho una debolezza con le lingue...

 
Ivan Negreshniy:

Non capisco perché sia necessaria la modifica manuale delle divisioni e delle foglie degli alberi decisionali, sì, ho tutti i rami convertiti automaticamente in operatori logici, ma francamente non ricordo di averli mai corretti io stesso.

Perché che senso ha usare foglie con meno del 50-60% di probabilità di previsione? È casuale - un modello migliore non reagisce affatto alla situazione, piuttosto che reagire alle congetture.


Ivan Negreshniy:

E vale anche la pena di scavare nel codice di CatBoost, come si può essere sicuri.

Per esempio ho messo sopra test su python la mia rete neurale con addestramento tramite tabella di moltiplicazione per due, e ora l'ho presa per testare alberi e foreste (DecisionTree, RandomForest, CatBoost)

ed ecco il risultato - chiaramente non è a favore di CatBoost, come due volte due fa zero cinque...:)


è vero che se si prendono migliaia di alberi, i risultati migliorano.

Non sono così sicuro che gli alberi siano migliori delle reti neurali, ma gli alberi richiedono meno risorse per costruirli. Per esempio in questo momento ho circa 400 predittori, e una rete con 400 neuroni di ingresso e (quanti strati ci sono) richiederebbe troppo tempo per essere contata.

Posso lasciare il mio campione - forse usarlo per vedere quale metodo è migliore?

Ma le impostazioni hanno un senso - e sto scavando in questo momento per cercare di capirle.

 
Ivan Negreshniy:

Non capisco perché sia necessaria la modifica manuale delle divisioni e delle foglie degli alberi decisionali, sì, ho tutti i rami convertiti automaticamente in operatori logici, ma francamente non ricordo di averli mai corretti io stesso.

E in generale vale la pena scavare il codice CatBoost, come faccio a saperlo con certezza.

Per esempio, ho messo sopra test su python la mia rete neurale con apprendimento tramite tabella di moltiplicazione per due, e ora l'ho presa per testare alberi e foreste (DecisionTree, RandomForest, CatBoost)

ed ecco il risultato - potete vedere che non è a favore di CatBoost, come due volte due fa zero cinque...:)


è vero, se si prendono migliaia di alberi, i risultati migliorano.
import catboost
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from catboost import CatBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor

x = [[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],[9,2]]
y = [2,4,6,8,10,12,14,16,18]

print('-------- 1 DecisionTree')
tree = DecisionTreeRegressor().fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],tree.predict([ix])[0]))

print('-------- RandomForest 10 Tree')
regr = RandomForestRegressor(bootstrap=True).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],regr.predict([ix])[0]))

print('-------- CatBoost 10 Tree')
cat = CatBoostRegressor(iterations=100, learning_rate=0.1, depth=2, verbose=False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],cat.predict([ix])[0]))

print('-------- Gboost 100 Trees')
gboost  = GradientBoostingRegressor(n_estimators=100, verbose = False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],gboost.predict([ix])[0]))
-------- 1 DecisionTree
 1.00*2.00=2.00 
 2.00*2.00=4.00 
 3.00*2.00=6.00 
 4.00*2.00=8.00 
 5.00*2.00=10.00 
 6.00*2.00=12.00 
 7.00*2.00=14.00 
 8.00*2.00=16.00 
 9.00*2.00=18.00 
-------- RandomForest 10 Tree
 1.00*2.00=3.60 
 2.00*2.00=4.40 
 3.00*2.00=6.00 
 4.00*2.00=8.00 
 5.00*2.00=9.20 
 6.00*2.00=11.80 
 7.00*2.00=13.20 
 8.00*2.00=15.60 
 9.00*2.00=17.40 
-------- CatBoost 10 Tree
 1.00*2.00=2.97 
 2.00*2.00=2.97 
 3.00*2.00=5.78 
 4.00*2.00=8.74 
 5.00*2.00=10.16 
 6.00*2.00=12.88 
 7.00*2.00=14.67 
 8.00*2.00=15.77 
 9.00*2.00=15.77 
-------- Gboost 100 Trees
 1.00*2.00=2.00 
 2.00*2.00=4.00 
 3.00*2.00=6.00 
 4.00*2.00=8.00 
 5.00*2.00=10.00 
 6.00*2.00=12.00 
 7.00*2.00=14.00 
 8.00*2.00=16.00 
 9.00*2.00=18.00 

l'ho modificato un po' e ho aggiunto un po' di aumento del gradiente, funziona meglio fuori dalla scatola

il resto naturalmente qualcosa di mnda...

 
Maxim Dmitrievsky:
Circa un anno fa ho visto una copia di un semplice NS che mostrava risultati molto decenti nella tabella delle moltiplicazioni. In quel momento mi ha sorpreso.
Qual è il punto ora?
 
import catboost
import lightgbm as gbm
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from catboost import CatBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor

x = [[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],[9,2]]
y = [2,4,6,8,10,12,14,16,18]

print('-------- 1 DecisionTree')
tree = DecisionTreeRegressor().fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],tree.predict([ix])[0]))

print('-------- RandomForest 10 Tree')
regr = RandomForestRegressor(bootstrap=True, n_estimators=100).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],regr.predict([ix])[0]))

print('-------- CatBoost 10 Tree')
cat = CatBoostRegressor(iterations=100, learning_rate=0.1, depth=2, verbose=False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],cat.predict([ix])[0]))

print('-------- Gboost 100 Trees')
gboost  = GradientBoostingRegressor(n_estimators=100, verbose = False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],gboost.predict([ix])[0]))

print('-------- LGBM 100 Trees')
gbbm = gbm.LGBMRegressor(n_estimators=100,boosting_type='dart').fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],gbbm.predict([ix])[0]))
-------- 1 DecisionTree
 1.00*2.00=2.00 
 2.00*2.00=4.00 
 3.00*2.00=6.00 
 4.00*2.00=8.00 
 5.00*2.00=10.00 
 6.00*2.00=12.00 
 7.00*2.00=14.00 
 8.00*2.00=16.00 
 9.00*2.00=18.00 
-------- RandomForest 10 Tree
 1.00*2.00=2.84 
 2.00*2.00=3.74 
 3.00*2.00=5.46 
 4.00*2.00=7.70 
 5.00*2.00=9.66 
 6.00*2.00=11.44 
 7.00*2.00=13.78 
 8.00*2.00=15.46 
 9.00*2.00=16.98 
-------- CatBoost 10 Tree
 1.00*2.00=2.97 
 2.00*2.00=2.97 
 3.00*2.00=5.78 
 4.00*2.00=8.74 
 5.00*2.00=10.16 
 6.00*2.00=12.88 
 7.00*2.00=14.67 
 8.00*2.00=15.77 
 9.00*2.00=15.77 
-------- Gboost 100 Trees
 1.00*2.00=2.00 
 2.00*2.00=4.00 
 3.00*2.00=6.00 
 4.00*2.00=8.00 
 5.00*2.00=10.00 
 6.00*2.00=12.00 
 7.00*2.00=14.00 
 8.00*2.00=16.00 
 9.00*2.00=18.00 
-------- LGBM 100 Trees
 1.00*2.00=10.00 
 2.00*2.00=10.00 
 3.00*2.00=10.00 
 4.00*2.00=10.00 
 5.00*2.00=10.00 
 6.00*2.00=10.00 
 7.00*2.00=10.00 
 8.00*2.00=10.00 
 9.00*2.00=10.00 
 
Yuriy Asaulenko:

Ma una parola o un paragrafo - assolutamente no.

https://www.mql5.com/ru/forum/86386/page1180#comment_9543249

Машинное обучение в трейдинге: теория и практика (торговля и не только)
Машинное обучение в трейдинге: теория и практика (торговля и не только)
  • 2018.11.29
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
 
Maxim Dmitrievsky:

ci CatBoost a iterazioni=100 alberi non 10, e GBM è una bellezza:)

 
Aleksey Vyazmikin:

Perché che senso ha usare fogli con meno del 50-60% di probabilità di previsione? È casuale - è meglio che il modello non risponda affatto piuttosto che rispondere ad un'ipotesi.


Non sono sicuro che gli alberi siano migliori delle reti neurali, ma gli alberi richiedono meno risorse per costruire. Per esempio in questo momento ho circa 400 predittori, e una rete con 400 neuroni di ingresso e (quanti strati ci sono) richiederebbe troppo tempo per essere contata.

Posso lasciare il mio campione - forse usarlo per vedere quale metodo è migliore?

E le impostazioni sì - hanno senso - e sto scavando in loro ora e cercando di capire la loro essenza.

In ogni caso, scavate e scegliete il più attentamente possibile mentre è ancora nelle sue fasi iniziali.

Oltre alla mancanza di comprensione con due-due anche cercare di scollegare invadente, ad ogni avvio, creazione da CatBoost sue directory temporanee come da esso in ambiente protetto si butta fuori.

E in generale, questi glitch sembra in qualche modo non molto professionale, quindi se non è possibile batterli, poi personalmente a mio parere, più economico che gratuito - da questo prodotto di abbandonare subito:)