python stacking_详解 Stacking 的 python 实现[通俗易懂]

1.什么是stackingstacking就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。2.代码:例如我们用RandomForestClassifier,ExtraTreesClassifier,GradientBoostingClassifier作为第一层学习器:#Ourlevel0classifiersclfs…

大家好,又见面了,我是你们的朋友全栈君。

1. 什么是 stacking

stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。

5905f19c4df6

2. 代码:

例如我们用 RandomForestClassifier, ExtraTreesClassifier, GradientBoostingClassifier 作为第一层学习器:

# Our level 0 classifiers

clfs = [

RandomForestClassifier(n_estimators = n_trees, criterion = ‘gini’),

ExtraTreesClassifier(n_estimators = n_trees * 2, criterion = ‘gini’),

GradientBoostingClassifier(n_estimators = n_trees),

]

接着要训练第一层学习器,并得到第二层学习器所需要的数据,这里会用到 k 折交叉验证。

1. 先用初始训练集训练 clf,并得到第二层的训练数据 blend_train:

第 j 个学习器,共经过 nfolds 次交叉验证,每一次会得到当前验证集角标上的预测值,nfolds 之后得到和初始训练集一样大小的集合:

blend_train[cv_index, j] = clf.predict(X_cv)

5905f19c4df6

2. 再用 clf 对 test 集进行预测,来得到第二层的测试数据 blend_test:

即每个第一层学习器在每次 fold 时,用学习器对初识测试集进行预测,n 次之后,对所有结果取平均值,得到第 j 个学习器在测试集上的预测结果:

blend_test_j[:, i] = clf.predict(X_test)

blend_test[:, j] = blend_test_j.mean(1)

5905f19c4df6

这样第一层的每个学习器,都会得到一列训练数据和一列测试数据为第二层的学习器所用。

# For each classifier, we train the number of fold times (=len(skf))

for j, clf in enumerate(clfs):

print ‘Training classifier [%s]’ % (j)

blend_test_j = np.zeros((X_test.shape[0], len(skf))) # Number of testing data x Number of folds , we will take the mean of the predictions later

for i, (train_index, cv_index) in enumerate(skf):

print ‘Fold [%s]’ % (i)

# This is the training and validation set

X_train = X_dev[train_index]

Y_train = Y_dev[train_index]

X_cv = X_dev[cv_index]

Y_cv = Y_dev[cv_index]

clf.fit(X_train, Y_train)

# This output will be the basis for our blended classifier to train against,

# which is also the output of our classifiers

blend_train[cv_index, j] = clf.predict(X_cv)

blend_test_j[:, i] = clf.predict(X_test)

# Take the mean of the predictions of the cross validation set

blend_test[:, j] = blend_test_j.mean(1)

3. 接着用 blend_train, Y_dev 去训练第二层的学习器 LogisticRegression:

# Start blending!

bclf = LogisticRegression()

bclf.fit(blend_train, Y_dev)

blend_train = np.zeros((X_dev.shape[0], len(clfs))),这个集合是有几个学习器就有几列:

5905f19c4df6

4. 再用 bclf 来预测测试集 blend_test,并得到 score:

# Predict now

Y_test_predict = bclf.predict(blend_test)

score = metrics.accuracy_score(Y_test, Y_test_predict)

print ‘Accuracy = %s’ % (score)

blend_test = np.zeros((X_test.shape[0], len(clfs))),也是有几个学习器就有几列:

5905f19c4df6

整体流程简图如下:

5905f19c4df6

推荐阅读 历史技术博文链接汇总

http://www.jianshu.com/p/28f02bb59fe5

也许可以找到你想要的:

[入门问题][TensorFlow][深度学习][强化学习][神经网络][机器学习][自然语言处理][聊天机器人]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126552.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!

    卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!作者|Rocky0429来源|Python空间大家好,我是Rocky0429,一个喜欢在网上收集各种资源的蒟蒻…网上资源眼花缭乱,下载的方式也同样千奇百怪,比如BT下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的x雷和某度网盘成了我经常使用的工具。作为一个没有钱的穷鬼,某度网盘几十kb的下载速度让我…

    2022年6月14日
    34
  • 构造函数调用虚函数的问题

    构造函数调用虚函数的问题

    2022年2月21日
    44
  • java基本变量和引用变量_引用类型与值类型的区别

    java基本变量和引用变量_引用类型与值类型的区别Java中数据类型分为两大类:基本数据类型与复合数据类型。相应地,变量也有两种类型:基本类型与引用类型。Java的8中基本类型的变量称为基本类型变量,而类、接口和数组变量时引用类型变量。这两种类型变量的结构和含义不同,系统对他们的处理也不相同。1.基本类型与引用类型变量*基本类型(primitivetype)基本数据类型的变量包含了单个值,这个值的长度和格式符合变量所属数据类型的要求,可以是一个…

    2022年10月21日
    4
  • 算术运算符——整数运算

    算术运算符——整数运算

    2022年3月12日
    37
  • Linux 设置固定IP地址

    Linux 设置固定IP地址当我们安装完linux之后需要做的第一件事就是配置网络,因为有了网络我们可以做更多的事,比如下载插件,使用xshell工具连接等等ifconfig查看网络配置,类似windows的ipconfiglinux的网络配置文件一般在/etc/sysconfig/network-scripts/下面,使用命令cd切换到该路径下其中ifcfg-eth0就是虚拟机桥接的网络配置,如果有无…

    2022年5月2日
    68
  • win10-linux双系统安装教程

    win10-linux双系统安装教程需要的工具UltralSO:制作启动盘DiskGenius:划分磁盘空间EasyUEFI:修改启动引导,Windows自带引导不能修改,因此要用Linux的引导(一般默认就是linux的)1、制作启动U盘用UltralSO做,教程很多2、划分磁盘空间用DiskGenius将匀出一块空间做linux系统空间100MBESP分区8GB交换分区自定义容量:根目录分区自定义容量:\home分区3、安装系统U盘启动,安装操作系统4、修改启动顺序…

    2022年7月24日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号