目录
树模型
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)) #28220import 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 MulticlassClassificationEvaluatorspark=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博客