要确定权重,可以使用协方差矩阵的逆矩阵作为权重。权重向量可通过以下公式计算:
权重向量=协方差矩阵的逆矩阵×单位向量
推导:
权重向量的公式可以通过最小化误差的方法推导得到。基本思想是希望通过模型融合,得到的综合模型的预测结果与真实值之间的误差最小化。在这个过程中,我们需要确定每个模型的权重,使得其预测结果能够最好地与真实值拟合。
假设我们有 n 个模型,它们的预测结果分别为 ( y 1 , y 2 , . . . , y n ) ( y_1, y_2, ..., y_n ) (y1,y2,...,yn),真实值为 ( y ) ( y ) (y)。我们希望通过权重 ( w 1 , w 2 , . . . , w n ) ( w_1, w_2, ..., w_n ) (w1,w2,...,wn) 来对这些预测结果进行加权平均,得到综合模型的预测结果 ( y ^ ) ( \hat{y} ) (y^),即:
[ y ^ = w 1 ⋅ y 1 + w 2 ⋅ y 2 + . . . + w n ⋅ y n ] [ \hat{y} = w_1 \cdot y_1 + w_2 \cdot y_2 + ... + w_n \cdot y_n ] [y^=w1⋅y1+w2⋅y2+...+wn⋅yn]
为了最小化综合模型的预测结果与真实值之间的误差,可以使用最小二乘法,即最小化误差的平方和。误差可以表示为:
[ Error = ( y − y ^ ) 2 ] [ \text{Error} = (y - \hat{y})^2 ] [Error=(y−y^)2]
将 ( y ^ ) ( \hat{y} ) (y^) 的表达式代入其中:
[ Error = ( y − ( w 1 ⋅ y 1 + w 2 ⋅ y 2 + . . . + w n ⋅ y n ) ) 2 ] [ \text{Error} = (y - (w_1 \cdot y_1 + w_2 \cdot y_2 + ... + w_n \cdot y_n))^2 ] [Error=(y−(w1⋅y1+w2⋅y2+...+wn⋅yn))2]
为了找到最小化误差的权重 ( w 1 , w 2 , . . . , w n ) ( w_1, w_2, ..., w_n ) (w1,w2,...,wn),我们可以对误差关于权重的偏导数等于零,求得最优的权重。这个问题可以转化为线性代数中的矩阵求解问题。具体来说,我们可以将误差关于权重的偏导数设置为零,并解出权重向量 ( w ) ( w ) (w)。这个过程等价于求解协方差矩阵的逆矩阵与单位向量的乘积。
示例:
# 先构造一个矩阵
df = np.array([lgb6812.prob, xgb6787.prob, cat6777.prob])
# 计算协方差矩阵
np.corrcoef(df)
# 给定协方差矩阵
cov_matrix = np.array([[1. , 0.94866069, 0.9108549 ],
[0.94866069, 1. , 0.9113983 ],
[0.9108549 , 0.9113983 , 1. ]])
# 计算协方差矩阵的逆矩阵
inv_cov_matrix = np.linalg.inv(cov_matrix)
# 单位向量
unit_vector = np.ones((3, 1))
# 计算权重向量
weight_vector = np.dot(inv_cov_matrix, unit_vector)
# 归一化权重向量
normalized_weights = weight_vector / np.sum(weight_vector)
print("权重向量:", normalized_weights.flatten())
输出:
权重向量: [0.36567303 0.31048439 0.32384258]
随后可以根据序来决定每个模型的权重大小。