GBDT,XGBoost算法理解

目录

树模型

bagging

Boosting 

信息增益ID3算法

C4.5

CART分类回归树

 GBDT

Xgboost

pyspark实现GBDT


树模型

bagging

GBDT,XGBoost算法理解_第1张图片 

Boosting 

GBDT,XGBoost算法理解_第2张图片

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

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

信息增益ID3算法

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

GBDT,XGBoost算法理解_第3张图片

GBDT,XGBoost算法理解_第4张图片

C4.5

GBDT,XGBoost算法理解_第5张图片

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

GBDT,XGBoost算法理解_第6张图片

CART分类回归树

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

GBDT,XGBoost算法理解_第7张图片

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

GBDT,XGBoost算法理解_第8张图片

 GBDT

GBDT,XGBoost算法理解_第9张图片

Xgboost

GBDT,XGBoost算法理解_第10张图片

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) 

你可能感兴趣的:(推荐算法,算法,机器学习,深度学习,人工智能)