七模型加权集成预测触发ValueError形状不匹配广播错误如何解决
错误原因
- 权重数组维度匹配错误:你定义的
prediction_weights是形状为(1,7)的二维数组,直接遍历的时候取出的weight是形状(7,)的数组,无法和单个模型输出的(624,3)形状的预测结果做广播运算。 - 遍历逻辑错误:
zip(prediction_weights, preds)只会迭代1次(因为prediction_weights第一维长度为1),无法实现7个权重和7个模型预测结果的一一配对。 - 加权结果初始化参数存在隐患:你代码里初始化
weighted_predictions7时用到的nb_test_samples赋值为1、num_classes赋值为1,和实际的测试样本数624、类别数3不符,容易引发后续形状错误。
解决方法
先将权重数组扁平化处理为一维数组,用更稳妥的方式初始化加权结果存储变量,再遍历配对权重和对应模型的预测结果做加权计算,修改后代码如下:
import numpy as np from sklearn import metrics # 把权重扁平化得到形状为(7,)的一维数组,每个元素对应一个模型的权重 prediction_weights = np.array([[3.66963025e-01, 1.08053256e-01,1.14617370e-01, 4.10366349e-01, 6.16391075e-14, 4.37376684e-14, 9.26785075e-18]]).flatten() # 直接参考Y_test的形状初始化,避免参数写错导致形状错误 weighted_predictions7 = np.zeros_like(Y_test, dtype='float32') # 遍历配对单个权重和单个模型的预测结果 for weight, prediction in zip(prediction_weights, preds): weighted_predictions7 += weight * prediction yPred7 = np.argmax(weighted_predictions7, axis=1) yTrue = Y_test.argmax(axis=-1) accuracy = metrics.accuracy_score(yTrue, yPred7) * 100 np.savetxt('weighted_averaging_7_y_pred.csv', weighted_predictions7,fmt='%f', delimiter = ",")
内容的提问来源于stack exchange,提问作者shiva
相关产品推荐
相关产品推荐

