from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split x,y = make _ class ification(n _ samples = 5000,n_features=50, n _ informative = 10,n_redundant=25,n_repeated=15,n_clusters_per_class=5,flip_y=0.05,class_sep=0.5,random_state=0) |
在本章中,我们将使用Madelon数据集的重建作为测试集成技术的基础:
X_train,X_test,y_train,y_test = train_test_split(X,y,
test_size=0.33, random_state=0)
在将其分成训练集和测试集之后,我们通过实例化我们的学习算法来继续。我们将只使用三种基本算法:支持向量机、随机森林和k-最近邻分类器,并使用默认的超参数进行演示。你可以尝试更改它们或增加它们的数量:
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import log_loss, roc_auc_score, accuracy_score
model_1 = SVC(probability=True, random_state=0)
model_2 = RandomForestClassifier(random_state=0)
model_3 = KNeighborsClassifier()
以下步骤只是在训练集上训练每个模型:
model_1.fit(X_train, y_train)
model_2.fit(X_train, y_train)
model_3.fit(X_train, y_train)
在这一点上,我们需要对每个模型的测试集进行预测,并使用多数投票来集成所有这些预测。为此,我们将使用SciPy的mode函数:
import numpy as np
from scipy.stats import mode
preds = np.stack([model_1.predict(X_test),
model_2.predict(X_test),
model_3.predict(X_test)]).T
max_voting = np.apply_along_axis(mode, 1, preds)[:,0]
首先,我们检查每个单一模型的准确性:
for i, model in enumerate(['SVC', 'RF ', 'KNN']):
acc = accuracy_score(y_true=y_test, y_pred=preds[:, i])
print(f"Accuracy for model {model} is: {acc:0.3f}")
我们看到三款性能差不多,0.8左右。现在是检查多数投票组合的时候了:
max_voting_accuray = accuracy_score(y_true=y_test, y_pred=max_voting)
print(f"Accuracy for majority voting is: {max_voting_accuray:0.3f}")
投票集合实际上更准确:0.817,因为它设法将大多数人的正确信号放在一起。
对于多标签问题(当你可以预测多个类别时),你可以只选择预测次数超过一定次数的类别,假设相关性阈值指示某个类别的预测是信号,而不是噪声。例如,如果你有五个模型,你可以将此阈值设置为3,这意味着如果一个类至少由三个模型预测,则该预测应该被认为是正确的。
在回归问题中,以及当你预测概率时,你实际上不能使用多数表决。多数表决只适用于类别所有权。相反,当你必须预测数字时,你需要从数字上组合结果。在这种情况下,采用平均值或加权平均值将为你提供组合预测的正确方法。