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

 
J'ai écrit ce code dans un script et je l'ai exécuté plusieurs fois, j'ai obtenu des résultats légèrement différents à chaque fois...
 
Vizard_:

set.seed(1234)

Qu'est-ce que c'est et où dois-je le mettre ?

 
Mihail Marchukajtes:

c'est plus que la moitié de la bataille... c'est comme ça....

90%, et les modèles sont une question de technologie, le caret est plein de ce genre de choses avec l'attache appropriée.

 

Voici également un exemple avec vtreat,

Il s'agit généralement d'un prétraitement des données, mais il peut être utilisé comme une estimation de chaque prédicteur par rapport à la cible. Je n'aime pas que le package ne prenne pas en compte les interactions entre prédicteurs, n'utilisez le code que si vous avez de quoi estimer les prédicteurs un par un par rapport à la cible.

forexFeatures <- read.csv2("Qwe.txt", dec=".")
forexFeatures <- forexFeatures[,-1]

library(vtreat)


#designTreatmentsC  подходит только для классификации с двумя классами
treatmentsC <- designTreatmentsC(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия  колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)], #названия  колонок с таргетом (тут - последняя колонка)
                                 outcometarget = "1") #текст  или цифра одного из классов
#обработка,  сортировка результата
treatmensC_scores <- treatmentsC$scoreFrame[order(treatmentsC$scoreFrame$sig),]
treatmensC_scores <- treatmensC_scores[!duplicated(treatmensC_scores$origName),]
treatmensC_scores <- treatmensC_scores[,c("origName","sig")] 
treatmensC_scores$is_good <- treatmensC_scores$sig <= 1/nrow(forexFeatures)
treatmensC_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо 


#designTreatmentsN подходит для регрессии или если больше двух классов. Если всего два класса то предпочтительнее использовать C функцию, она вроде как и коррелирующие предикторы убирает заодно.
treatmentsN <- designTreatmentsN(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)]) #названия колонок с таргетом (тут - последняя колонка)
#обработка, сортировка результата
treatmensN_scores <- treatmentsN$scoreFrame[order(treatmentsN$scoreFrame$sig),]
treatmensN_scores <- treatmensN_scores[!duplicated(treatmensN_scores$origName),]
treatmensN_scores <- treatmensN_scores[,c("origName","sig")] 
treatmensN_scores$is_good <- treatmensN_scores$sig <= 1/nrow(forexFeatures)
treatmensN_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо

 
Mihail Marchukajtes:
Qu'est-ce que c'est et où dois-je le mettre ?

set.seed définit la graine initiale du générateur de nombres aléatoires. Si on le met dans le même état (comme 1234) avant l'exécution du code, le code suivant sera exécuté de la même façon dans tous les cas.

lire.csv2(... etc.)
set.seed(1234)
Boruta(TargetProf... etc.)

Mais peut-être que l'algorithme a besoin de plus d'itérations (maxRuns = 1000000 par exemple), il ne tient pas dans un nombre aussi petit que celui par défaut et s'arrête à mi-chemin.

 

J'ai pensé à la régression.....
La régression sur les marchés financiers n'est pas une fonction lisse, mais plutôt une fonction à pas avec des incréments de 1 pt. (tant pour l'enseignant que pour les prévisions). Si nous limitons par exemple le mouvement à +/- 100 pt, il y a une analogie avec la classification en 200 classes. C'est-à-dire que la sortie est une prédiction de la classe la plus probable - par exemple +22 pt.
Cela ne signifie-t-il pas que pour obtenir de bons résultats, la structure/complexité du modèle (nombre de neurones) pour la régression devrait être 200 fois plus importante ? Eh bien, si nous augmentons le pas à 5 pt, alors 40 fois serait un peu plus économique au prix d'une moindre précision.

 
J'ai passé le fichier par vtreat, certes pas beaucoup. Seulement 4 entrées sélectionnées. Merci pour le conseil..... je vais continuer à tourner....
 
Vizard_:

Maintenant, rappelez le boxplot, faites quelque chose avec les entrées et exécutez-le à nouveau.

Le paramètre set.seed est le même dans les deux cas.

Que voulez-vous que je fasse pour les entrées ?

Ouais..... j'admets que j'attendais mieux de mes contributions. De toute façon, je pensais qu'il y en aurait de plus importants, certainement pas quatre sur cent. Avec autant d'entrées, les modèles deviennent trop petits, bien que j'aie remarqué dans la pratique que plus le modèle est simple, mieux il fonctionne. Et en regardant le modèle et en faisant mes propres tests, je comprends que cette petite merde est sacrément bonne...... Il est trop tôt pour tirer des conclusions, d'autres tests sont nécessaires. Continuez à creuser....

 
Partout où je suis allé
forexFeatures <- read.csv2("Qwe.txt")

vous devez vraiment le faire.
forexFeatures <- read.csv2("Qwe.txt", dec=".")

Désolé, j'ai mal évalué le format de votre fichier. Je vais corriger les anciens messages. Ré-exécutez le code, les résultats devraient être meilleurs, sinon tous les nombres avec des décimales ont été mal traités.
 
Mihail Marchukajtes:

Que faire des entrées ?

Par exemple, jPrediction met les données à l'échelle de l'intervalle [-1;1] et apprend sur ces nombres. Vous pouvez également mettre à l'échelle le même intervalle dans R avant d'évaluer les entrées.

forexFeatures <- read.csv2("Qwe.txt", dec=".")

for(i in 1:(ncol(forexFeatures)-1)){
  forexFeatures[,i] <- (forexFeatures[,i] - min(forexFeatures[,i]))/(max(forexFeatures[,i])-min(forexFeatures[,i]))*2-1
}

vtreat, Boruta, etc,...

Les méthodes d'estimation basées sur les arbres ne changeront probablement pas le résultat, les forêts ne se soucient pas vraiment de savoir dans quel intervalle les données sont arrivées, mais il est préférable de vérifier. vtreat n'est pas non plus pointilleux sur l'intervalle.


Mais en général, il parle de la transformation non linéaire des entrées avant même qu'elles n'alimentent les neurones. Neuronics est très sensible aux entrées, et si vous traitez les données d'entrée d'une manière particulière, ses résultats peuvent s'améliorer. Par exemple, j'ai entendu une telle astuce - convertir les entrées via sigmoïde.

Raison: