机器学习算法系列(5)模型融合

本文深入探讨了机器学习中的模型融合技术,包括Voting、Blending和Stacking。强调了模型融合需要个体学习器有高准确率和多样性。同时,对比分析了Blending的优缺点,指出其在防止信息泄露和简化流程方面的优势,以及可能存在的数据使用不足和过拟合问题。
摘要由CSDN通过智能技术生成

一、算法原理

模型融合:Voting(投票法)、Blending(线性混合)、Stacking(堆叠)。

模型融合,不是说随意的融合能够达到好的效果。进行融合时,所需集成个体应该好而不同。好指的是个体学习器的性能要好,不同指的是个体模型的类别不同。

(1)Voting

这里举个西瓜书的例子,在介绍例子之前,首先提前介绍简单投票法,以分类问题为例,就是每个分类器对样例进行投票,哪个类别得到的票数最多的就是融合后模型的结果。
在这里插入图片描述
在上面的例子中,采用的就是简单的投票法。图b各个模型输出都一样,因此没有什么效果。图c每个分类器的精度只有33%,融合后反而更糟。也就是说,想要模型融合有效果,个体学习器要有一定的准确率,并且要有多样性,学习器之间具有差异,即好而不同

(2)Stacking
在这里插入图片描述
(3)Blending

第一步:把trian先分成两部分,比如70%的数据作为newtrain,剩下30%的数据作为validation。
第二步:第一层,使用newtrain训练多个模型,然后去预测validation的label。
第三步:第二层,使用validation在第一层训模型上的预测结果做为新特征继续训练第二层的模型。
第四步:使用test,带入第一层模型训练预测得到预测值,把预测值当做新的特征带入第二层模型进行训练,得到最终结果。

二、算法案例

#导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings("ignore")#忽略警告

%matplotlib inline

#每次运行代码时设置相同的seed
SEED = 222
np.random.seed(SEED)
df = pd.read_csv('input.csv')
df.head()

在这里插入图片描述
1.数据预处理

y = 1*(df.cand_pty_affiliation == 'REP')
X = df.drop(['cand_pty_affiliation'],axis = 1)
X = pd.get_dummies(X,sparse = True)
X.drop(X.columns[X.std() == 0],axis = 1,inplace = True)
#标签分布
df.cand_pty_affiliation.value_counts(normalize = True).plot(kind = 'bar',title = 'Share of No.donations')
plt.show()

在这里插入图片描述
2.构建模型

#数据集切分,test_size = 0.95为了加快模型速度
from sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(X,y,test_size = 0.95,random_state = SEED)

(1)模型融合

#导入库
from sklearn.svm import SVC,LinearSVC
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier,GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.kernel_approximation import Nystroem
from sklearn.kernel_approximation import RBFSampler
from sklearn.pipeline import make_pipeline
from sklearn.metrics import roc_auc_score
#写好模型训练、预测、评分的函数
def get_models():
    nb = GaussianNB()
    svc = SVC(C = 100,probability = True)
    knn = KNeighborsClassifier(n_neighbors = 3)
    lr = LogisticRegression(C = 100,random_state = SEED)
    nn = MLPClassifier((80,10),early_stopping = False
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值