首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带列车/测试分叉的CatBoost randomized_search

问带列车/测试分叉的CatBoost randomized_search
EN

Stack Overflow用户
提问于 2022-06-24 16:58:07
回答 1查看 220关注 0票数 1

CatBoost文档表示,randomized_search方法可以通过cv参数接受训练和测试拆分,而不是定义交叉验证方法。要做到这一点,应规定:

是一种可迭代的生成序列,测试分裂作为索引数组。

我们如何定义这个对象?

作为一个坏例子,假设我的功能数据集有10行。我希望使用前5行进行培训,最后5行用于验证/测试。

我提取索引值。

代码语言:javascript
复制
train_index = X[0:5].index
test_index = X[5:10].index

我向randomized_search方法提供索引

代码语言:javascript
复制
a_search = model.randomized_search(param_distributions=params, 
                                   X = X,
                                   y = y,
                                   n_iter=5,
                                   cv={train_index,test_index})

我在cv={train_index,test_index}中提供的这个集合是不可能的,因为它是不可迭代的,但是我不知道这样的迭代应该如何。我只想定义X和y的哪些行用于培训,哪些行用于测试。目标是通过免除交叉验证和使用专用验证数据集来加快培训。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-25 05:40:25

您可以使用一个元组列表:

代码语言:javascript
复制
cv=[(train_index, test_index)]

示例:

代码语言:javascript
复制
import pandas as pd
import numpy as np
from catboost import CatBoost

# generate the data
data = np.random.normal(loc=0, scale=1, size=(10, 3))
labels = np.mean(a=data, axis=1)

df = pd.DataFrame(
    data=np.hstack([data, np.expand_dims(labels, axis=1)]),
    columns=['x1', 'x2', 'x3', 'y']
)

# split the data
train_index = df.index[:5]
test_index = df.index[5:]

# instantiate the model
model = CatBoost()

# tune the model
results = model.randomized_search(
    param_distributions={
        'depth': [2, 3, 4],
        'iterations': [5, 6, 7]
    },
    X=df[['x1', 'x2', 'x3']],
    y=df['y'],
    cv=[(train_index, test_index)],
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72747256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档