文章 "基于暴力算法的 CatBoost 模型高级重采样与选择" - 页 10

 
elibrarius:

哪些?

F1,MCC 似乎更好。

以下是完整列表

https://catboost.ai/docs/concepts/loss-functions-classification.html

Classification: objectives and metrics - CatBoost. Documentation
  • catboost.ai
If the target type is not binary, then every object with target value and weight is replaced with two objects for the metric calculation: Target values must be in the range [0; 1]. If the target type is not binary...
 
Maxim Dmitrievsky:

F1、MCC 似乎更好

以下是完整列表

https://catboost.ai/docs/concepts/loss-functions-classification.html

很难推测它们为什么更好。
 
Maxim Dmitrievsky:

再来一次

嗯,是的,有时候是有道理的。

多放点赌注是的,叠加是有道理的。至于多少还是个未知数

文章写得很好,工作也很出色!

在数据集方向改变后,在将标签输入混合物模型之前,先将标签去掉。

X['labels'].loc[X['labels'].diff(2)!=0] = np.nan
X = X.dropna().reset_index(drop=True)

通过观察,更多模型给出了积极的结果。

Iteration:  0 R^2:  0.5260017837414628
Iteration:  1 R^2:  0.6331497253790681
Iteration:  2 R^2:  0.029844101542724655
Iteration:  3 R^2:  0.792134192720112
Iteration:  4 R^2:  -0.5575595243513453
Iteration:  5 R^2:  0.6266442030501214
Iteration:  6 R^2:  0.22435035980633944
Iteration:  7 R^2:  0.38384379495564724
Iteration:  8 R^2:  0.028795249767878173
Iteration:  9 R^2:  0.4976165963899961
Iteration:  10 R^2:  0.38091909530246537
Iteration:  11 R^2:  0.6668471456765452
Iteration:  12 R^2:  0.9173487144971179
Iteration:  13 R^2:  0.31007344321289365
Iteration:  14 R^2:  0.4391449002278133
Iteration:  15 R^2:  0.8643834389201246
Iteration:  16 R^2:  0.1609614914253078
Iteration:  17 R^2:  -0.593998636390909
Iteration:  18 R^2:  0.7253019217609338
Iteration:  19 R^2:  0.11872614816490491
Iteration:  20 R^2:  0.0023909994463473527
Iteration:  21 R^2:  0.6486563192357756
Iteration:  22 R^2:  0.011546691763490213
Iteration:  23 R^2:  0.8085201529889603
Iteration:  24 R^2:  0.9233877589157101
Iteration:  25 R^2:  -0.08743681307491602
Iteration:  26 R^2:  0.6132492793114834
Iteration:  27 R^2:  0.0016322532208268292
Iteration:  28 R^2:  -0.2241780583190326
Iteration:  29 R^2:  0.6739577294046565
Iteration:  30 R^2:  0.43270922254052624
Iteration:  31 R^2:  -0.40571688327667377
Iteration:  32 R^2:  0.8558895655918841
Iteration:  33 R^2:  0.22222950417101828
Iteration:  34 R^2:  0.8718519436072187
Iteration:  35 R^2:  0.3103828388939166
Iteration:  36 R^2:  -0.3274785257455094
Iteration:  37 R^2:  -0.056797883380174774
Iteration:  38 R^2:  0.7372428685425149
Iteration:  39 R^2:  0.46650446544282376
Iteration:  40 R^2:  0.7158974618001703
Iteration:  41 R^2:  -0.08982821839565835
Iteration:  42 R^2:  -0.004541876992860683
Iteration:  43 R^2:  0.39737057218337546
Iteration:  44 R^2:  -0.35131421135378293
Iteration:  45 R^2:  -0.003237278102928842
Iteration:  46 R^2:  0.37272998002935753
Iteration:  47 R^2:  -0.5554473442698793
Iteration:  48 R^2:  0.38766288235168855
Iteration:  49 R^2:  0.8582912360226171

在测试仪和终端中的最佳测试结果:


总的来说,这是一个漂亮的作品。我用它测试了我所有的目标,然后把它们扔进了垃圾桶。)

 
welimorn:

这篇文章写得很好,是一项艰巨的工作!

在将数据集输入混合物模型之前,先将数据集方向改变后的标签去掉。

从观察结果来看,更多模型的结果是正面的。

测试仪和终端的最佳测试结果:


总的来说,工作非常出色。在它的帮助下,我检查了我所有的目标,并把它们扔进了垃圾桶。)

是的,您可以在聚类前丢弃

感谢您的反馈)

Z.Ы 这样您就可以一次性测试所有模型,平均。播放。所有模型的解析器还没有制作完成,仍有疑问。但有时几个模型的组合确实会有所改善。

def test_models(result):
    pr_tst = get_prices(FULL_DATE, STOP_DATE)
    X = pr_tst[pr_tst.columns[1:]]
    X.columns = [''] * len(X.columns)

    #test the learned model
    p = 0
    for i in range(len(result)):
        p += result[i][2].predict_proba(X)

    p = p/len(result)
    p2 = [x[0]<0.5 for x in p]
    pr2 = pr_tst.iloc[:len(p2)].copy()
    pr2['labels'] = p2
    R2 = tester(pr2, MARKUP, plot=True)

test_models(res)
ZYZY. 你可以用相同的指标 R2 来枚举不同的训练模型组合,作为主题的发展。然后保留最好的组合。如果有很多模型,甚至可以通过遗传学来实现。
 
你好,马克西姆、

谢谢你又写了一篇好文章!:)

我获取了欧元兑美元从 2015 年到 2020 年的 H1 数据,并将其分为三组:

1.训练集:从 2015.01.01 到 2018.01.01
仅用于训练 GMM。

2.验证集:从 2018.01.01 到 2019.01.01
该集和训练集将用于蛮力 函数 ,以找到最佳模型

3.测试集:2019.01.01 至 2020.01.01
该数据集仅用于测试蛮力算法得出的最佳模型

以下是整个数据集的回溯测试结果、


我仔细检查了我的代码,但我可能做错了什么。总之,您可能会对结果有所了解。谨致问候,Rasoul


Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
Rasoul Mojtahedzadeh:
你好,马克西姆、

谢谢你又写了一篇好文章!:)

我采集了欧元兑美元 2015 年至 2020 年的 H1 数据,并将其分成三组:

1.训练集:从 2015.01.01 到 2018.01.01
这仅用于训练 GMM。

2.验证集:2018.01.01 至 2019.01.01
该集和训练集将用于蛮力 函数 ,以找到最佳模型

3.测试集:2019.01.01 至 2020.01.01
该集仅用于测试蛮力算法得到的最佳模型

以下是整个数据集的回溯测试结果、


我仔细检查了我的代码,但我可能做错了什么。总之,您可能会对结果有所了解。谨致问候,Rasoul


你好,Rasoul。试着减少训练集的大小。这取决于不同的设置,但关键诀窍在于,训练集越小,对新数据的泛化效果就越好。在下一篇文章中,我会尝试解释这种效果。
 
Maxim Dmitrievsky

您能告诉我如何通过 csv 文件上传数据吗?


我试过这种方式,但无法加载。


文件格式是

时间,收盘价

2020,11,15,1.3587

2020,11,16,1.3472


def get_prices(START, STOP):
    prices = pd.read_csv('file.csv', columns=['time', 'close']).set_index('time')
    prices.index = pd.to_datetime(prices.index, unit='s')
    prices = prices.dropna()
    pr = prices.copy()
    count = 0
    for i in MA_PERIODS:
        returns = pr - pr.rolling(i).mean()
        for l in range(LOOK_BACK):
            prices[str(count)] = returns.shift(l)
            count += 1
    return prices.dropna()
 
Evgeni Gavrilovi:

您能告诉我如何通过 csv 文件上传数据吗?

def get_prices(look_back = 15):
    prices = pd.DataFrame(mt5.copy_rates_range(SYMBOL, TIMEFRAME, START_DATE, STOP_DATE), 
                            columns=['time', 'close']).set_index('time')
    prices.index = pd.to_datetime(prices.index, unit='s')
    prices = prices.dropna()
    pr = prices.copy()
    count = 0
    for i in MA_PERIODS:
        returns = pr - pr.rolling(i).mean()
        for l in range(look_back):
            prices[str(count)] = returns.shift(l)
            count += 1
    
    prices = prices.dropna()
    prices.to_csv('pr.csv', sep=';')
pr = pd.read_csv('pr.csv', sep=';')

也就是说,这是一个从终端加载数据并保存到文件的示例。然后您可以将其用于 colab

 
Maxim Dmitrievsky:
你好,拉苏尔。试着减少训练集的大小。这取决于不同的设置,但关键诀窍在于,训练集越小,对新数据的泛化效果就越好。在下一篇文章中,我会尝试解释这种效果。

这很好。如果能在文章中说明本论文的适用范围,特别是适用于不同的 IO 方法,那就更好了。出于某种原因,他们建议 NS 采用 70/30 的比例。从逻辑上讲,在我看来,50/50 应该能得到更稳定的结果。

 
Stanislav Korotky:

这很好。如果能在文章中说明本论文的适用范围,特别是适用于不同的 MO 方法,那就更好了。出于某种原因,建议对 NS 采用 70/30 的比例。从逻辑上讲,我认为 50/50 应该能得到更稳定的结果。

有主动学习和被动学习之分。被动学习包括手动标注 数据并对其进行训练,在这种情况下,应该有大量数据,但存在正确标注的问题。也就是说,"教师 "必须对数据进行标注,使其按照惯例来自相同的分布,并具有良好的概括性。在这方面,受训者和测试者的比例几乎没有区别。它几乎什么也不会给你带来,它只是一个模型检查,检查你手工标注数据的效果如何。

在主动学习中,模型会学习以最佳方式标注数据。这篇文章就是这样一个通过 GMM 进行分区的案例。也就是说,既使用了有教师的学习,也使用了无教师的学习。在这种情况下,模型学会在小分区数据上学习,并必须以最优方式自行对剩余数据进行分区。这是一种相对较新的方法(大约从 2017 年开始)。我想在后续文章中更详细地介绍它。

句子中的 "数据 "太多,我为同义反复道歉 )