学习xgboost记录1

原文链接:
https://machinelearningmastery.com/xgboost-python-mini-course/


1.第一个xgboost

from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]
# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model on training data
model = XGBClassifier()
model.fit(X_train, y_train)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

train_test_split的应用
train_X,test_X, train_y, test_y =
train_test_split(train_data,train_target,test_size=0.4, random_state=0)
参数解释:
train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子

accuracy_score的应用
分类准确率分数是指所有分类正确的百分比。分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。(在实际应用中,还会用到召回率,查准率,ROC,AUC等)。

2.监控绩效并尽早停止

model.fit()时可以通过调用verbose = True来输出评估指标,评估指标为'error','logloss'

eval_set = [(X_test, y_test)]
model.fit(X_train, y_train, eval_metric="error", eval_set=eval_set, verbose=True)

同时可以通过设定early_stopping_rounds来解决因为迭代次数过多而过拟合的状态
说明:设置early_stopping_rounds=10,当logloss在10轮迭代之内,都没有提升的话,就stop。经验上,选择early_stopping_rounds = 10%*(总迭代次数)。

3.xgboost特征的重要性

xgboost可以自动计算模型各特征的重要性,可以直接打印
print(model.feature_importances_)
xgboost也提供内置函数来绘制特征重要性
plot_importance(model)

4.调整xgboost模型

  • 学习率:应该设置为0.1或更小,越小的学习率需要增加更多的树
  • 树的深度:应该设置2-8之间,树太深容易过拟合
  • 子采样:应该在训练数据30%-80%,并且与不采样的100%的值比较
  • 以默认参数运行并查看训练与验证集的学习曲线
  • 如果过拟合,降低学习率或增加树的数量
  • 如果欠拟合,增加学习率或减少树的数量

最后,使用并行时需要加入if __name__ =='__main__'

你可能感兴趣的:(学习xgboost记录1)