交易中的机器学习:理论、模型、实践和算法交易 - 页 2835

 
Maxim Dmitrievsky #:
在遗传学中,我们利用变量并最大化标准。在这里你不能这么做,因为这是一种分类。利润和分类标签之间没有关系。充其量,你只会得到无稽之谈。这就是为什么要把这种标准放在 eval_metrics 中的原因

生活中没有幸福(Where is no happiness in life)。

 
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,所以情况正好相反。

训练结果有改善吗?)