XGBoost:在训练和测试中分割数据

时间:2018-05-28 10:20:45

标签: python pyspark xgboost

我正在使用XGBoost的python接口来构建模型。我有一个使用xgb.DMatrix(data_path)读取的数据集。我需要将这些数据拆分为训练和测试(并在需要时进行验证)。但我见过的大部分实现都是

形式
dtrain = xgb.DMatrix('')
dtest = xgb.DMatrix('')

我无法找到一种方法,可以在数据集中读取数据,然后将其拆分为训练,测试(和验证)集。

此外,是否可以在分割成火车和测试时进行分层抽样?

我需要知道这一点,因为我有一些稍大的数据集,目前我正在阅读它,使用spark,将它们拆分,存储在磁盘上,然后从那里读取。有没有办法,我可以做到这一点,而无需通过Pyspark和从hdfs阅读?

2 个答案:

答案 0 :(得分:1)

我将使用sklearn的train_test_split(也具有分层参数),然后将结果放入dtraindtest中。

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

在此处查看实现:A Simple XGBoost Tutorial Using the Iris Dataset

答案 1 :(得分:0)

您始终可以使用pandas从HDF5文件中读取数据(请参阅pandas.HDStore),然后使用sklearn进行拆分(简单随机或分层列车/火车拆分,请参阅stratify参数train_test_split)。然后,您可以将pandas DataFrame对象直接提供到sklearn API of xgboost或将其转换为xgboost.DMatrix并使用本机培训API中的那些