GBDT,XGBoost,CatBoost算法理解

本文探讨了树模型(如决策树、bagging、Boosting,包括Adaboost、CART、GBDT、Xgboost和Catboost)在IT技术中的应用,重点介绍了如何使用pyspark实现GBDT模型,包括训练、评估和预测,以及决策树剪枝和类别型特征处理。
摘要由CSDN通过智能技术生成

目录

树模型

bagging

Boosting 

信息增益ID3算法

C4.5

CART分类回归树

 GBDT

Xgboost

Catboost 

pyspark实现GBDT

树模型

bagging

 

Boosting 

大多数的Boosting方法都是通过改变训练数据集的概率分布(训练数据不同样本的权值),针对不同概率分布的数据调用弱分类算法学习一系列的弱分类器。 

 Adaboost模型的决策边界比单层决策树的决策边界要复杂的多。也就是说,Adaboost试图用增加模型复杂度而降低偏差的方式去减少总误差,但是过程中引入了方差,可能出现国拟合,因此在训练集和测试集之间的性能存在较大的差距,这就简单地回答的刚刚问题。值的注意的是:与单个分类器相比,Adaboost等Boosting模型增加了计算的复杂度,在实践中需要仔细思考是否愿意为预测性能的相对改善而增加计算成本,而且Boosting方式无法做到现在流行的并行计算的方式进行训练,因为每一步迭代都要基于上一部的基本分类器。

信息增益ID3算法

ID3 使用的分类标准是信息增益,它表示得知特征 A 的信息而使得样本集合不确定性减少的程度。

C4.5

为什么要剪枝:过拟合的树在泛化能力的表现非常差。

CART分类回归树

ID3 和 C4.5 虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但是其生成的决策树分支、规模都比较大,CART 算法的二分法可以简化决策树的规模,提高生成决策树的效率。

CART 的一大优势在于:无论训练数据集有多失衡,它都可以将其子冻消除不需要建模人员采取其他操作。 

 GBDT

Xgboost

Catboost 

CatBoost是一种基于对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,这一点从它的名字中可以看出来,CatBoost是由Categorical和Boosting组成。此外,CatBoost还解决了梯度偏差(Gradient Bias)以及预测偏移(Prediction shift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。

XGBoost 本身无法处理类别型特征,而是像随机森林一样,只接受数值数据。因此在将类别型特征数据传入 XGBoost 之前,必须通过各种编码方式:例如序号编码、独热编码和二进制编码等对数据进行处理 

pyspark实现GBDT

#树模型
assembler = VectorAssembler(inputCols=input_cols, outputCol='features', handleInvalid="skip")
feature_data_model = assembler.transform(-----------数据)
trainData, testData= feature_data_model.randomSplit([0.7, 0.3], seed=7)   
train_num = trainData.count()
print("训练样本数:{}".format(train_num))  #28220

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.ml.feature import VectorAssembler  # 特征处理
from pyspark.ml.classification import RandomForestClassifier
from pyspark.ml.classification import RandomForestClassificationModel
from pyspark.ml.classification import GBTClassifier
from pyspark.ml.classification import GBTClassificationModel
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.evaluation import MulticlassClassificationEvaluator

spark=SparkSession.builder.appName('random_forest').getOrCreate()
gbdt_classifier_read=GBTClassifier(labelCol="is_read").fit(trainData)
gbdt_predictions_read=gbdt_classifier_read.transform(testData)

# 多分类模型——准确率
gbdt_accuracy=MulticlassClassificationEvaluator(labelCol='is_read',metricName='accuracy').evaluate(gbdt_predictions_pay)
print('The accuracy of gbdt on test data is {0:.0%}'.format(gbdt_accuracy))
# 多分类模型——精确率
gbdt_precision=MulticlassClassificationEvaluator(labelCol='is_read',metricName='weightedPrecision').evaluate(gbdt_predictions_read)
print('The precision rate on test data is {0:.0%}'.format(gbdt_precision))
# AUC
gbdt_auc=BinaryClassificationEvaluator(labelCol='is_read').evaluate(gbdt_predictions_read)
print('The AUC value on test data is {0:.0%}'.format(gbdt_auc))
 

# 模型保存
gbdt_classifier_read.save("user_code/strategy/quality_scoring/spark_gbdt_model_read")
# 模型调用
gbdt_read=GBTClassificationModel.load("user_code/strategy/quality_scoring/spark_gbdt_model_read")
 

#预测
assembler = VectorAssembler(inputCols=input_cols, outputCol='features', handleInvalid="skip")
predict_data = assembler.transform(predict_data)
predict_data = gbdt_read.transform(predict_data)
pre_element = udf(lambda v:float(v[1]),FloatType())
predict_data = predict_data.withColumn("pro_read",pre_element("probability")) 

参考资料:

datawhalechina/ensemble-learning (github.com)

【机器学习】决策树(上)——ID3、C4.5、CART(非常详细) - 知乎 (zhihu.com)

pyspark调用sklearn训练好的模型并预测以及spark.ml训练预测_pyspark sklearn_hejp_123的博客-CSDN博客

pyspark与机器学习 - 简书 (jianshu.com)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值