Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 693

 
Ich habe diesen Code in ein Skript geschrieben und es ein paar Mal ausgeführt, wobei ich jedes Mal leicht unterschiedliche Ergebnisse erhielt...
 
Eidechse_:

set.seed(1234)

Was ist das und wo soll ich es hinstellen?

 
Mihail Marchukajtes:

das ist mehr als die Hälfte der Schlacht... so ist es....

90%, und Modelle sind eine Frage der Technik, caret ist voll von diesem Zeug mit der richtigen Bindung.

 

Hier ist auch ein Beispiel mit vtreat,

In der Regel handelt es sich dabei um eine Datenvorverarbeitung, die jedoch auch als Schätzung der einzelnen Prädiktoren im Verhältnis zum Ziel verwendet werden kann. Mir gefällt nicht, dass das Paket keine Prädiktorinteraktionen berücksichtigt. Verwenden Sie den Code nur, wenn Sie genug haben, um die Prädiktoren einzeln relativ zum Ziel zu schätzen.

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:
Was ist das und wo kann ich es unterbringen?

set.seed setzt den Anfangswert des Zufallszahlengenerators. Wenn vor der Ausführung des Codes der gleiche Zustand (z. B. 1234) eingestellt wird, wird der folgende Code in allen Fällen auf die gleiche Weise ausgeführt.

read.csv2(... usw.)
set.seed(1234)
Boruta(ZielProf... usw.)

Aber vielleicht braucht der Algorithmus mehr Iterationen (z.B. maxRuns = 1000000), er passt nicht in eine so kleine Zahl wie in der Standardeinstellung und bleibt auf halbem Weg stehen.

 

Ich habe über Regression nachgedacht....
Bei der Regression auf den Finanzmärkten handelt es sich nicht um eine glatte Funktion, sondern vielmehr um eine Stufenfunktion mit 1-Punkt-Schritten. (sowohl für die Lehrkraft als auch für die Prognose). Wenn wir zum Beispiel die Bewegung auf +/- 100 Punkte begrenzen, dann gibt es eine Analogie zur Einteilung in 200 Klassen. Das heißt, die Ausgabe ist eine Vorhersage der wahrscheinlichsten Klasse - zum Beispiel +22 Punkte.
Bedeutet dies nicht, dass für gute Ergebnisse die Struktur/Komplexität des Modells (Anzahl der Neuronen) für die Regression 200 Mal größer sein sollte? Nun, wenn wir den Schritt auf 5 Punkte erhöhen, dann wäre 40-mal ein bisschen wirtschaftlicher auf Kosten von weniger Genauigkeit.

 
Ich habe die Datei durch vtreat laufen lassen, zugegebenermaßen nicht sehr viel. Nur 4 Eingänge ausgewählt. Danke für den Tipp..... Ich werde weiterspinnen....
 
Eidechse_:

Rufen Sie nun den Boxplot auf, ändern Sie etwas an den Eingaben und führen Sie ihn erneut aus.

Der Parameter set.seed ist in beiden Fällen derselbe.

Was soll ich mit den Eingaben machen?

Yeah..... Ich gebe zu, dass ich von meinen Eingaben mehr erwartet habe. Jedenfalls dachte ich, es gäbe wichtigere, sicher nicht vier von 100. Bei so vielen Eingaben fallen die Modelle zu klein aus, obwohl ich in der Praxis festgestellt habe, dass sie umso besser funktionieren, je einfacher das Modell ist. Und wenn ich mir das Modell ansehe und meine eigenen Tests durchführe, weiß ich, dass dieser kleine Scheißer verdammt gut ist..... Es ist noch zu früh, um Schlussfolgerungen zu ziehen, es sind weitere Tests erforderlich. Weiter graben....

 
Überall, wo ich geschrieben habe
forexFeatures <- read.csv2("Qwe.txt")

Sie müssen es tatsächlich tun.
forexFeatures <- read.csv2("Qwe.txt", dec=".")

Entschuldigung, ich habe das Format in Ihrer Datei falsch eingeschätzt. Ich werde die alten Beiträge korrigieren. Führen Sie den Code erneut aus, die Ergebnisse sollten besser sein, sonst wurden alle Zahlen mit Dezimalbrüchen falsch verarbeitet.
 
Mihail Marchukajtes:

Was ist mit den Eingaben zu tun?

Zum Beispiel skaliert jPrediction die Daten auf das Intervall [-1;1] und lernt auf diesen Zahlen. Sie können auch in R auf das gleiche Intervall skalieren, bevor Sie die Eingaben auswerten.

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,...

Schätzmethoden, die auf Bäumen basieren, werden das Ergebnis wahrscheinlich nicht verändern, da es den Wäldern egal ist, aus welchem Intervall die Daten stammen, aber es ist besser, dies zu überprüfen. vtreat ist auch nicht wählerisch, was das Intervall angeht.


Aber im Allgemeinen spricht er von einer nicht-linearen Transformation der Eingaben, noch bevor sie in die Neuronen eingespeist werden. Neuronics reagiert sehr empfindlich auf Eingaben, und wenn Sie die Eingabedaten auf eine besondere Weise verarbeiten, können sich die Ergebnisse verbessern. Ich habe zum Beispiel einen solchen Trick gehört - Eingänge über Sigmoid umwandeln.