美文网首页
大师兄的数据分析学习笔记(二十四):回归树与提升树

大师兄的数据分析学习笔记(二十四):回归树与提升树

作者: superkmi | 来源:发表于2022-09-01 16:38 被阅读0次

    大师兄的数据分析学习笔记(二十三):人工神经网络
    大师兄的数据分析学习笔记(二十五):聚类(一)

    一、回归树

    • 回归树决策树的一种算法,但回归的值是连续值
    • 分类树不同回归树的每个节点(包括叶子节点中间节点),都会得到预测值。
    • 一般这个预测值就是这些连续标注的平均值。
    • 对特征进行分类,切分属性的依据不再是基尼系数,而是最小方差
    • 也就是说在根据某一个属性切分后,必须要满足两部分的方差的和是最小的。
    • 之后就可以套用其它特征进行同样的过程,直到满足回归树的停止条件。
    • 停止条件可以是剪枝的限制、叶子最大样本数量等等。
    • 如果要进行预测,顺着回归树的特征到叶子节点,取叶子节点的平均值作为预测值。

    二、提升树

    • 提升树的构建基于回归树提升树中以梯度提升决策树(GBDT)的预测效果最好。
    • 梯度提升决策树是一种集成方法:
    • 其中第一棵树是一个弱集成器,拟合效果误差较大。
    • 下一个棵树的标签,是上一棵预测后,与原标签的差分值。
    • 重复第二步直到结束。
    • 详细算法如下:
    Setting Loss Function {\partial}L(y_i,f(x_i))/{\partial}f()x_i)
    Regression \frac{1}{2}[y_i-f(x_i)]^2 y_i-f(x_i)
    Regression y_i-f(x_i) sign[y_i-f(x_i)]
    Regression Huber y_i-f(x_i) for |y_i-f(x_i)|\leq\delta_m
    \delta_msign[y_i-f(x_i)] for |y_i-f(x_i)|>\delta_m
    where \delta_m==\alpha{th}-quantile\{|y_i-f(x_i)|\}
    Classification Deviance kth component:I(y_i==G_k)-p_k(x_i)

    其中:

    • y_i是实际值。
    • f(x)_i代表预设值,希望预设值更小,所以与y_i相减。

    三、代码实现

    >>>import os
    >>>import pandas as pd
    >>>import numpy as np
    >>>from sklearn.model_selection import train_test_split
    >>>from sklearn.metrics import  accuracy_score,recall_score,f1_score
    >>>from sklearn.ensemble import GradientBoostingClassifier
    
    >>>models = []
    >>>models.append(("GBDT",GradientBoostingClassifier(max_depth=6,n_estimators=100)))
    
    >>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
    >>>X_tt,X_validation,Y_tt,Y_validation = train_test_split(df.JobLevel,df.JobSatisfaction,test_size=0.2)
    >>>X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size=0.25)
    
    >>>for clf_name,clf in models:
    >>>    clf.fit(np.array(X_train).reshape(-1,1),np.array(Y_train).reshape(-1,1))
    >>>    xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
    >>>    for i in range(len(xy_lst)):
    >>>        X_part = xy_lst[i][0]
    >>>        Y_part = xy_lst[i][1]
    >>>        Y_pred = clf.predict(np.array(X_part).reshape(-1,1))
    >>>        print(i)
    >>>        print(clf_name,"-ACC",accuracy_score(Y_part,Y_pred))
    >>>        print(clf_name,"-REC",recall_score(Y_part,Y_pred,average='macro'))
    >>>        print(clf_name,"-F1",f1_score(Y_part,Y_pred,average='macro'))
    >>>        print("="*40)
    0
    GBDT -ACC 0.31746031746031744
    GBDT -REC 0.25609813587629976
    GBDT -F1 0.1933613852394503
    ========================================
    1
    GBDT -ACC 0.29931972789115646
    GBDT -REC 0.22676837725381413
    GBDT -F1 0.173353927942814
    ========================================
    2
    GBDT -ACC 0.2925170068027211
    GBDT -REC 0.2583216292134831
    

    相关文章

      网友评论

          本文标题:大师兄的数据分析学习笔记(二十四):回归树与提升树

          本文链接:https://www.haomeiwen.com/subject/hfqxnrtx.html