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

 
Maxim Dmitrievsky #:
遺伝学では、変数を用いて基準を最大化する。遺伝学では、変数を取り出して基準で最大化する。利益とクラスラベルの間には何の関係もない。せいぜいナンセンスな結果を得るだけだ。だからこのような基準はeval_metricsに置かれるのだ。

人生に幸福はない)

 
Aleksey Nikolayev #:

人生に幸せはない)

損失f-maという名前からしても、基準値とモデルの間の損失f-maである。

利益という袖はどちらにあるのか?
 
Maxim Dmitrievsky #:
損失ph-yという名前からしても、基準値とモデル間の損失ph-yである

ここで利益スリーブはどちら側か

実際、我々はMOの分野からより一般的な最適化の分野へと移行している。それでも、「可能な限り多く稼ぐ」ことと「可能な限り頻繁に正しくある」こととはまったく同じではない。

 
Andrey Dik #:

1. v

2. ここに、ある仮想的な学習関数の曲線のような図がある。

グリッドが局所極値1で停止することに満足しますか? それとも2? それとも3、真ん中あたり? つまり、局所極値がいくつあるか事前にわからないのです、100500あるかもしれないし、もっとあるかもしれません。だからこそ、アルゴリズムが到達できる局所極限のうち、最も高い極限を見つけようとすることが重要なのです。

大域的極大の探索を正当化するという意味で、これは非常に美しく、証明可能である。

しかし、これは歴史上の話である。

もし右側にバーを追加したらどうだろう?それでも美しいだろうか?それとも崩壊するだろうか?市場は非定常である。テスターを信じますか?彼はそれを見つける、それは美しい、色で...

 
Maxim Dmitrievsky #:
遺伝学では、変数を用いて基準を最大化する。遺伝学では、変数を取り出して基準で最大化する。利益とクラスラベルの間には何の関係もない。せいぜいナンセンスな結果を得るだけだ。だからこのような基準はeval_metricsに置かれるのです。
分類の質は何らかの方法で評価できるので、この評価を最大化することが最適化の目的なのです。
 
Maxim Dmitrievsky #:
損失ph-yという名前からしても、基準値とモデル間の損失ph-yである

ここで利益スリーブはどちら側か

スリーブがある

 
Andrey Dik #:
したがって、この評価を最大化することが最適化の目標である。
さて、オリジナルと学習済みの間の損失は最小化される。もちろん、試しに正規化された利益という形で小さな控除を加えることは可能だが、それは必要だろうか?
 
СанСаныч Фоменко #:

大域的な最大値の探索を正当化するという意味で、非常に素晴らしく、証明可能だ。

しかし、それは歴史の中にある。

右側にバーを追加したらどうだろう?美しさは保たれるだろうか?それとも崩壊するだろうか?市場は静止していない。テスターを信じますか?彼はそれを見つける、それは美しい、色で...

それが歴史上であろうと未来であろうと関係ない。テスター自身は関係ない。

重要なのは、ある評価基準の大域的最適値を求めるアルゴリズム(個別またはグリッドの一部としての最適化アルゴリズム)の特性である。評価基準を 強調します。評価基準は必ずしも利益だけとは限りません。例えば、OOSに関する仕事の評価基準は、基準(サンプルとOOSの差を最小化する)ではないのですか?- 単なる思いつきです。基準は何でもよく、どんな複雑なものでもよい。そのため、人々はより滑らかで、より単調な評価基準を考え出そうとします。そうすることで、一般的に最適化そのものや、特にニューロニクスのトレーニングの質が向上します。

つまり、局所極限の数も特性もわかっていない状況では、計算能力が限られている中で可能な限り可能なものを探すしかないという事実を明確に示しているのです。

プラトー - 確かにそのような概念はあるが、それは最適化とは関係なく、ある属性によって類似のパラメータセットを分類する問題である。安定したプラトーを探すのは、別の複雑な作業だ。

 

ようやく自分なりの損失関数を手に入れた。微分はシャープ、エラー、ウェイトの積で表される。

is_max_optimal=Falseは値が減少していることを示すが、-1倍もしているので逆も真である。

class SharpeObjective(object):
  def calc_ders_range(self, approxes, targets, weights):
    assert len(approxes) == len(targets)
    if weights is not None:
      assert len(weights) == len(approxes)

    result = []
    for index in range(len(targets)):
      preds = [approxes[i] for i in range(len(targets))]
      preds = [i if i>0 else -1*i for i in preds]
      sharpe = np.mean(preds)/np.std(preds)
      der1 = targets[index] - approxes[index]
      der2 = -1

      if weights is not None:
        der1 = -1 * sharpe * der1 * weights[index]
        der2 = der2 * weights[index]

      result.append((der1, der2))
    return result

class Sharpe(object):
    def get_final_error(self, error, weight):
        return error

    def is_max_optimal(self):
        return False

    def evaluate(self, approxes, target, weight):
        assert len(approxes) == 1
        assert len(target) == len(approxes[0])
        preds = np.array(approxes[0])
        target = np.array(target)
        preds = [i if i > 0 else -1*i for i in preds]
        sharpe = np.mean(preds)/np.std(preds)
        return sharpe, 0

model = CatBoostRegressor(learning_rate=0.1, loss_function=SharpeObjective(), eval_metric=Sharpe())
 
Evgeni Gavrilovi #:

最終的に独自の損失関数を持ち、微分はシャープ、エラー、ウェイトの積として表される。

is_max_optimal=Falseは、値が減少していることを示すが、-1倍もしているので、逆も真である。

トレーニング結果は改善されましたか?)
理由: