文章 "机器学习和交易中的元模型:交易订单的原始时序" - 页 12

 
Aleksey Vyazmikin #:

idex值(0,1,2)如何与日历日期进行比较?

它们之间没有比较,只是时间列必须设置为索引,而 0,1,2 完全不需要

请尝试在您的代码中突出显示

def get_prices() -> pd.DataFrame:
    p = pd.read_csv('files/EURUSD_H1.csv', delim_whitespace=True)
    pFixed = pd.DataFrame(columns=['time', 'close'])
    pFixed['time'] = p['<DATE>'] + ' ' + p['<TIME>']
    pFixed['time'] = pd.to_datetime(pFixed['time'], format='mixed')
    pFixed['close'] = p['<CLOSE>']
    pFixed.set_index('time', inplace=True)
    pFixed.index = pd.to_datetime(pFixed.index, unit='s')
    pFixed = pFixed.dropna()
    pFixedC = pFixed.copy()

    count = 0
    for i in PERIODS:
        pFixed[str(count)] = pFixedC.rolling(i).mean() - pFixedC
        count += 1

    return pFixed.dropna()
 
Maxim Dmitrievsky #:

它们不需要进行比较,只需将时间列设置为索引,而 0,1,2 完全不需要

请尝试在代码中突出显示

总的来说,我已经花了很多时间。对来自文件的数据的改编并不成功。

显然,从头开始重写更容易。

第二次迭代时,数据在标记后的某个地方消失了--我不知道这是否是书的某种问题。

Уникальные значения в train_y (meta model): [0.]
Traceback (most recent call last):
  File "F:/FX/Python/meta_modeling_Viborka.py", line 504, in <module>
    res.append(brute_force(pr[pr.columns[1:]], bad_samples_fraction=0.5))
  File "F:/FX/Python/meta_modeling_Viborka.py", line 265, in brute_force
    meta_model.fit(train_X, train_y, eval_set=(test_X, test_y),
  File "C:\Program Files\Python38\lib\site-packages\catboost\core.py", line 5100, in fit
    self._fit(X, y, cat_features, text_features, embedding_features, None, sample_weight, None, None, None, None, baseline, use_best_model,
  File "C:\Program Files\Python38\lib\site-packages\catboost\core.py", line 2319, in _fit
    self._train(
  File "C:\Program Files\Python38\lib\site-packages\catboost\core.py", line 1723, in _train
    self._object._train(train_pool, test_pool, params, allow_clear_pool, init_model._object if init_model else None)
  File "_catboost.pyx", line 4645, in _catboost._CatBoost._train
  File "_catboost.pyx", line 4694, in _catboost._CatBoost._train
_catboost.CatBoostError: C:/Go_Agent/pipelines/BuildMaster/catboost.git/catboost/private/libs/target/target_converter.cpp:375: Target contains only one unique value
>>> 
附加的文件:
 

基本上,是的,这里有一个归零的过程

    # mark bad labels from bad_samples_book
    if BAD_SAMPLES_BOOK.value_counts().max() > 1:
        to_mark = BAD_SAMPLES_BOOK.value_counts()
        mean = to_mark.mean()
        marked_idx = to_mark[to_mark > mean*bad_samples_fraction].index
        pr2.loc[pr2.index.isin(marked_idx), 'meta_labels'] = 0.0
    else:
        pr2.loc[pr2.index.isin(BAD_SAMPLES_BOOK), 'meta_labels'] = 0.0

我不明白,在第一次迭代之后,我怎么能得到一个大于 1 的值?

因此,由于我没有得到,所有的值"...... "都被清零了。
meta_labels
"都被清零了。
 
Aleksey Vyazmikin #:

基本上,是的,这里有一个归零的过程

我不明白在第一次迭代后,我怎么能得到一个大于 1 的值?

因此,由于我不明白,所有的" "值都被清零了。

给我点时间集中精力,我们稍后再想办法),或者给我发一份您的数据集。

 
Maxim Dmitrievsky #:

给我点时间让我集中精力,我们稍后再想办法),或者给我发一份你的数据集

这是一个粗略的草稿。我必须解决你没有想到的问题,即不平衡的类在划分子样本时会导致错误。

趁还算数--你可以睡觉了......

我稍后会尝试上传样本。
附加的文件:
 
Maxim Dmitrievsky #:

这是一个 样本。

不过,我想我还是没有完全理解这些标记。

 
Maxim Dmitrievsky #:

我的理解是否正确,元模型将例子分类为 "1 "类,而第二个模型只在第一个模型的单位上激活?

我只是对您的代码感到困惑--被模型归类为单位的内容被写成了 0。当然,如果我理解正确的话...

    p2 = [x[0] < 0.5 for x in p]
    p2_meta = [x[0] < 0.5 for x in p_meta]

总的来说,如果我正确地重构了方法,结果如下。

000

我在代码中增加了检查功能--否则就会出错崩溃--附后。

据我所知,模型解析不起作用,是因为模型代码发生了变化?

附加的文件:
 
Aleksey Vyazmikin #:

我的理解是否正确,元模型将例子分类为 "1 "类,而第二个模型只有在第一个模型的单位上才已激活?

我只是对您的代码感到困惑--被模型归类为单位的内容被写成了 0。当然,如果我理解正确的话...

总的来说,如果我正确地还原了方法,结果如下

我在代码中添加了检查 - 否则会出错 - 附上。

我理解模型解析不起作用是因为模型代码发生了变化?

x[0] 是空类的概率,模型给出了两个类的概率。也就是说,如果空类的概率小于 0.5,则首先预测该类。因此 True == 1,反之亦然。因此,不存在错误。

是的,新版 catbust 有一些变化,我会把重新设计的版本发给你。我现在有点不在电脑前,稍后再试着帮您。
 
Maxim Dmitrievsky #:
是的,新版 catbusta 有一些改动,重新设计的部分我会打折扣。我现在有点远离电脑,稍后会尽力提供帮助。

谢谢。

 
Aleksey Vyazmikin #:

谢谢。

也许在你的数据集中,标签是颠倒的