目录
- 1.参数stratify的作用
- 2.代码演示
- 3. 为什么XGBoost从分类模型转成回归模型,这个参数要去掉呢?
1.参数stratify的作用
在使用XGBoost进行分类任务时,数据集通常会被分成训练集和测试集。为了确保训练集和测试集中的类分布与原始数据集中的类分布一致,可以使用 train_test_split 函数中的 stratify 参数。
当数据集的类分布不均衡时,直接进行随机分割可能会导致训练集和测试集中类的比例不一致,从而影响模型的性能和评估结果。使用 stratify 参数可以确保分割后的训练集和测试集中的每个类的比例与原始数据集中相同。
2.代码演示
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score# 加载示例数据集
data = load_iris()
X = data.data
y = data.target# 使用 stratify 参数进行分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)# 转换为 DMatrix 格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)# 设置 XGBoost 参数
params = {'objective': 'multi:softmax','num_class': 3,'eval_metric': 'mlogloss'
}# 训练模型
bst = xgb.train(params, dtrain, num_boost_round=10)# 进行预测
y_pred = bst.predict(dtest)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
使用 train_test_split 函数,并通过 stratify=y 参数确保训练集和测试集中每个类的比例与原始数据集相同。
3. 为什么XGBoost从分类模型转成回归模型,这个参数要去掉呢?
在使用 XGBoost 进行分类和回归任务时,需要设置不同的参数来指定模型的类型。stratify 参数是用于数据集分割中的参数,它与模型的类型(分类或回归)无关。通常,在分类任务中使用 stratify 参数是为了保证训练集和测试集中各个类别的比例与原始数据集一致。
然而,当从分类任务切换到回归任务时,标签 y 是连续值而不是离散的类别,因此 stratify 参数就不再适用了,因为 stratify 只能用于分类任务中的类别平衡。在回归任务中,当进行数据集划分时,只需指定 test_size 和 random_state 即可。