伪残差如何在梯度增强机(GBM)中起作用?

时间:2016-11-01 16:22:03

标签: statistics scikit-learn gbm

因此,在GBM中,每个树都会预测“伪残差”'先前的树 [1]

我不确定这些'伪残差'工作,但我想知道当你有一个组合时,这是如何发挥作用:

  1. 二进制分类问题
  2. 响应率低
  3. 相当低的信噪比
  4. 在下面的例子中,我们全部都是3.我将残差计算为Actual - Probability,并且由于响应是二进制的,所以最终得到的这种高度双模态分布与响应几乎相同。

    降低响应率进一步加剧了双模态分布,因为概率接近零,因此,分布更接近于0或1.

    所以我在这里有几个问题

    1. 在此示例中,如何计算伪残差? (我很确定这是错的,除了初始树模型与全局均值的区别)
    2. 第二棵树与第一棵树几乎完全相同吗?
    3. 对于响应率较低的问题,GBM中的连续树是否更相似?
    4. 对无响应的下采样是否会因此而改变模型?
    5. import numpy as np
      import matplotlib.pyplot as plt
      from sklearn.tree import DecisionTreeClassifier
      from sklearn.datasets import make_classification
      from sklearn.metrics import roc_auc_score
      
      train_percent = 0.8
      num_rows = 10000
      remove_rate = 0.1
      
      # Generate data
      X, y = make_classification(n_samples=num_rows, flip_y=0.55)
      
      # Remove response rows to make sample unbalanced
      remove = (np.random.random(len(y)) > remove_rate) & (y == 1)
      X, y = X[~remove], y[~remove]
      print("Response Rate: " + str(sum(y) / float(len(y))))
      
      # Get train/test samples (data is pre-shuffled)
      train_rows = int(train_percent * len(X))
      X_train , y_train = X[:train_rows], y[:train_rows]
      X_test , y_test = X[train_rows:], y[train_rows:]
      
      # Fit a simple decision tree
      clf = DecisionTreeClassifier(max_depth=4)
      clf.fit(X_train, y_train)
      pred = clf.predict_proba(X_test)[:,1]
      
      # Calculate roc auc
      roc_auc = roc_auc_score(y_test, pred)
      print("ROC AUC: " + str(roc_auc))
      
      # Plot residuals
      plt.style.use('ggplot')
      plt.hist(y_test - pred);
      plt.title('Residuals')
      

      enter image description here

0 个答案:

没有答案