天池龙珠训练营-机器学习学习笔记-02 XGBoost 分类

天池龙珠训练营-机器学习学习笔记-02 XGBoost 分类
本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:
训练营网址

一 原理简介:

XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。
XGBoost的核心算法思想不难,基本就是:

  1. 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。
  2. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数
  3. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。

二 代码流程

Part1 基于天气数据集的XGBoost----分类实践
Step1: 库函数导入
Step2: 数据读取/载入
Step3: 数据信息简单查看
Step4: 可视化描述
Step5: 对离散变量进行编码
Step6: 利用 XGBoost 进行训练与预测
Step7: 利用 XGBoost 进行特征选择
Step8: 通过调整参数获得更好的效果

标题三 实战:(天气数据集预测)

基础的函数库包括:
numpy (Python进行科学计算的基础软件包),
pandas(pandas是一种快速,强大,灵活且易于使用的开源数据分析和处理工具),
matplotlib和seaborn绘图。

  1.  !wget https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/7XGBoost/train.csv` ##---导入---需要用到的数据集
    
  2. data = pd.read_csv('train.csv')    #读取并转化为DataFrame格式
    
  3. data.info()    #data.head()  #查看数据的整体信息
    
  4. data = data.fillna(-1)      #数据处理  缺位填补   
    
  5. pd.Series(data['RainTomorrow']).value_counts() ## 利用value_counts函数查看训练集-------标签的数量
    

1 对数据进行处理:
1 缺值补充:数据集中存在NaN,一般的我们认为NaN在数据集中代表了缺失值,可能是数据采集或处理时产生的一种错误。这里我们采用-1将缺失值进行填补,还有其他例如“中位数填补、平均数填补”的缺失值处理方法
2 对离散变量进行编码:由于XGBoost 无法处理字符串类型的数据,我们需要一些方法将字符串数据转化为数据。一种最简单的方法是把所有的相同类别的特征编码成同一个值,例如女=0,男=1,狗狗=2,所以最后编码的特征值是在 [0,特征数量−1] 之间的整数。除此之外,还有独热编码、求和编码、留一法编码等等方法可以获得更好的效果。

2 特征可视化:
1 sns.pairplot: 用来展现变量两两之间的关系,线性、非线性、相关等。
在这里插入图片描述
2.sns.boxplot:箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。
在这里插入图片描述
3 利用 XGBoost 进行训练与预测
为了正确评估模型性能,将数据划分为训练集和测试集,-----并在训练集上训练模型,在测试集上验证模型性能。

  1. from sklearn.model_selection import train_test_split   # 函数导入
    
  2. data_target_part = data['RainTomorrow']   #特征
    
  3. data_features_part = data[[x for x in data.columns if x != 'RainTomorrow']]   #标签
    
  4. x_train, x_test, y_train, y_test = train_test_split(data_features_part, data_target_part, test_size = 0.2, random_state = 2020)#测试集大小占20%。
    
  5. from xgboost.sklearn import XGBClassifier# 导入-----XGBoost模型
    
  6. clf = XGBClassifier()## 定义 -----XGBoost模型 	
    
  7. clf.fit(x_train, y_train)# 在训练集上训练XGBoost模型
    

    在训练集和测试集上分布利用训练好的模型进行预测

  8. train_predict = clf.predict(x_train)
    
  9.  test_predict = clf.predict(x_test)	
    
  10. from sklearn import metrics   #混淆矩阵 
    

4 模型效果评估
利用----accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果

  1.    print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
    
  2.    print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
    

查看------混淆矩阵 (预测值和真实值的各类情况统计矩阵)

  1. confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
    
  2. print('The confusion matrix result:\n',confusion_matrix_result)
    

利用-------热力图对于结果进行可视化

  1. plt.figure(figsize=(8, 6))
    
  2. sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
    
  3. plt.xlabel('Predicted labels')	
    
  4. plt.ylabel('True labels')
    
  5. plt.show()
    

5 利用 XGBoost 进行特征选择

XGBoost的特征选择属于特征选择中的嵌入式方法,在XGboost中可以用属性feature_importances_去查看特征的重要度。
#画特征重要图.y为特征名称,x为重要值 #画条形图

  1.  sns.barplot(y=data_features_part.columns, x=clf.feature_importances_)   
    

在这里插入图片描述
6 通过调整参数获得更好的效果

XGBoost中包括但不限于下列对模型影响较大的参数:

  1. learning_rate: 有时也叫作eta,系统默认值为0.3。每一步迭代的步长,很重要。太大了运行准确率不高,太小了运行速度慢。
  2. subsample:系统默认为1。这个参数控制对于每棵树,随机采样的比例。减小这个参数的值,算法会更加保守,避免过拟合, 取值范围零到一。
  3. colsample_bytree:系统默认值为1。我们一般设置成0.8左右。用来控制每棵随机采样的列数的占比(每一列是一个特征)。
  4. max_depth: 系统默认值为6,我们常用3-10之间的数字。这个值为树的最大深度。这个值是用来控制过拟合的。max_depth越大,模型学习的更加具体。
  5. 调节模型参数的方法有贪心算法、网格调参、贝叶斯调参等。这里我们采用网格调参,它的基本思想是穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。

7 从sklearn库中导入----网格调参函数

  1. from sklearn.model_selection import GridSearchCV
    

定义—参数取值范围

  1.  learning_rate = [0.1, 0.3, 0.6]
    
  2.  subsample = [0.8, 0.9]
    
  3.  colsample_bytree = [0.6, 0.8]
    
  4.  max_depth = [3,5,8]
    
  5.  parameters = { 'learning_rate': learning_rate,
           'subsample': subsample,
           'colsample_bytree':colsample_bytree,
           'max_depth': max_depth}
    
  6.  model = XGBClassifier(n_estimators = 50)
    

进行----网格搜索

  1.  clf = GridSearchCV(model, parameters, cv=3, scoring='accuracy',verbose=1,n_jobs=-1)
    
  2.  clf = clf.fit(x_train, y_train)   #训练
    
  3.  clf.best_params_	# # 网格搜索后的----最好参数
    

得到优化的参数后重新进行训练、预测、准确度计算。

通俗理解kaggle比赛大杀器xgboost
天池训练营

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值