stacking算法原理及代码

stacking算法原理

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

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

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

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

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

优缺点:

优点:

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

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

缺点:

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)

原文地址:https://www.cnblogs.com/dudumiaomiao/p/9692935.html

时间: 2024-08-04 02:35:12

stacking算法原理及代码的相关文章

十大排序算法(原理及代码实现细节)

本文参考一些书籍啊哈算法,数据结构与算法(清华大学),已经一些网上的博客 然后动图也是从网上偷来的(^_^),代码实现我尽量用大家容易懂的方式实现 数组居多,然后,桶排序(是别人代码,不过写的不完全正确后面会更新),都是学习嘛 有误的地方,还望各位指正,希望对你有帮助(其实很灵活的,在运用上),也不要这样就满足了 多多地运用,会使理解更深的. 按上面的顺序来吧 原理在代码里直接上动图吧 冒泡排序动图演示 冒泡排序代码实现 1 #include<iostream> 2 #include<c

排序算法原理及代码实现(c#)

1.插入排序 把第一个元素看做已排序数组放在有序数组中,从第二个元素开始,依次把无序数组元素取出和有序数组中的元素逐个比较,并放在有序数组的正确位置上. /// <summary> /// C# 插入排序 List<i>为无序数组 List<j>为有序数组 把无序数组逐个跟前值比较后放在有序数组的正确位置上 /// </summary> public class InsertionSorter { public void Sort(int[] list) {

广告系统中weak-and算法原理及编码验证

wand(weak and)算法基本思路 一般搜索的query比较短,但如果query比较长,如是一段文本,需要搜索相似的文本,这时候一般就需要wand算法,该算法在广告系统中有比较成熟的应 该,主要是adsense场景,需要搜索一个页面内容的相似广告. Wand方法简单来说,一般我们在计算文本相关性的时候,会通过倒排索引的方式进行查询,通过倒排索引已经要比全量遍历节约大量时间,但是有时候仍 然很慢. 原因是很多时候我们其实只是想要top n个结果,一些结果明显较差的也进行了复杂的相关性计算,而

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

朴素贝叶斯分类算法原理分析与代码实现

前言 本文介绍机器学习分类算法中的朴素贝叶斯分类算法并给出伪代码,Python代码实现. 词向量 朴素贝叶斯分类算法常常用于文档的分类,而且实践证明效果是挺不错的. 在说明原理之前,先介绍一个叫词向量的概念. --- 它一般是一个布尔类型的集合,该集合中每个元素都表示其对应的单词是否在文档中出现. 对应关系和词汇表一一对应. 比如说,词汇表只有三个单词:'apple', 'orange', 'melo',某文档中,apple和melo出现过,那么其对应的词向量就是 {1, 0, 1}. 这种模型

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

十三种基于直方图的图像全局二值化算法原理.实现.代码及效果(转) http://www.cnblogs.com/carekee/articles/3643394.html 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在这些庞大的分

第五篇:朴素贝叶斯分类算法原理分析与代码实现

前言 本文介绍机器学习分类算法中的朴素贝叶斯分类算法并给出伪代码,Python代码实现. 词向量 朴素贝叶斯分类算法常常用于文档的分类,而且实践证明效果挺不错的. 在说明原理之前,先介绍一个叫词向量的概念. --- 它一般是一个布尔类型的集合,该集合中每个元素都表示其对应的单词是否在文档中出现. 比如说,词汇表只有三个单词:'apple', 'orange', 'melo',某文档中,apple和melo出现过,那么其对应的词向量就是 {1, 0, 1}. 这种模型通常称为词集模型,如果词向量元

常见经典排序算法学习总结,附算法原理及实现代码(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了详解.每一种算法都有基本介绍.算法原理分析.算法代码. 转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/47280135 插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过

深入一致性哈希(Consistent Hashing)算法原理,并附100行代码实现

本文为实现分布式任务调度系统中用到的一些关键技术点分享——Consistent Hashing算法原理和Java实现,以及效果测试. 背景介绍 一致性Hashing在分布式系统中经常会被用到, 用于尽可能地降低节点变动带来的数据迁移开销.Consistent Hashing算法在1997年就在论文Consistenthashing and random trees中被提出. 先来简单理解下Hash是解决什么问题.假设一个分布式任务调度系统,执行任务的节点有n台机器,现有m个job在这n台机器上运