我正在使用XGBoost的python接口来构建模型。我有一个使用xgb.DMatrix(data_path)
读取的数据集。我需要将这些数据拆分为训练和测试(并在需要时进行验证)。但我见过的大部分实现都是
dtrain = xgb.DMatrix('')
dtest = xgb.DMatrix('')
我无法找到一种方法,可以在数据集中读取数据,然后将其拆分为训练,测试(和验证)集。
此外,是否可以在分割成火车和测试时进行分层抽样?
我需要知道这一点,因为我有一些稍大的数据集,目前我正在阅读它,使用spark,将它们拆分,存储在磁盘上,然后从那里读取。有没有办法,我可以做到这一点,而无需通过Pyspark和从hdfs阅读?
答案 0 :(得分:1)
我将使用sklearn的train_test_split
(也具有分层参数),然后将结果放入dtrain
和dtest
中。
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)
答案 1 :(得分:0)
您始终可以使用pandas
从HDF5文件中读取数据(请参阅pandas.HDStore),然后使用sklearn进行拆分(简单随机或分层列车/火车拆分,请参阅stratify
参数train_test_split)。然后,您可以将pandas DataFrame对象直接提供到sklearn API of xgboost或将其转换为xgboost.DMatrix
并使用本机培训API中的那些