sample_weight 在 gradient boosting 分类器中的使用
Use of sample_weight in gradient boosting classifier
我有以下梯度提升分类器代码用于二元分类问题。
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
#Creating training and test dataset
X_train, X_test, y_train, y_test =
train_test_split(X,y,test_size=0.30,random_state=1)
#Count of goods in the training set
#This count is 50000
y0 = len(y_train[y_train['bad_flag'] == 0])
#Count of bads in the training set
#This count is 100
y1 = len(y_train[y_train['bad_flag'] == 1])
#Creating the sample_weights array. Include all bad customers and
#twice the number of goods as bads
w0=(y1/y0)*2
w1=1
sample_weights = np.zeros(len(y_train))
sample_weights[y_train['bad_flag'] == 0] = w0
sample_weights[y_train['bad_flag'] == 1] = w1
model=GradientBoostingClassifier(
n_estimators=100,max_features=0.5,random_state=1)
model=model.fit(X_train, y_train.values.ravel(),sample_weights)
我写这段代码的思路是这样的:-
sample_weights 将允许 model.fit 到 select 训练集中的所有 100 个不良品和 200 个商品,并且将使用同一组 300 个客户来拟合100 个估计器,采用前向阶段方式。我想对我的训练集进行欠采样,因为两个响应 类 高度不平衡。请让我知道我对代码的理解是否正确?
此外,我想确认 n_estimators=100 意味着 100 个估算器将适合同一组 300 个客户。这也意味着在梯度提升分类器中没有自举,就像在装袋分类器中看到的那样。
据我了解,这不是它的工作原理。默认情况下,您有 GradientBoostingClassifier(subsample = 1.0)
,这意味着将在每个阶段(对于每个 n_estimators
)使用的样本大小将与原始数据集中的样本大小相同。权重不会改变子样本的大小。如果要对每个阶段执行 300 个观察,除了权重定义之外,还需要设置 subsample = 300/(50000+100)
。
答案是否定的。对于每个阶段,将绘制一个新的观察分数 subsample
。您可以在这里阅读更多相关信息:https://scikit-learn.org/stable/modules/ensemble.html#gradient-boosting。它说:
At each iteration the base classifier is trained on a fraction subsample of the available training data.
因此,有一些自举与增强算法相结合。
我有以下梯度提升分类器代码用于二元分类问题。
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
#Creating training and test dataset
X_train, X_test, y_train, y_test =
train_test_split(X,y,test_size=0.30,random_state=1)
#Count of goods in the training set
#This count is 50000
y0 = len(y_train[y_train['bad_flag'] == 0])
#Count of bads in the training set
#This count is 100
y1 = len(y_train[y_train['bad_flag'] == 1])
#Creating the sample_weights array. Include all bad customers and
#twice the number of goods as bads
w0=(y1/y0)*2
w1=1
sample_weights = np.zeros(len(y_train))
sample_weights[y_train['bad_flag'] == 0] = w0
sample_weights[y_train['bad_flag'] == 1] = w1
model=GradientBoostingClassifier(
n_estimators=100,max_features=0.5,random_state=1)
model=model.fit(X_train, y_train.values.ravel(),sample_weights)
我写这段代码的思路是这样的:-
sample_weights 将允许 model.fit 到 select 训练集中的所有 100 个不良品和 200 个商品,并且将使用同一组 300 个客户来拟合100 个估计器,采用前向阶段方式。我想对我的训练集进行欠采样,因为两个响应 类 高度不平衡。请让我知道我对代码的理解是否正确?
此外,我想确认 n_estimators=100 意味着 100 个估算器将适合同一组 300 个客户。这也意味着在梯度提升分类器中没有自举,就像在装袋分类器中看到的那样。
据我了解,这不是它的工作原理。默认情况下,您有
GradientBoostingClassifier(subsample = 1.0)
,这意味着将在每个阶段(对于每个n_estimators
)使用的样本大小将与原始数据集中的样本大小相同。权重不会改变子样本的大小。如果要对每个阶段执行 300 个观察,除了权重定义之外,还需要设置subsample = 300/(50000+100)
。答案是否定的。对于每个阶段,将绘制一个新的观察分数
subsample
。您可以在这里阅读更多相关信息:https://scikit-learn.org/stable/modules/ensemble.html#gradient-boosting。它说:At each iteration the base classifier is trained on a fraction subsample of the available training data.
因此,有一些自举与增强算法相结合。