L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 531

 
elibrarius:

Question pour les experts R.

Comment convertir une matrice avec des valeurs absolues en une matrice de classe softmax ?

apply(matr, 1, function (rowvec) { result <- rep(0, length(rowvec)); result[which.max(rowvec)] <- 1; result } )

Et transposez si nécessaire en fonction de la dimensionnalité de la matrice.

 
Maxim Dmitrievsky:

Ah, eh bien, il n'y a pas encore de bibliothèques... Je ne peux pas les écrire moi-même ;)


je pense que je vais leur écrire et leur demander de me prêter un neuronet, si ça marche, je les rembourserai en % :)

Au fait, ils sont un peu plus proches de l'original, au moins ils ont ajouté des médiateurs, mais ce n'est toujours pas l'IA car les nouvelles synapses ne se forment pas et ne se reconstruisent pas toutes seules, d'après ce que j'ai compris.

 
Maxim Dmitrievsky:

Je pense leur écrire, leur demander d'emprunter un réseau de neurones, et si ça marche, je les rembourserai avec des intérêts :)

Je pense que s'il n'y a pas de progrès dans les solutions avec les MLP simples, il n'y en aura pas avec les NS complexes. En outre, même si vous remplacez MLP par une NS plus complexe, il est loin d'être certain que le résultat s'améliorera d'une manière ou d'une autre. Parce qu'un outil différent exige un traitement différent, une formulation différente du problème.

Pour l'instant, je m'en tiendrai aux MLP simples et aux anciens algorithmes d'apprentissage basés sur la BP, et je verrai si le besoin réel se fait sentir.

 
anonyme:

et transposer si nécessaire en fonction de la dimensionnalité de la matrice

Wow, beaucoup plus court ! Merci !

Je l'ai un peu modifié, je crée une nouvelle matrice en copiant l'ancienne, de sorte que les noms des colonnes et des lignes restent. C'est plus universel, au cas où j'aurais besoin de les utiliser plus tard. Et j'inverse immédiatement la matrice. Si j'ai bien compris, apply(x,1,f) retourne toujours la matrice, car il traite les données ligne par ligne et les combine en colonnes.

get_softmax <- function(m){
    t(apply(m, 1, function (row) {r <- row;  r [1:length(row)] <-0 ; r[which.max(row)] <- 1;  r } ))
}

 
Yuriy Asaulenko:

Je pense que s'il n'y a pas de changement dans les solutions avec les MLP simples, il n'y en aura pas avec les NS complexes. En outre, même si vous remplacez le MLP par un NS plus complexe, il est loin d'être certain que le résultat s'améliorera d'une manière ou d'une autre. Parce qu'un outil différent exige un traitement différent, une formulation différente du problème.

Pour l'instant, je vais m'en tenir à de simples algorithmes de formation MLP et anciens, BP, et nous verrons si le besoin réel se fait sentir.


J'aime bien quand tout est compté rapidement, on peut essayer plein de stratégies.

Si j'avais un analogue plus productif, je m'y mettrais... Mais maintenant, c'est 90 % de data mining et 10 % de sélection de modèles.

 
Maxim Dmitrievsky:

J'aime bien quand tout est compté rapidement, on peut passer par beaucoup de stratégies.

Si j'avais un analogue plus productif, je l'adopterais... jusqu'à présent, 90% du temps, c'est juste du datamining et 10% de la sélection de modèles.

En ce qui concerne les performances, le temps de réponse d'un MLP entraîné à 6 couches (~60 neurones) est de 0,005s. C'est suffisant pour presque tout.

Quant au temps d'apprentissage, qui est long, ce n'est pas du tout un souci, car il faut beaucoup plus de temps pour réfléchir seul à chaque expérience suivante - une semaine, voire plus.

Eh bien, une nouvelle formation tous les quelques mois, disons que nous passons quelques jours - je ne pense pas que ce soit un problème. Refaire le système sur la logique prend beaucoup plus de temps. Oui, et une formation standard ne fonctionne pas - il faut une longue danse du tambourin entre les époques. Alors que l'entraînement standard (sans danse)) donne de bons résultats, mais uniquement sur un échantillon d'entraînement).

 

Un autre problème avec R.

Sur un ordinateur, tout va bien, mais sur l'autre, il y a des exigences accrues en matière d'exactitude du code.

Par exemple

darch.unitFunction = linearUnit - provoque un crash de Rterm.exe

changé en

darch.unitFunction ="linearUnit" (unité linéaire)

ce point a commencé à passer avant la prochaine erreur.

Il a également fallu remplacer library(darch) par require(darch).

Maintenant, c'est l'apprentissage lui-même qui est une déception.

R_NN <- darch(
darch = NULL,
x = MatrixLearnX ,
y = MatrixLearnY ,
paramsList = params
)

J'ai essayé plusieurs variantes, Rterm.exe se plante toujours.

Est-ce que R a une sorte de contrôle du niveau d'erreur ? Peut-être que sur le deuxième PC, j'ai eu un niveau d'erreur à résoudre en m'arrêtant à chaque avertissement ?

Sur les deux ordinateurs, j'ai installé R avec les paramètres par défaut, j'ai installé tous les paquets.
Comment puis-je le réparer ?

 

Si la bibliothèque darch n'est pas installée, library(darch) provoquera une erreur et l'exécution du code s'arrêtera, et require(darch) se contentera de se déformer et le code continuera à fonctionner, mais comme la bibliothèque darch n'est pas installée, ses fonctions ne pourront pas être appelées.

L'étape suivante consiste à exécuter
install.packages("darch", dependencies=TRUE) pour installer automatiquement la bibliothèque

 
Yuriy Asaulenko:

En ce qui concerne les performances, le temps de réponse d'un MLP entraîné à 6 couches (~60 neurones) est de 0,005s. Elle est tout à fait suffisante pour presque tout.

Quant au temps d'apprentissage, qui est long, il ne dérange pas du tout, car il faut beaucoup plus de temps pour réfléchir seul à chaque expérience suivante - une semaine, voire plus.

Eh bien, une nouvelle formation tous les quelques mois, disons que nous passons quelques jours - je ne pense pas que ce soit un problème. Refaire le système sur la logique prend beaucoup plus de temps. Oui, et une formation standard ne fonctionne pas - il faut une longue danse du tambourin entre les époques. Et l'entraînement standard (sans danse)) donne d'excellents résultats - mais uniquement sur un échantillon d'entraînement).


Je m'y prends un peu mal - j'utilise l'optimiseur activement pour rechercher des stratégies, c'est-à-dire en essayant des jetons, des combinaisons de blocs TS, autre chose... Car parfois, je ne tiens même pas compte d'une petite chose, et elle manque dans le système. Et pour parcourir ne serait-ce qu'une centaine d'options, il faut une vitesse d'apprentissage considérable (et 100 options, c'est très peu)... Bon, chacun a sa propre approche, je ne dis pas que la mienne est meilleure. Bien sûr, on peut dire que NS est un optimiseur en soi, mais il y a toujours des hyperparamètres, qui peuvent être choisis à l'étape initiale.

 
Maxim Dmitrievsky:

J'utilise activement l'optimiseur pour rechercher des stratégies, c'est-à-dire pour rechercher des jetons, des combinaisons de blocs TS, autre chose... car parfois il y a même une petite chose que je n'ai pas envisagée, mais qui manquait dans le système. Et pour parcourir ne serait-ce qu'une centaine d'options, il faut une vitesse d'apprentissage considérable (et 100 options, c'est très peu)... Bon, chacun a sa propre approche, je ne dis pas que la mienne est meilleure. Bien sûr, on peut dire que NS est un optimiseur en soi, mais il y a toujours un certain nombre d'hyperparamètres que l'on peut choisir au stade initial.

Vous devrez donc bientôt disposer d'une ferme minière pour les stratégies d'exploitation minière.