stacking算法原理及代码

摘要:
stacking算法原理1:对于Model1,将训练集D分为k份,对于每一份,用剩余数据集训练模型,然后预测出这一份的结果2:重复上面步骤,直到每一份都预测出来。得到次级模型的训练集3:得到k份测试集,平均后得到次级模型的测试集4:对于Model2、Model3…优缺点:优点:1、采用交叉验证方法构造,稳健性强;2、可以结合多个模型判断结果,进行次级训练,效果好;缺点:1、构造复杂,难以得到相应规则,商用上难以解释。

stacking算法原理

1:对于Model1,将训练集D分为k份,对于每一份,用剩余数据集训练模型,然后预测出这一份的结果

2:重复上面步骤,直到每一份都预测出来。得到次级模型的训练集

3:得到k份测试集,平均后得到次级模型的测试集

4:对于Model2、Model3…..重复以上情况,得到M维数据

5:选定次级模型,进行训练预测,一般这最后一层用的是LR。

优缺点:

优点:

1、 采用交叉验证方法构造,稳健性强;

2、 可以结合多个模型判断结果,进行次级训练,效果好;

缺点:

1、构造复杂,难以得到相应规则,商用上难以解释。

stacking算法原理及代码第1张

代码:

import numpy as np

from sklearn.model_selection import KFold

def get_stacking(clf, x_train, y_train, x_test, n_folds=10):

"""

这个函数是stacking的核心,使用交叉验证的方法得到次级训练集

x_train, y_train, x_test 的值应该为numpy里面的数组类型 numpy.ndarray .

如果输入为pandas的DataFrame类型则会把报错"""

train_num, test_num = x_train.shape[0], x_test.shape[0]

second_level_train_set = np.zeros((train_num,))

second_level_test_set = np.zeros((test_num,))

test_nfolds_sets = np.zeros((test_num, n_folds))

kf = KFold(n_splits=n_folds)

for i,(train_index, test_index) in enumerate(kf.split(x_train)):

x_tra, y_tra = x_train[train_index], y_train[train_index]

x_tst, y_tst = x_train[test_index], y_train[test_index]

clf.fit(x_tra, y_tra)

second_level_train_set[test_index] = clf.predict(x_tst)

test_nfolds_sets[:,i] = clf.predict(x_test)

second_level_test_set[:] = test_nfolds_sets.mean(axis=1)

return second_level_train_set, second_level_test_set

#我们这里使用5个分类算法,为了体现stacking的思想,就不加参数了

from sklearn.ensemble import (RandomForestClassifier, AdaBoostClassifier,

GradientBoostingClassifier, ExtraTreesClassifier)

from sklearn.svm import SVC

rf_model = RandomForestClassifier()

adb_model = AdaBoostClassifier()

gdbc_model = GradientBoostingClassifier()

et_model = ExtraTreesClassifier()

svc_model = SVC()

#在这里我们使用train_test_split来人为的制造一些数据

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

iris = load_iris()

train_x, test_x, train_y, test_y = train_test_split(iris.data, iris.target, test_size=0.2)

train_sets = []

test_sets = []

for clf in [rf_model, adb_model, gdbc_model, et_model, svc_model]:

train_set, test_set = get_stacking(clf, train_x, train_y, test_x)

train_sets.append(train_set)

test_sets.append(test_set)

meta_train = np.concatenate([result_set.reshape(-1,1) for result_set in train_sets], axis=1)

meta_test = np.concatenate([y_test_set.reshape(-1,1) for y_test_set in test_sets], axis=1)

#使用决策树作为我们的次级分类器

from sklearn.tree import DecisionTreeClassifier

dt_model = DecisionTreeClassifier()

dt_model.fit(meta_train, train_y)

df_predict = dt_model.predict(meta_test)

print(df_predict)

免责声明:文章转载自《stacking算法原理及代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sqlalchemy 数据库操作HBase表数据分页处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ASP.NET 部署IIS后如何访问共享目录文件

1、我的电脑——》管理——》系统工具——》本地用户和组——》用户——》右键新建用户——》创建一个与远程文件夹相同的账号密码! 如下图: 以上为部署接口服务器中的用户配置 2、在IIS中创建一个独立的应用程序池,流程为:在应用程序池中右键——》添加应用程序池——》创建适用应用程序池名称(我这里是Test)——》点击高级设置——》找到标识——》修改为自...

python正则表达式匹配中文日期时间

今天分享一个Python正则表达式匹配日期与时间的方法,因为最近在做的项目需要从字符串里面把日期时间提取出来。 不多说,直接上代码: import re from datetime import datetime #python正则表达式匹配中文日期时间 test_date = '他的生日是2016-12-12 14:34,是个可爱的小宝贝.二宝的生日...

人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(ANN)

人工神经网络(ANN)介绍 生物神经元 人脑有数十亿个神经元。神经元是人脑中相互连接的神经细胞,参与处理和传递化学信号和电信号。 以下是生物神经元的重要组成部分: 树突 – 从其他神经元接收信息的分支 细胞核 – 处理从树突接收到的信息 轴突 – 一种被神经元用来传递信息的生物电缆 突触 – 轴突和其他神经元树突之间的连接 人脑神经元处理信息的过程:...

VFP--ARM浮点体系结构机介绍【转】

转自:https://www.cnblogs.com/Akagi201/archive/2012/03/31/2427063.html 浮点     ARM 浮点体系结构 (VFP) 为半精度、单精度和双精度浮点运算中的浮点操作提供硬件支持。它完全符合 IEEE 754 标准,并提供完全软件库支持。 ARM VFP 的浮点功能为汽车动力系统、车身控制应用...

linux上如何让other用户访问没有other权限的目录

目前遇到一个问题,一个other用户要访问一个目录,他需要在这个目录下创建文件,因此这个目录需要一个写权限,于是就给了这个目录777的权限,这样这个权限有点太大了,很容易出现安全问题,那我们应该怎么办呢。 我们先来看为什么一定要给这个目录777的权限呢?例如这个other用户为lbh,这个目录为/home/tmp_test/。我们在/home目录下创建tm...

深入 js 深拷贝对象

前言 对象是 JS 中基本类型之一,而且和原型链、数组等知识息息相关。不管是面试中,还是实际开发中我们都会碰见深拷贝对象的问题。 顾名思义,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来。所以无论用什么办法,必然绕不开开辟一块新的内存空间。 通常有下面两种方法实现深拷贝: 迭代递归法 序列化反序列化法 我们会基于一个测试用例对常用的实现方法进行...