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

 
Dr. Trader:

Ich glaube nicht, dass dieses Paket ausreicht, um ein Modell zu erstellen, das die Zielvariable vorhersagen kann. Alles, was ich in der Hilfe gefunden habe, ist, ein PCA-Modell auf der Grundlage von Prädiktoren zu erstellen, die Zielvariable ist überhaupt nicht vorhanden.


Hallo, Sie haben die falsche Funktion verwendet, Sie hätten"nlPca" verwenden müssen, wie auf der von mir angegebenen Website angegeben, aber das ist mein Fehler, ich hätte mehr Details angeben sollen...

Hier statt vorhersagen - einpassen, ausprobieren, vielleicht klappt's ja

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
data(helix)
helixNA <- helix
##  not a single complete observation
helixNA <- t(apply(helix, 1, function(x) { x[sample(1:3, 1)] <- NA; x}))
## 50 steps is not enough, for good estimation use 1000
helixNlPca <- pca(helixNA, nPcs=1, method="nlpca", maxSteps=50)
fittedData <- fitted(helixNlPca, helixNA)
plot(fittedData[which(is.na(helixNA))], helix[which(is.na(helixNA))])
		
 
Dr. Trader:

Ich glaube nicht, dass dieses Paket ausreicht, um ein Modell zu erstellen, das die Zielvariable vorhersagen kann. Alles, was ich in der Hilfe gefunden habe, ist, ein PCA-Modell auf der Grundlage von Prädiktoren zu erstellen, die Zielvariable ist überhaupt nicht vorhanden.

Dadurch wird ein resNipals-Objekt (Nonlinear Estimation by Iterative Partial Least Squares) mit 5 Hauptkomponenten zur Analyse der Tabelle metaboliteDataComplete erstellt. Anstelle von metaboliteDataComplete können Sie auch Ihre eigene Tabelle mit Prädiktoren verwenden. Es ist wichtig, dass die Zielvariable hier nicht eingegeben wird, sie wird später verwendet.

Dies reicht jedoch nur aus, um die Beziehungen zwischen den Variablen anhand verschiedener Diagramme zu analysieren. Um ein Vorhersagemodell zu erstellen, wird dann ein lineares Regressionsmodell erstellt, das die Hauptkomponenten PC1,PC2,PC3,PC4,PC5 als Eingangsvariablen (x1,x2,x3,...) verwendet. Und die Zielvariable Y ist bereits als gewünschtes Ergebnis in das lineare Modell eingegeben. Das Problem ist, dass resNipals ein Objekt der Klasse "pcaRes" aus dem Paket pcaMethods ist. Ich konnte in der Hilfe nicht finden, wie man das alles macht.

Wäre es ein PCA-Modell aus dem Caret-Paket, würde es folgendermaßen ablaufen:

Aber es funktioniert nicht mit resNipals, theoretisch sollte das pcaMethods-Paket einige eigene Funktionen haben, um mit diesem Objekt zu arbeiten, aber ich habe nichts gefunden.

Ursprünglich wurde die PCA entwickelt, um zwei Probleme zu lösen:

1. Es gibt eine sehr große Anzahl von Prädiktoren mit einer geringen Anzahl von Beobachtungen. Dies ist üblich in der organischen Chemie, der Genetik... Bei uns ist es die Verwendung von makroökonomischen Daten zu großen TFs, z.B. jährlich.

2. Es gibt Korrelationen zwischen den Prädiktoren.

Daher lösen PCA-Algorithmen diese beiden Hauptprobleme:

1. Reduzieren Sie die Anzahl der ursprünglichen Prädiktoren durch eine neue, oft radikal kleinere Anzahl von Prädiktoren. Dabei stellt der Algorithmus sicher, dass diese kleine Zahl einen bestimmten Prozentsatz der Variabilität des ursprünglichen Satzes von Prädiktoren erklären kann, z. B. 95 %. Dieser Wert wird vom Forscher gewählt.

2. Der neue Satz von Prädiktoren hat NULL Korrelation miteinander.

Daraus folgt, dass die PCA für unseiner der Algorithmen ist, um die Rohdaten für die Modellierung vorzubereiten, aber sie kann die Modellierung zur Vorhersage der Zielvariablen nicht ersetzen.

Ich habe den Eindruck, dass in der Diskussion über verschiedene Details des PKA der Sinn meiner Ausführungen zu diesem Punkt verloren gegangen ist. Ich möchte Sie daran erinnern, dass ich auf die Verwendung der PCA hingewiesen habe, die nicht nur die Anzahl der ursprünglichen Prädiktoren reduziert, sondern auch Prädiktoren eliminiert, die für die Zielvariable ein Rauschen darstellen. Und genau darum geht es in diesem Thread.

Daher möchte ich auf das Problem des Rauschens unter den Prädiktoren zurückkommen und auf die mögliche Verwendung einer sehr spezifischen Idee zur Anwendung der PCA, um dieses Problem zu lösen.

 
Dr. Trader:

Dadurch wird das Objekt resNipals (Nonlinear Estimation by Iterative Partial Least Squares) mit 5 Hauptkomponenten für die Analyse der Tabelle metaboliteDataComplete erstellt. Anstelle von metaboliteDataComplete können Sie auch Ihre eigene Tabelle ........... verwenden.

Die eine, die Sie versucht haben, ist die Nipals, ist es in der zweiten Abbildung auf der Website gezeigt, ist es nicht sehr trennbar entweder, sollten Sie die in der dritten Abbildung neuronalen Netzwerk PCA nehmen

=========================

ein wenig vom Thema ab, aber ich brauche Hilfe mit dem Code....

Ich habe Prädiktoren in Spalten, ich möchte die Differenz aller Prädiktoren mit all diesen Kombinationen zählen, ich habe es implementiert, das Problem ist, dass ich jetzt jede Kombination angemessen benennen muss, um zu verstehen, was was ist

Nehmen wir an, wir haben Spalten mit Prädiktoren "A". , "Б" , "С"

Ich mache Kombinationen von Unterschieden

1) A - B

2) A - C

3) C - B

Frage: Wie gebe ich neuen Spalten Namen wie "a_minus_b"? , "a_minus_c"

Ich bin gerade dabei, R und die Programmierung im Allgemeinen zu meistern, daher bin ich mit solchen Tricks nicht vertraut

Was sollte ich zu diesem Code hinzufügen?

a <- 1:5
b <- 6:10
c <- 11:15
d <- 16:20
dt <- data.frame(a,b,c,d) 
dt

#  все комбинации индексов между двумя переменными
#  еще транспонирую(переворачиваю матрицу) мне так удобней воспринимать
combi <- t(  combn(1:ncol(dt),2)  )  
combi  

#  пустая фрейм куда буду записывать результат вычислений с комбинацыями
res.dt <- as.data.frame(  matrix(nrow = nrow(dt) , ncol = nrow(combi))   )
res.dt

for(i in 1:ncol(res.dt)){
  #  буду проводить вычитание одной перем из другой во всех комбинацыях
  #  и записывать в res.dt
  ii <- combi[i,1]
  jj <- combi[i,2]
  
  res.dt[,i] <- dt[,ii] - dt[,jj]
}
res.dt
 
mytarmailS:

Die eine, die Sie versucht haben, ist die Nipals, ist es in der zweiten Abbildung auf der Website gezeigt, ist es nicht sehr trennbar entweder, sollten Sie die in der dritten Abbildung neuronalen Netzwerk PCA nehmen

=========================

ein wenig vom Thema ab, aber ich brauche Hilfe mit dem Code....

Ich habe Prädiktoren in Spalten, ich möchte die Differenz aller Prädiktoren mit all diesen Kombinationen berechnen, ich habe es implementiert, das Problem ist, dass ich jetzt jede Kombination adäquat benennen muss, um zu verstehen, was was ist

Nehmen wir an, wir haben Spalten mit Prädiktoren "A". , "Б" , "С"

Ich mache Kombinationen von Unterschieden

1) A - B

2) A - C

3) C - B

Frage: Wie gebe ich neuen Spalten Namen wie "a_minus_b"? , "a_minus_c"

Ich bin gerade dabei, R und die Programmierung im Allgemeinen zu meistern, daher bin ich mit solchen Tricks nicht vertraut

Was sollte ich zu diesem Code hinzufügen?

Das sieht folgendermaßen aus.

Spaltennamen() <- c(".", ".")

Es gibt auch Namen

Siehe Hilfe.

 
SanSanych Fomenko:

Die PCA wurde ursprünglich entwickelt, um zwei Probleme zu lösen:

Die PCA war ursprünglich dazu gedacht, die Dimensionalität der ursprünglichen Reihen zu reduzieren. Das war's. Sie zur Auswahl von Prädiktoren zu verwenden, ist unsinnig.
 
SanSanych Fomenko:

Ungefähr so.

Spaltennamen() <- c(".", ".")

Es gibt auch Namen

Siehe Referenz.

)) Ja, ich weiß, aber wenn es 1000 Variablen gibt, warum sollte man dann jede einzelne von Hand schreiben?
 

Dr. Trader:

...

Die Daten stammen aus eurusd d1, Klasse 0 oder 1 - Kursrückgang oder -anstieg für den nächsten Balken. Wenn das Modell richtig prognostiziert das Ergebnis für test.csv mindestens in 6 von 10 Fällen, dann können Sie versuchen, den Handel mit ihm in Forex, im Prinzip wird nicht verlieren, aber nicht erwarten, zu viel Gewinn. Wenn es in 7 von 10 Fällen (und mehr) richtig voraussagt - das ist der richtige Weg zum Gral, wir müssen versuchen, das Modell auf andere Jahre und Monate zu trainieren und zu testen, und wenn alles gleich bleibt - dann sehr gut.

...


Genauer gesagt in der Berichtsdatei:

/**
* Die Qualität der Modellierung in "out of sample":
*
* TruePositives: 182
* TrueNegatives: 181
* FalschePositive: 1
* FalschNegativ: 1
* Gesamtzahl der Muster in den Stichproben mit Statistik: 365
* Gesamtfehler in der nicht in die Stichprobe einbezogenen Gruppe: 2
* Empfindlichkeit der Verallgemeinerungsfähigkeit: 99,4535519125683%
* Spezifität der Verallgemeinerungsfähigkeit: 99,45054945054946%
* Verallgemeinerungsfähigkeit: 98.90410136311776%
* Indikator von Reshetov: 8.852456238401455
*/


Es ist Zeit, ein Team zu bilden und ein Projekt Open Source - automatisiertes System für diesen Zweck auf mql5 und Java zu schaffen. Ich zeige den Quellcode des Binärklassifizierers in Java und das MQL5-Skript, das ein Beispiel für das Training von Modellen erstellt.

Ungefährer Plan, wie der Komplex funktionieren wird:

  1. Für jedes Finanzinstrument gibt es separate Roboter auf den Charts, die durch die Eröffnungskurse der Balken ausgelöst werden und Muster in Dateien ablegen.
  2. Die Java-Anwendung (binärer Klassifikator) lädt Muster für jedes Symbol herunter und wartet mit einem Intervall von 1 Sekunde auf Dateien, die von Robotern aus Schritt 1 erstellt wurden. Die Musterdatei wird dann von der Festplatte gelöscht. Auf der Grundlage des Musters klassifiziert das Tool ein Handelssignal entsprechend dem Muster und speichert es in der Datei.
  3. Ein Roboter wartet auf die Dateien der Absicherung aus Schritt 2. Sobald die Datei gefunden ist, liest der Roboter das Instrument und das Signal daraus und eröffnet oder reversiert ein Geschäft auf dem Instrument entsprechend dem Signal. Die gelesene Datei wird gelöscht.

Wenn Sie daran interessiert sind, dem Projekt beizutreten und wissen, wie man in Java oder MQL5 programmiert, abonnieren Sie bitte diesen Thread.

 
mytarmailS:

Hallo! Sie haben die falsche Funktion verwendet, Sie hätten"nlPca" verwenden müssen, wie auf der von mir angegebenen Website angegeben, aber das ist mein Fehler, Sie brauchen mehr Details...

Hier statt vorhersagen - einpassen, ausprobieren, vielleicht klappt's ja

Dieses Beispiel stammt leider aus einem anderen Thread. Im Devisenhandel zum Beispiel können wir immer 100 % der Daten erhalten, aber in anderen Bereichen, in denen Daten experimentell erfasst werden, wird es immer fehlende Werte geben. In diesem Beispiel wird PCA verwendet, um fehlende Werte in den Prädiktoren selbst zu rekonstruieren. In dem Beispiel werden nach dem Zufallsprinzip Werte in einer von drei Spalten gelöscht, ein PCA-Modell erstellt und dieses verwendet, um fehlende Werte zu rekonstruieren.

Ich habe das nie ausprobiert, aber technisch gesehen könnte man die Zielvariable auch als Prädiktor behandeln, indem man sie in das pca-Modell einbezieht. In den neuen Daten ist der Wert dann unbekannt, so dass pca die fehlenden Werte auffüllen kann.

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
#trainData - таблица с обучающими примерами. Целевая переменная тоже должна быть в этойже таблице. Пример колонок: Close,Hour,MA30,target. (target - целевая переменная, со значениями например 0 или 1 обозначающими падение/рост цены)
## 50 steps is not enough, for good estimation use 1000
NlPca <- pca(trainData, nPcs=1, method="nlpca", maxSteps=50)
#newData - таблица с новыми данными, для проверки модели. Колонки должны быть теже Close,Hour,MA30,target
newData[,"target"] <- NA  #целевая  переменная на новых данных не должны быть известна модели, и в случае NA - функция fitted должна подставить туда подходящие значения
fittedNewData <- fitted(NlPca, newData)
fittedNewData[,"target"] #  ваш результат предсказания
Я не могу начать новую нормальную строку :/ В общем можно сделать как я написал выше, но это не предсказание а реконструкция. PCA модель может просто найти некие значения которые "подойдут". Гарантий никаких нет, я предполагаю что ошибка будет 50%
 
Kombinator:
Die PCA war ursprünglich dazu gedacht, die Dimensionalität der ursprünglichen Reihen zu reduzieren. Das war's. Sie für die Auswahl von Prädiktoren zu verwenden, ist unsinnig.

Nein, das ist in Ordnung. Da die Prädiktoren, die für jede der Hauptkomponenten verwendet werden, bekannt sind, können wir die Prädiktoren, die nicht in den Hauptkomponenten verwendet werden, sicher aussortieren. Lesen Sie dies, ich mochte es: http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ Es enthält 5 gute Prädiktoren und Dutzende von Rauschprädiktoren. Sie filtern das Rauschen mit Hilfe von Analysen heraus. Ich habe den gleichen Code für andere Beispiele in diesem Thread verwendet, es funktioniert im Allgemeinen. Aber Forex ist komplizierter, ich habe nicht so schöne Bilder mit Indikatoren drauf, ich sollte mir etwas Schlaueres ausdenken.

 
Dr. Trader:

Dieses Beispiel ist leider von einem anderen Thema. Im Forex-Bereich beispielsweise können wir immer 100 % der Daten abrufen, aber in anderen Bereichen, in denen Daten experimentell gewonnen werden, wird es immer Lücken, fehlende Werte, geben. In diesem Beispiel wird PCA verwendet, um fehlende Werte in den Prädiktoren selbst zu rekonstruieren. In dem Beispiel wird zufällig ein Wert in einer der drei Spalten gelöscht, ein PCA-Modell erstellt und dieses verwendet, um die fehlenden Werte zu rekonstruieren.

Ich habe das nie ausprobiert, aber technisch gesehen könnte man die Zielvariable auch als Prädiktor behandeln, indem man sie in das pca-Modell einbezieht. In den neuen Daten ist der Wert dann unbekannt, so dass pca die fehlenden Werte auffüllen kann.

Ich habe vermutet, dass es kein Zufall ist, dass diese "NA"-Striche in das Datum geworfen werden, aber ich habe das Handbuch gelesen, es heißt eindeutig PCA mit einem neuronalen Netz, aber dann ist immer noch nicht klar, wie dieser Typ von der Website dieses schöne Bild mit einer guten Aufteilung nach Klassen bekommen hat
Grund der Beschwerde: