XGBoost实战

XGBoost实战1.XGBoost参数1.1常规参数GeneralParameters      booster[default=gbtree]:选择基分类器,可以是:gbtree,gblinear或者dart。gbtree和draf基于树模型,而gblinear基于线性模型。     &nbsp…

大家好,又见面了,我是你们的朋友全栈君。

1.XGBoost参数
1.1常规参数General Parameters
      booster[default=gbtree]:选择基分类器,可以是:gbtree,gblinear或者dart。gbtree和draf基于树模型,而gblinear基于线性模型。
      slient[default=0]:是否有运行信息输出,设置为1则没有运行信息输出。
      nthread[default to maximum number of threads available if not set]:线程数,默认使用能使用的最大线程数。
      num_pbuffer [set automatically by xgboost, no need to be set by user]:预测缓冲区的大小,通常设置为训练实例的数量。缓冲区用于保存最后一个提升步骤的预测结果。
      num_feature [set automatically by xgboost, no need to be set by user]:boosting过程中用到的特征维数,设置为特征个数。
1.2模型参数Booster Parameters
      eta[default=0.3]:收缩参数,也即学习率。用于更新叶节点权重时,乘该系数,避免步长过大。参数值越大,越可能无法收敛。把eta设置的小一些,小的学习率可以使后面的学习更加仔细。通常最后设置eta为0.01~0.2。
      min_child_weight[default=1]:每个叶子里面的h的和至少是多少,这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数越小,越容易过拟合。
      max_depth[default=6]:每棵树的最大深度,该参数设置越大,越容易过拟合。建议通过交叉验证(xgb.cv ) 进行调参。通常取值:3-10。
      max_leaf_nodes:最大叶节点数,和max_depth类似。
      gamma[default=0]:后剪枝时,用于控制是否后剪枝。模型在默认情况下,对于一个节点的划分只有在其loss function得到结果大于0的情况下才进行,而gamma 给定了所需的最低loss function的值。gamma值使得算法更conservation,且其值依赖于loss function,在模型中应该进行调参。
      max_delta_step[default=0]:该参数可以使得更新更加平缓,如果取0表示没有约束,如果取正值则使得更新步骤更加保守,防止更新时迈的步子太大。通常不需要设置这个值,但在使用logistics 回归时,若类别极度不平衡,则调整该参数可能有效果。
      subsample[default=1]:样本随机样本,该参数越大,越容易过拟合,但设置过大也会造成过拟合。
      colsample_bytree[default=1]:列采样,对每棵树生成时用的特征进行列采样,一般设置为0.5-1
      lambda[default=1]:模型的L2正则化参数,参数越大,越不容易过拟合。
      alpha[default=0]:模型的L1正则化参数,参数越大,越不容易过拟合。
      scale_pos_weight[default=1]:如果取值大于0,在类别样本偏斜时,有助于快速收敛。
1.3学习任务参数(Learning Task Parameters)
      objective[default=reg:linear]:定义最小化损失函数类型,常用参数:
      binary:logistic –二元分类的逻辑回归模型,返回预测概率(p(y=1|x,w))
      multi:softmax –使用softmax objective的多类分类模型,返回预测的分类。这里需要设置一个额外的num_class参数,表示类的个数。
      multi:softprob –与softmax相同,但是返回每个数据点属于每个类的预测概率。
      eval_metric[default according to objective]:用于衡量验证数据的参数,即是各评价标准,常用参数如下:
            rmse – root mean square error
            mae – mean absolute error
            logloss – negative log-likelihood
            error – Binary classification error rate (0.5 threshold)
            merror – Multiclass classification error rate
            mlogloss – Multiclass logloss
            auc: Area under the curve
            seed[default=0]:随机种子,用于产生可复现的结果。
      这里,xgboost与sklearn的命名风格有点区别,如:
            eta->learning_rate
            lambda->reg_lambda
            alpha->reg_alpha
2.代码实战
引入库

import numpy as np
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

加载数据,并将数据集切分成训练集和测试集

# load data
dataset =np.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
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=7)

进行拟合

# fit model with train data
model = XGBClassifier()
model.fit(X_train,y_train)

进行预测

# make predictions for test data
y_pre = model.predict(X_test)
predictions = [round(value) for value in y_pre]
# evaluate predictions
accuracy = accuracy_score(y_test,predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

输出结果:Accuracy: 77.95%

查看训练过程verbose=False不打印过程

eval_set = [(X_test,y_test)]
model = XGBClassifier()
model.fit(X_train,y_train,early_stopping_rounds=20,
		  eval_metric='logloss',eval_set=eval_set,verbose=True)
y_pre = model.predict(X_test)
predictions = [round(value) for value in y_pre]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

输出结果:

[0]	validation_0-logloss:0.660186
Will train until validation_0-logloss hasn't improved in 10 rounds.
[1]	validation_0-logloss:0.634854
[2]	validation_0-logloss:0.612239
[3]	validation_0-logloss:0.593118
[4]	validation_0-logloss:0.578303
[5]	validation_0-logloss:0.564942
……
[42]	validation_0-logloss:0.492369
Stopping. Best iteration:
[32]	validation_0-logloss:0.487297

Accuracy: 77.56%

用XGBoost衡量特征的重要程度

from xgboost import plot_importance
import matplotlib.pyplot as plt
plot_importance(model)
plt.show()

在这里插入图片描述
找到最好的学习率

from sklearn.model_selection import GridSearchCV,StratifiedKFold
model = XGBClassifier()
eta = [0.0001, 0.001, 0.01, 0.1, 0.2, 0.3]
param_grid = dict(eta=eta)
kfold = StratifiedKFold(n_splits=10,shuffle=True,random_state=7)
grid_search = GridSearchCV(model,param_grid=param_grid,
						   scoring='neg_log_loss',n_jobs=-1,cv=kfold,iid=True)
grid_result = grid_search.fit(X_train,y_train)
# summarize results
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
params = grid_result.cv_results_['params']
for mean, param in zip(means, params):
    print("%f  with: %r" % (mean, param))

KFold和StratifiedKFold的区别
StratifiedKFold 分层采样交叉切分,确保训练集,测试集中各类别样本的比例与原始数据集中相同。KFold交叉采样,按顺序取。
下面是对数据进行四等分采样的结果:
      (1)StratifiedKFold切分结果如下:
            Train: [1 3 4 5 6 7] | test: [0 2]
            Train: [0 2 4 5 6 7] | test: [1 3]
            Train: [0 1 2 3 5 7] | test: [4 6]
            Train: [0 1 2 3 4 6] | test: [5 7]
      (2)KFold切分结果如下:
            Train: [2 3 4 5 6 7] | test: [0 1]
            Train: [0 1 4 5 6 7] | test: [2 3]
            Train: [0 1 2 3 6 7] | test: [4 5]
            Train: [0 1 2 3 4 5] | test: [6 7]

参考文章:
https://www.cnblogs.com/mengnan/p/9307632.html
https://blog.csdn.net/wzmsltw/article/details/50994481

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142804.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午10:20
下一篇 2022年5月22日 下午10:20


相关推荐

  • JVM 垃圾回收机制主要原理

    JVM 垃圾回收机制主要原理对于垃圾JVM的垃圾回收机制这里我们称为GC,众所周知,java语言不需要像c++那样需要自己申请内存,自己释放内存,这些都是JVM帮我们做好了的,但是对于一名java程序员,想要更近自己的水平更上一层楼,就要去了解GC的工作原理,根据原理才能写出更好的更优的程序,这里我们先初步讲解一下GC的工作原理首先我们在讲解之前我们需要了解一下JVM内存运行时数据区的三个重要的地方堆(heap)

    2022年4月30日
    39
  • 线段树入门 敌兵布阵

    线段树入门 敌兵布阵

    2021年9月27日
    53
  • getRealPath_Get Schwifty

    getRealPath_Get Schwifty// getRealPath寻找到的不是真实文件的路径,所以打印的就不是真实文件的地址,但是能打印出来地址 StringrealPath=servletContext.getRealPath(“jjij.txt”);//jjij.txt文件不存在 response.getWriter().write(realPath);…

    2025年12月9日
    5
  • 怎么学计算机自学,怎样才能学会电脑 快速入门的学习办法

    怎么学计算机自学,怎样才能学会电脑 快速入门的学习办法现在的家庭有电脑已经不是一件很稀罕的事情了,有些人可能是因为年纪、或是因为对电脑的熟悉不高,所以对电脑的使用不太了解,一直徘徊在电脑知识的殿堂门口,为了帮助更多人可以使用上电脑,小编今天为大家带来了一些电脑的入门知识,告诉大家怎样才能学会电脑。一、怎样才能学会电脑1、在学习电脑之前,我们首先要有一个明确的目标,这样才会有方向感。知道自己需要了解什么方面的电脑知识。像是硬件维修、调试、软件编程、电脑…

    2022年6月5日
    51
  • PLC基础知识(PLC入门必看)[通俗易懂]

    PLC基础知识(PLC入门必看)[通俗易懂]1 PLC的发展历程在工业生产过程中,大量的开关量顺序控制,它按照逻辑条件进行顺序动作,并按照逻辑关系进行连锁保护动作的控制,及大量离散量的数据采集。传统上,这些功能是通过气动或电气控制系统来实现的。1968年美国GM(通用汽车)公司提出取代继电气控制装置的要求,第二年,美国数字公司研制出了基于集成电路和电子技术的控制装置,首次采用程序化的手段应用于电气控制,这就是第一代可编程序控制器,称ProgrammableController(PC)。个人计算机(简称PC)发展起来后,为了方便,也为了反映可

    2025年8月28日
    13
  • 测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人…「建议收藏」

    测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人…「建议收藏」3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人2020-03-2700:10:00135点赞716收藏90评论创作立场声明:Tony哥的矿卡日记二手矿卡坑太深,手握秘籍不求人AMD自2016年中发布Polaris系列GPU至今,长达四年的时间里,一代又一代的RX470、480、570、580等显示卡进入暗无天日的区块链矿场,挥洒着血泪和青春。在经历一次次矿难之后,貌似廉价的二手矿卡…

    2022年6月5日
    702

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号