我想使用scikit-learn的GridSearchCV来确定随机森林模型的一些超级参数。我的数据是时间相关的,看起来像
import pandas as pd
train = pd.DataFrame({'date': pd.DatetimeIndex(['2012-1-1', '2012-9-30', '2013-4-3', '2014-8-16', '2015-3-20', '2015-6-30']),
'feature1': [1.2, 3.3, 2.7, 4.0, 8.2, 6.5],
'feature2': [4, 4, 10, 3, 10, 9],
'target': [1,2,1,3,2,2]})
>>> train
date feature1 feature2 target
0 2012-01-01 1.2 4 1
1 2012-09-30 3.3 4 2
2 2013-04-03 2.7 10 1
3 2014-08-16 4.0 3 3
4 2015-03-20 8.2 10 2
5 2015-06-30 6.5 9 2
如何实现以下交叉验证折叠技术?
train:(2012, 2013) - test:(2014)
train:(2013, 2014) - test:(2015)
也就是说,我想使用2年的历史观测值来训练模型,然后在接下来的一年中测试其准确性。
您只需要将拆分的可迭代对象传递给GridSearchCV。此拆分应采用以下格式:
[
(split1_train_idxs, split1_test_idxs),
(split2_train_idxs, split2_test_idxs),
(split3_train_idxs, split3_test_idxs),
...
]
要获取idx,您可以执行以下操作:
groups = df.groupby(df.date.dt.year).groups
# {2012: [0, 1], 2013: [2], 2014: [3], 2015: [4, 5]}
sorted_groups = [value for (key, value) in sorted(groups.items())]
# [[0, 1], [2], [3], [4, 5]]
cv = [(sorted_groups[i] + sorted_groups[i+1], sorted_groups[i+2])
for i in range(len(sorted_groups)-2)]
看起来像这样:
[([0, 1, 2], [3]), # idxs of first split as (train, test) tuple
([2, 3], [4, 5])] # idxs of second split as (train, test) tuple
然后,您可以执行以下操作:
GridSearchCV(estimator, param_grid, cv=cv, ...)
问题内容: 我需要为(X_test,y_test)数据的每个拆分显式获取交叉验证统计信息。 因此,我尝试这样做: 是否是通过使用例如KFold来获得每个交叉验证拆分的平均绝对误差(MAE)的正确方法? 问题答案: 您的方法存在一些问题。 首先,您当然不必在培训和验证列表(即您的2个内部循环)中 一个接一个地手动 添加数据。简单的索引就可以完成工作。 此外,我们通常从不计算和报告训练CV折叠的错误-
根据scikit-learn的文档 你觉得呢?
问题内容: 是否可以在没有交叉验证的情况下使用GridSearchCV?我正在尝试通过网格搜索优化KMeans聚类中的聚类数量,因此我不需要或想要交叉验证。 该文档也使我感到困惑,因为在fit()方法下,它有一个用于非监督学习的选项(例如,将None用于非监督学习)。但是,如果您想进行无监督学习,则需要在没有交叉验证的情况下进行学习,而且似乎没有摆脱交叉验证的选择。 问题答案: 经过大量搜索,我能
本文向大家介绍问题:对应时间序列的数据集如何进行交叉验证?相关面试题,主要包含被问及问题:对应时间序列的数据集如何进行交叉验证?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1.预测后一半;2.日向前链 解析:传统的交叉验证由于假定样本独立同分布,因此随机打乱分为训练集和验证集。但是对于时间序列来讲,需要考虑序列间的时间依赖。
我目前正在处理一个巨大的不平衡数据集,并想知道是否有可能使用sklearn的时间序列分裂交叉验证来将我的训练样本分裂成几个“折叠”。我希望每个褶皱只包含在特定褶皱的时间框架内的横截面观察。 如前所述,我正在使用一个非平衡面板数据集,它利用了Pandas的多索引。这里有一个可重复的例子来提供更多的直觉: 例如,我希望最初将1999-12年的所有横截面单元作为训练样本,并将2000-01年的所有横截面
交叉验证 那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预