集成与堆叠

本文深入探讨了集成学习的基础与高级技术,包括最大投票法、平均法、加权平均法等基础集成方法,以及堆叠(stacking)和混合(blending)等高级集成策略。通过实例说明了如何利用多种模型的预测结果来提高整体预测性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、集成学习介绍

基础集成技术:最大投票法(max voting)、平均法(averaging)、加权平均法(weighted average)

高级集成技术:堆叠(stacking)、混合(Blending)

1.例子买车:

1.问别人哪种车好

2.上网查询其价格

3.4S店去问

4.综合各种信息买到自己想要的车

 

最大投票方法通常用于分类问题。这种技术中使用多个模型来预测每个数据点。每个模型预测都被视为一次“投票”。大多数模型得到的预测被用作最终预测结果。

model1 = tree.DecisionTreeClassifier()
model2 = KneighborsClassifier()
model3 = LogisticRegression()
model1.fit(x_train,y_train)
model2.fit(x_train,y_train)
model3.fit(x_train,y_train)
pred1 = model1.predict(x_test)
pred2 = model2.predict(x_test)
pred2 = model3.predict(x_test)

final_pred = np.array([])
for i in range(0,len(x_test)):
    final_pred = np.append(final_pred,model([pred1[i],pred2[i],pred3[i]))

平均法类似于最大投票技术,这里对每个数据点的多次预测进行平均。在这种方法中,我们从所有模型中取平均值作为最终预测。平均法可用于在回归问题中进行预测或在计算分类问题的概率时使用。

finalpred = (pred1+pred2+pred3)/3

加权平均法是平均法的扩展。为了所有模型分配不同的权重,定义每个模型的预测重要性。

finalpred = pred1*0.3+pred2*0.3+pred3*0.4

二 、 高级集成技术

1.模型的堆叠(stacking)

2.模型的融合(blending)

 

堆叠是一种集成学习技术,它使用多个模型(例如决策树、knn或svm)的预测来构建新模型。该模型用于对测试集进行预测。

以下是简单堆叠集成法的逐步解释:

第一步:把训练集分成10份:

第二步:基础模型(假设是决策树)在其中9分上进行拟合,并对第10份进行预测。

第三步:对训练集上的每一份如此做一遍。

第四步:然后将基础模型(此处是决策树)拟合到整个训练集上。

第五步:使用此模型,在测试集上进行预测。

第六步:对另一个基础模型(比如knn)重复上述的2-4步,产生对训练集合测试集的另一组预测。

第七步:训练集的预测被用作构建新模型的特征

第八步:该新模型用于对测试预测集(test prediction,上图的右下角)进行最终的预测。

示例代码

我们首先定义一个函数来对n折的训练集合测试集进行预测。此函数返回每个模型对训练集和测试集的预测。

def stacking(model,train,y,test,n_fold):
    folds = StratifiedKFold(n_splits=n_fold,random_state=1)
    test_pred = np.empty((test.shape[0],1),float)
    train_pred = np.empty((0,1),float)
    for train_indices,val_indices in folds.split(train,y.values):
        x_train,x_val = train.iloc[train_indices],train.iloc[val_indices]
        y_train,y_val = y.iloc[train_indices],y.iloc[val_indices]

        model.fit(X=x_train,y=y_train)
        train_pred=np.append(train_pred,model.predict(x_val))#取train的1/n来得到下一层的输入
        test_pred=np.append(test_pred,model.predict(test))#得到的是这个测试集的新特征
    return test_pred.reshape(-1,1),train_pred

现在我们将创建两个基本模型:决策树和knn。

model1 = tree.DecisionTreeClassifier(random_state=1)

test_pred1,train_pred1 = Stacking(model=model1,n_fold=10,train=x_train,test=x_test,y=y_train)

train_pred1 = pd.DataFrame(train_pred1)
test_pred1 = pd.DataFrame(test_pred1)

model2 = KNeighborsClassifier()

test_pred2,train_pred2 = Stacking(model=model2,n_fold=10,train=x_train,test=x_test,y=y_train)

train_pred2 = pd.DataFrame(train_pred2)
test_pred2 = pd.DataFrame(test_pred2)

创建第三个模型,逻辑回归,在决策树和knn模型的预测之上。

df = pd.concat([train_pred1,train_pred2]),axis=1)
df_test = pd.concat([test_pred1,test_pred2],axis=1)

model = LogisticRegression(random_state=1)
model.fit(df,y_train)
model.score(df_test,y_test)

为了简化上面的解释,我们创建的堆叠模型只有两层。决策树和knn模型建立在零级,而逻辑回归模型建立在第一级。其实可以随意的在堆叠模型中创建多个层次。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值