**
XGBoost:
**
通用参数:
宏观函数控制
Booster>>
gbtree:采用数的结构来运行数据
gblinear:基于线性模型运行数据
Silent>>
静默模式,为1时模型运行不输出
Nthread>>
使用线程数,默认为-1,使用所有线程。
Booster参数:
控制每一步的boooster(tree/regression)。可以调控模型效果和计算代价。调参很大程度上就是在调整booster参数
-
n_estimators:
生成最大树的数目,也是最大的迭代次数。 -
learning_rate:
默认为0.3,每一步迭代的步长,可以理解为学习效率(eta)。一般使用0.1左右即可。 -
Gamma
默认为0,一般使用也是0。Gamma指定节点分裂所需的最小损失函数下降值。范围为:0~正无穷 -
Subsample:
默认为1,控制每棵树随机采样的比例。值越小,越保守,避免过拟合。如果值太小,可能导致欠拟合。典型值:0.5-1,0.5表示平均采样,防止过拟合。范围(0,1],不可取0. -
Colsample_bytree:
默认为1,一般使用0.8左右。控制每棵树随机采样的列数的占比(每一列为一个特征)典型值0.5-1,范围(0,1】 -
colsample_bylevel:
默认为1,一般使用也是1.每棵树每次节点分裂的时候采样的比例。 -
Max_depth:
默认为6,一般使用3-10之间的数字。控制树的最大深度。值越大,模型学习的越具体。设置为0,代表没有限制。范围:0~正无穷 -
Lambda:
默认为0,权重L2正则化项。在减少过拟合上很有帮助。 -
Alpha:
默认为0,权重的L1正则化项。用在很高维度的情况下,加快算法运行速度。 -
Scale_pos_weight:
默认为1,在各类别样本十分不平衡是,将其设定为一个正值,可以使算法更快收敛。通常设置为负样本的数目与证样本数目的比值。
学习目标参数:
控制训练目标的表现。提供二分类、多分类、回归等学习目标。
Objective【默认=reg:linear】
- reg:linear: 线性回归
- reg:logistic 逻辑回归
- binary:logistic: 二分类逻辑回归,输出为概率
- binart:logitraw: 二分类逻辑回归,输出结果
- multi:softmax: 多分类,需要同时设置num_class(类别个数)
- multi:softprob 多分类,输出结果为概率
eval_metric:【默认=通过目标函数选择】
- rmse:均方根误差
- mae: 平均绝对值误差
- logloss:negative log-likelihood
- error:二分类错误率=错误分类数目/全部分类数目。对于预测,预测值>0.5被认为是正类,其他归为负类。error@t:不同的划分阈值可以通过 ‘t’进行设置
- merror:多分类错误率=错误分类数目/全部分类数目
- mlogloss:多分类log损失
- auc:曲线下的面积
- map:平均正确率
一般来说,使用xgboost.train(params,dtrain)函数来训练模型。
以二分类为例分别展示输出概率和输出结果类型
输出结果:
model = XGBClassifier{
'max_depth':10,
'learning_rate':0.1,
'n_estimators':50,
'silent':1,
'objective':'binary: logitraw',
'booster'='gbtree'
}
Model.fit(train_x,train_y,eval_metric=’error’, verbose=True)
#Verbose:调节系统输出,设置成10,每次迭代次会输出。
y_pre = model.predict(test_x)
#最终的输出结果为二分类结果(0或1)
输出概率:(输入数据格式为Dtrain格式)
params ={'learning_rate': 0.1,
'booster':'gbtree',
'max_depth': 8,
'num_boost_round':20,
'objective': 'binary:logistic',
'random_state': 30,
'silent':1,
'subsample':1.0,
'min_child_weight':5,
'colsample_bytree':0.2,
'scale_pos_weight':0.1,
'eval_metric':'auc',
'gamma':0.,
'reg_lambda':0
}
watchlist = [ (xg_train,'train'), (xg_test, 'test')]
model = xgb.train(params,xg_train, num_boost_round=50, evals=watchlist)
#50为迭代次数
y_pred = model.predict(xg_test)
#最终的输出结果为目标列为1的概率。
算法调参,调整的参数基本上都属于Booster参数一栏中: 最多次数调整的参数有:max_depth、subsample、min_child_weight 、colsample_bytree、eta
、num_round