小言_互联网的博客

数据挖掘算法和实践(二十三):XGBoost集成算法案列(鸢尾花数据集)

431人阅读  评论(0)

本节继续探讨集成学习算法,上一节介绍的是LGB的使用和调参,这里使用datasets自带的鸢尾花数据集介绍XGB,关于集成学习算法的介绍可以参考:数据挖掘算法和实践(十八):集成学习算法(Boosting、Bagging),XGB和LGB都是竞赛和真实场景用得很多的算法,这里详细分析XGB调参和特征选择;

一、引包与加载数据 


  
  1. import time
  2. import numpy as np
  3. import xgboost as xgb
  4. from xgboost import plot_importance,plot_tree
  5. from sklearn.datasets import load_iris
  6. from sklearn.model_selection import train_test_split
  7. from sklearn.metrics import accuracy_score
  8. from sklearn.datasets import load_boston
  9. import matplotlib
  10. import matplotlib.pyplot as plt
  11. import os
  12. %matplotlib inline
  13. # 加载样本数据集
  14. iris = load_iris()
  15. X,y = iris.data,iris.target
  16. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2, random_state= 1234565) # 数据集分割

二、建模和参数


  
  1. # 训练算法参数设置
  2. params = {
  3. # 通用参数
  4. 'booster': 'gbtree', # 使用的弱学习器,有两种选择gbtree(默认)和gblinear,gbtree是基于
  5. # 树模型的提升计算,gblinear是基于线性模型的提升计算
  6. 'nthread': 4, # XGBoost运行时的线程数,缺省时是当前系统获得的最大线程数
  7. 'silent': 0, # 0:表示打印运行时信息,1:表示以缄默方式运行,默认为0
  8. 'num_feature': 4, # boosting过程中使用的特征维数
  9. 'seed': 1000, # 随机数种子
  10. # 任务参数
  11. 'objective': 'multi:softmax', # 多分类的softmax,objective用来定义学习任务及相应的损失函数
  12. 'num_class': 3, # 类别总数
  13. # 提升参数
  14. 'gamma': 0.1, # 叶子节点进行划分时需要损失函数减少的最小值
  15. 'max_depth': 6, # 树的最大深度,缺省值为6,可设置其他值
  16. 'lambda': 2, # 正则化权重
  17. 'subsample': 0.7, # 训练模型的样本占总样本的比例,用于防止过拟合
  18. 'colsample_bytree': 0.7, # 建立树时对特征进行采样的比例
  19. 'min_child_weight': 3, # 叶子节点继续划分的最小的样本权重和
  20. 'eta': 0.1, # 加法模型中使用的收缩步长
  21. }
  22. plst = params.items()
  23. # 数据集格式转换
  24. dtrain = xgb.DMatrix(X_train, y_train)
  25. dtest = xgb.DMatrix(X_test)
  26. # 迭代次数,对于分类问题,每个类别的迭代次数,所以总的基学习器的个数 = 迭代次数*类别个数
  27. num_rounds = 50
  28. model = xgb.train(plst, dtrain, num_rounds) # xgboost模型训练
  29. # 对测试集进行预测
  30. y_pred = model.predict(dtest)
  31. # 计算准确率
  32. accuracy = accuracy_score(y_test,y_pred)
  33. print( "accuarcy: %.2f%%" % (accuracy* 100.0))
  34. # 显示重要特征
  35. plot_importance(model)
  36. plt.show()

三、模型评估


  
  1. # 可视化树的生成情况,num_trees是树的索引
  2. plot_tree(model, num_trees= 5)
  3. # 将基学习器输出到txt文件中
  4. model.dump_model( "model1.txt")

XGB的回归问题


  
  1. # 加载数据集
  2. boston = load_boston()
  3. # 获取特征值和目标指
  4. X,y = boston.data,boston.target
  5. # 获取特征名称
  6. feature_name = boston.feature_names
  7. # 划分数据集
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
  9. # 参数设置
  10. params = {
  11. 'booster': 'gbtree',
  12. 'objective': 'reg:gamma', # 回归的损失函数,gmma回归
  13. 'gamma': 0.1,
  14. 'max_depth': 5,
  15. 'lambda': 3,
  16. 'subsample': 0.7,
  17. 'colsample_bytree': 0.7,
  18. 'min_child_weight': 3,
  19. 'silent': 1,
  20. 'eta': 0.1,
  21. 'seed': 1000,
  22. 'nthread': 4,
  23. }
  24. plst = params.items()
  25. # 数据集格式转换
  26. dtrain = xgb.DMatrix(X_train, y_train,feature_names = feature_name)
  27. dtest = xgb.DMatrix(X_test,feature_names = feature_name)
  28. # 模型训练
  29. num_rounds = 30
  30. model = xgb.train(plst, dtrain, num_rounds)
  31. # 模型预测
  32. y_pred = model.predict(dtest)
  33. # 显示重要特征
  34. plot_importance(model,importance_type ="weight")
  35. plt.show()
  36. # 可视化树的生成情况,num_trees是树的索引
  37. plot_tree(model, num_trees=17)
  38. # 将基学习器输出到txt文件中
  39. model.dump_model("model2.txt")


转载:https://blog.csdn.net/yezonggang/article/details/113058540
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场