トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 693

 
このコードをスクリプトに書き込んで何度か実行したところ、毎回微妙に違う結果になりました...。
 
ヴィザード_。

set.seed(1234)

それは何なのか、どこに置けばいいのか。

 
ミハイル・マルキュカイツ

それは戦いの半分以上である...。そういうことだ......。

90%、模型は技術の問題、カレットは適切な結び方でこのようなものがいっぱいあります。

 

こちらもvtreatを使った例です。

一般にこれはデータの前処理であるが、ターゲットに対する各予測器の推定値として使用することができる。このパッケージは予測変数の相互作用を考慮しないのが気に入らない。ターゲットに対して予測変数を一度に1つずつ推定するのに十分な場合のみ、このコードを使用します。

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), всё что больше - плохо

 
ミハイル・マルキュカイツ
それは何なのか、どこに置けばいいのか。

set.seedは乱数発生器の 初期種を設定します。コード実行前に同じ状態(1234など)にしておくと、以下のコードはどのような場合でも同じように実行されます。

read.csv2(...等)
set.seed(1234)
ボルタ(TargetProf...他)

しかし、おそらくアルゴリズムはもっと反復回数を必要とし(例えばmaxRuns = 1000000)、デフォルトのような小さな回数に収まらず、途中で止まってしまうのでしょう。

 

回帰を考えていたのですが...。
金融市場の回帰は、滑らかな関数ではなく、1pt刻みのステップ関数である。(先生にも予想にも)。例えば、動きを±100ptに制限すると、200クラスに分類されるのと同じようなものです。そのため、出力では最も確率の高いクラス(例えば+22pt)を予測します。
良い結果を得るためには、回帰のためのモデルの構造/複雑さ(ニューロン数)を200倍大きくする必要があるということではないのでしょうか?まあ、5ptにステップを増やせば、40回は精度が落ちる代償として、もう少し経済的になるんですけどね。

 
ファイルをvtreatで走らせ、確かに多くはない。4入力のみ選択。教えてくれてありがとう・・・。 これからも回し続けるよ・・・。
 
ヴィザード_。

ここでボックスプロットを呼び出し、入力に何かをして、再度実行します。

set.seedパラメータはどちらも同じです。

入力はどうすればいいんだ?

そうですね......正直、もっといいものを期待していたんですけどね。とにかく、もっと重要なものがあると思ったのですが、確かに100人中4人はいないですね。しかし、実践してみると、モデルがシンプルであればあるほど、うまくいくことに気づきました。そして、モデルを見て、自分でテストしてみると、この小さな虫はかなり優秀だと理解できました......。結論を出すには時期尚早であり、より多くのテストが必要である。どんどん掘ってください...。

 
どこにでも書いてある
forexFeatures <- read.csv2("Qwe.txt")

実際に必要なのです。
forexFeatures <- read.csv2("Qwe.txt", dec=".")

すみません、ファイルの形式を見間違えました。古い書き込みを訂正します。コードを再実行すると、結果が良くなるはずです。そうでなければ、小数の端数を含むすべての数値が誤って処理されたことになります。
 
ミハイル・マルキュカイツ

インプットをどうするか?

例えば、jPredictionはデータを区間[-1;1]にスケーリングして、その数値で学習する。また、入力を評価する前に、Rで同じ間隔にスケーリングすることもできます。

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

森はデータがどの間隔で来たかをあまり気にしないので、木に基づく推定方法でもおそらく結果は変わりませんが、確認した方がよいでしょう。vtreatも間隔にこだわらない。


しかし、一般的には、神経回路に入力する前の入力の非線形変換について話しています。Neuronicsは入力に対して非常に敏感で、入力データを何か特別な方法で処理すると、その結果が改善されることがあります。例えば、シグモイドで入力を変換する、というようなことを聞いたことがあります。

理由: