Python 样本权在梯度增强分类器中的应用
我有以下用于二元分类问题的梯度增强分类器的代码Python 样本权在梯度增强分类器中的应用,python,scikit-learn,ensemble-learning,Python,Scikit Learn,Ensemble Learning,我有以下用于二元分类问题的梯度增强分类器的代码 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 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)
我对编写此代码的想法如下:-
GradientBoostingClassifier(子样本=1.0)
,这意味着在每个阶段(对于每个n_估计量
)使用的样本大小将与原始数据集中的样本大小相同。权重不会改变子样本的大小。如果要对每个阶段强制执行300次观察,除了权重定义外,还需要设置subsample=300/(50000+100)
子样本
。您可以在此处阅读更多信息:。它说:
在每次迭代中,根据可用训练数据的分数子样本对基础分类器进行训练
因此,有一些bootstraping与boosting算法相结合谢谢马克西姆。另一个快速的问题是,这在Adaboost分类器中如何工作?此Classifier没有子样本参数,但在fit中支持样本重量。很高兴它回答了您的问题!AdaBoost是另一种分类算法,它不涉及每个估计器的任何采样。简言之,AdaBoost为每个观测值分配权重,并在每个步骤更新权重,以便为错误分类的点分配更多权重。为AdaBoost使用sample_weight只会更改这些weights hanks Maxime的初始化。如果我现在理解正确的话,样本权重在不同的ensembling分类器中的作用是不同的。在bagging分类器和随机森林中,这可以用来控制每个估计器中每个类的观测数量。在adaboost和gradient boosting分类器中,这可用于为错误分类的点分配权重。梯度推进分类器还具有子样本参数,该参数可与样本权重结合使用,以控制用于每个估计器的观测数。