clf = VotingClassifier(
    estimators=[('dtc', mdl1), ('knc', mdl2), ('svc', mdl3)],
    flatten_transform=False,  #默认True
    voting='soft')
clf.fit(X, y)

# 评估
y_pred = clf.predict(X)
displayClassifierMetrics(y, y_pred, clf.classes_, poslabel)

# #可以用名字来访问训练好的基学习器
# mdl4 = clf.named_estimators_['dtc']
# mdl5 = clf.estimators_[0]

# 同时返回三个基学习器的预测结果
pred = clf.transform(X)
# print(pred.shape)

# 函数transform的返回格式
# 若voting='hard',二元组(2464, 3)
#   则返回预测结果,形如(n_samples, n_classifiers)
# 若voting='soft',则:
# 若flatten_transform=True,
#   则返回概率,形如(n_samples, n_classifiers* n_classes)
# 二元组(2464, 6),列分别是[第1个基类预测0的概率,第1个基类预测1的概率,第2个...,第3个基类预测1的概论]
# 若flatten_transform=False,三元组(3, 2464, 2)
#   则返回概率,形如(n_classifiers, n_samples, n_classes)
# [0,30,0]表示:第0个基类,

# 投票类
# VotingClassifier(estimators, *, voting='hard',