实现机器学习的循序渐进指南VII——Blending
作者:互联网
目录
介绍
混合(Blending)是一种模型融合方法,而不是传统的机器学习算法。Netflix中的顶级表演者使用混合(Blending),这被认为是一种堆叠形式。混合(Blending)更像是工程方法,因此,本文中的方程式很少。
混合(Blending)模型
混合(Blending)架构
一般混合模型中有两层。在第一层中,我们从原始训练集创建一个小型holdset。剩余训练数据用于生成模型以给出保持集的预测。在第二层中,使用holdset作为训练集来训练第二层中的模型。混合的整个过程如下所示。
图1.混合架构
混合(Blending)实现
在第一层混合中,有几个单独的分类器,它们可以是不同的或相同的。所有分类器使用图1中所示的蓝色数据生成模型。然后,训练的模型给出橙色数据的预测,其将用作第二层中的训练数据。第一层的代码如下所示:
train_data1, train_data2, train_label1, train_label2 = train_test_split(train_data, train_label, test_size=0.5, random_state=2019)
# train set in the second layer
train_predict_feature = np.zeros((train_data2.shape[0], self.k))
trained_model = []
# the first layer in Blending
for j, clf in enumerate(self.classifier_set):
# train each submodel
print(j, clf)
clf.train(train_data1, train_label1)
train_predict_feature[:, j] = clf.predict(train_data2)[:, 0]
# save the trained model in the first layer
trained_model.append(clf)
在第二层中,我们使用单层感知器作为分类器。我们使用第一层生成的训练数据训练分类器,其代码如下所示:
# the second layer in Blending
layer2_clf = PerceptronClassifier()
layer2_clf.train(train_predict_feature, train_label2)
混合(Blending)分类
对于混合的测试过程,还有两层。在第一层中,测试集被输入到第一层中的训练分类器,即,用蓝色数据训练的分类器。在第二层中,预测结果被输入到第二层中的训练分类器,即,用橙色数据训练的分类器。然后,输出是最终预测。测试代码如下所示:
test_predict_feature = np.zeros((test_data.shape[0], self.k))
# the first layer in Blending
for j, clf in enumerate(self.layer1_classifier_set):
test_predict_feature[:, j] = clf.predict(test_data)[:, 0]
# the second layer in Blending
probability = self.layer2_classifier.predict(test_predict_feature)
结论与分析
混合(Blending)是一种更简单的模型融合方法,其性能受所选分类器的影响。因此,有必要花时间在它上面。在这篇文章中,我们使用下面的分类器集
clfs = [PerceptronClassifier(), PerceptronClassifier(), LogisticRegressionClassifier(), LogisticRegressionClassifier()]
检测性能如上所示。很容易知道,当运行时间稍大时,检测性能优于其他性能。
可以在MachineLearning中找到本文中的相关代码和数据集 。
有兴趣的小伙伴可以查看上一篇。
原文地址:https://www.codeproject.com/Articles/4354591/Step-by-Step-Guide-to-Implement-Machine-Learning-5
标签:predict,clf,VII,混合,分类器,train,循序渐进,Blending 来源: https://blog.csdn.net/mzl87/article/details/90481279