机器学习之SG(stacking)
1.关于堆栈泛化Stacked Generalization(SG)
蚕蛾会飞吗
人声嘈杂作为⼀个在kaggle⽐赛中⾼分选⼿常⽤的技术,SG在部分情况下,甚⾄可以让错误率相⽐当前最好的⽅法进⼀步降低30%之多。
以下图为例,简单介绍什么是SG:dwg怎么打开
① 将训练集分为3部分,分别⽤于让3个基分类器(Ba-leaner)进⾏学习和拟合
② 将3个基分类器预测得到的结果作为下⼀层分类器(Meta-learner)的输⼊
③ 将下⼀层分类器得到的结果作为最终的预测结果
当然,分类器个数不是固定的,具体到模型也没有统⼀要求。本次实验的第⼀层是两个⼦分类器(分别是knn和perception),第⼆层是逻辑回归。
我们使⽤两个模型作为⼦模型进⾏stacking,使⽤线性模型作为聚合器模型。
⼦模型1:k-Nearest Neighbors。
⼦模型2:感知器。
聚合器模型:Logistic回归。
每个模型有各⾃的训练模型的函数和⽤于进⾏预测的函数。
⼦模型1:k-Nearest Neighbors
k-Nearest Neighbors算法使⽤整个训练数据集作为模型。
田园将芜>初期症状knn_model函数⽤于训练模型。
进⾏预测需要在训练数据集中查找k个最相似的记录并选择最常见的类值。 euclidean_distance函数⽤于计算训练数据集中数据之间的相似性。
以下是对kNN模型进⾏预测的⼀些函数。函数euclidean_distance()计算两⾏数据之间的距离,get_neighbors()定位训练数据集中新数据⾏的所有邻居,knn_predict()根据邻居做出新数据⾏的预测。
我们把邻居数(k)设置为2,它是knn_predict()函数的默认参数。现在knn部分完成了,接下来看看Perceptron算法。
Perceptron算法的模型是从训练数据中学习得到⼀组权重。
为了训练权重,需要对训练数据进⾏许多预测以便计算误差值。因此,模型的训练和预测都需要预测函数。
下⾯是实现Perceptron算法的函数。perceptron_model()函数在训练数据集上使⽤随机梯度下降训练Perceptron模型,⽽perceptron_predict()根据权重做出预测。
perceptron_model()将learning rate和epoch指定为默认的参数,不需要我们再额外设置。我们现在已经实现了两个⼦模型,让我们看⼀下实现聚合器模型。
与Perceptron算法⼀样,Logistic回归使⽤⼀组权重(称为系数)作为模型的表⽰,通过迭代地对训练数据进⾏预测并更新它们来学习系数。
以下是⽤于实现逻辑回归算法的函数。 logistic_regression_model()⽤于训练训练数据集上的系数,logistic_regression_predict()根据系数对数据进⾏预测。
logistic_regression_model()同样将learning rate和epoch设置为默认参数。
机器学习算法中,学习如何组合预测与从训练数据集学习⾮常相似。
我们可以根据⼦模型的预测构建新的训练数据集,规则如下所⽰:
每⾏代表训练数据集中的⼀⾏。
第⼀列是由第⼀个⼦模型给出的训练数据集中每⼀⾏的预测,即k-Nearest Neighbors。
第⼆列是由第⼆个⼦模型给出的训练数据集中每⼀⾏的预测,即Perceptron算法。
第三列是训练数据集中的预期输出值。
构造出的stacking数据集的⼤概是下⾯这样:
恋网然后可以在这个新数据集上训练机器学习算法,例如逻辑回归,实质上,这种新的算法是学习如何最好地组合来⾃多个⼦模型的预测。
。
下⾯的to_stacked_row()实现了为此stacking数据集创建新⾏的过程。
该函数将模型列表作为输⼊,这些⽤于进⾏预测;还将函数列表作为输⼊,⼀个函数⽤于对对应模型进⾏预测。最后,还要加上训练数据集中的单⾏。
使⽤每个模型和训练数据⾏计算预测,然后将训练数据集⾏的预期输出值添加到⾏的最后⼀列。
篮球三号位
在⼀些预测建模问题上,通过在训练⾏和⼦模型做出的预测上训练聚合模型,可以获得更⼤的提升。
这种改进为聚合器模型提供了训练⾏中所有数据的上下⽂,帮助确定怎样才能更好地聚合⼦模型给出的预测。
二年级下册生字表
我们可以通过聚合训练⾏(减去最后⼀列)和上⾯创建的stacked_row来更新我们的to_stacked_row()来进⾏改进。
下⾯是改进后的to_stacked_row()
堆栈泛化的主要步骤就是如上,接下来我们解决实际的案例。数据集名称为sonar.all-data.csv。 这是⼀个描述声纳不同表⾯反弹的返回的数据集。 60个input是不同⾓度的反弹回的数据。这是⼀个⼆元分类问题,需要⼀个模型来区分岩⽯和⾦属圆柱。共给出了208个观测结果。