Algorithm 加权平均最佳权重的计算算法

Algorithm 加权平均最佳权重的计算算法,algorithm,average,Algorithm,Average,我有以下表格的数据集: [9.1 5.6 7.4]=>8.5,[4.1 4.4 5.2]=>4.9,x=>yx 所以x是三元素的实向量,y是标量函数 我假设该数据的加权平均模型: yx=a*x[0]+b*x[1]+c*x[2]/a+b+c+Ex 其中E是未知的随机误差项 我需要一个算法来找到a,b,c,使总平方和误差最小化: error=对{Ex^2}的所有x求和 对于给定的数据集。假设权重被标准化为和1,这很好地没有失去一般性,那么我们可以用c=1-a-b来重新计算问题,所以我们实际上是在求解

我有以下表格的数据集:

[9.1 5.6 7.4]=>8.5,[4.1 4.4 5.2]=>4.9,x=>yx

所以x是三元素的实向量,y是标量函数

我假设该数据的加权平均模型:

yx=a*x[0]+b*x[1]+c*x[2]/a+b+c+Ex

其中E是未知的随机误差项

我需要一个算法来找到a,b,c,使总平方和误差最小化:

error=对{Ex^2}的所有x求和


对于给定的数据集。

假设权重被标准化为和1,这很好地没有失去一般性,那么我们可以用c=1-a-b来重新计算问题,所以我们实际上是在求解a和b

有了这个,我们就可以写作了

error(a,b) = sum over all x { a x[0] + b x[1] + (1 - a - b) x[2] - y(x) }^2
现在的问题是取偏导数d_error/da和d_error/db,并将它们设置为零,以找到最小值

通过一些摆弄,你可以得到一个由a和b两个方程组成的系统

C(X[0],X[0],X[2]) a + C(X[0],X[1],X[2]) b = C(X[0],Y,X[2])
C(X[1],X[0],X[2]) a + C(X[1],X[1],X[2]) b = C(X[1],Y,X[2])
X[i]的含义是数据集X值中所有i分量的向量

Y的含义是所有yx值的向量

系数函数C具有以下含义:

C(p, q, r) = sum over i { p[i] ( q[i] - r[i] ) }
我将省略如何解决2x2系统,除非这是一个问题

如果我们插入你给出的两元素数据集,我们应该得到精确的系数,因为你总是可以用一条直线完美地逼近两点。例如,第一个方程系数为:

C(X[0],X[0],X[2]) =  9.1(9.1 - 7.4) + 4.1(4.1 - 5.2) = 10.96
C(X[0],X[1],X[2]) = -19.66
C(X[0],Y,X[2]) = 8.78
与第二个等式类似:4.68-13.6 4.84

求解2x2系统生成:a=0.42515,b=-0.20958。因此c=0.78443

请注意,在这个问题中,会产生负系数。虽然实际数据集可能会产生这样的结果,但没有什么可以保证它们是肯定的

事实上,如果你用这些系数计算加权平均数,它们是8.5和4.9

为了好玩,我还尝试了以下数据集:

X[0]        X[1]        X[2]        Y
0.018056028 9.70442075  9.368093544 6.360312244
8.138752835 5.181373099 3.824747424 5.423581239
6.296398214 4.74405298  9.837741509 7.714662742
5.177385358 1.241610571 5.028388255 4.491743107
4.251033792 8.261317658 7.415111851 6.430957844
4.720645386 1.0721718   2.187147908 2.815078796
1.941872069 1.108191586 6.24591771  3.994268819
4.220448549 9.931055481 4.435085917 5.233711923
9.398867623 2.799376317 7.982096264 7.612485261
4.971020963 1.578519218 0.462459906 2.248086465
我用1/3x[0]+1/6x[1]+1/2x[2]+E生成Y值,其中E是[-0.1..+0.1]中的随机数。如果算法工作正常,我们希望从这个结果中大致得到a=1/3和b=1/6。事实上,我们得到a=0.3472和b=0.1845


OP现在说他的实际数据大于3向量。这种方法很容易推广。如果向量的长度为n,那么你就得到了一个n-1 x n-1的系统来求解。

假设权重被归一化为和1,这很好地没有失去一般性,那么我们可以用c=1-a-b来重新计算问题,所以我们实际上是在求解a和b

有了这个,我们就可以写作了

error(a,b) = sum over all x { a x[0] + b x[1] + (1 - a - b) x[2] - y(x) }^2
现在的问题是取偏导数d_error/da和d_error/db,并将它们设置为零,以找到最小值

通过一些摆弄,你可以得到一个由a和b两个方程组成的系统

C(X[0],X[0],X[2]) a + C(X[0],X[1],X[2]) b = C(X[0],Y,X[2])
C(X[1],X[0],X[2]) a + C(X[1],X[1],X[2]) b = C(X[1],Y,X[2])
X[i]的含义是数据集X值中所有i分量的向量

Y的含义是所有yx值的向量

系数函数C具有以下含义:

C(p, q, r) = sum over i { p[i] ( q[i] - r[i] ) }
我将省略如何解决2x2系统,除非这是一个问题

如果我们插入你给出的两元素数据集,我们应该得到精确的系数,因为你总是可以用一条直线完美地逼近两点。例如,第一个方程系数为:

C(X[0],X[0],X[2]) =  9.1(9.1 - 7.4) + 4.1(4.1 - 5.2) = 10.96
C(X[0],X[1],X[2]) = -19.66
C(X[0],Y,X[2]) = 8.78
与第二个等式类似:4.68-13.6 4.84

求解2x2系统生成:a=0.42515,b=-0.20958。因此c=0.78443

请注意,在这个问题中,会产生负系数。虽然实际数据集可能会产生这样的结果,但没有什么可以保证它们是肯定的

事实上,如果你用这些系数计算加权平均数,它们是8.5和4.9

为了好玩,我还尝试了以下数据集:

X[0]        X[1]        X[2]        Y
0.018056028 9.70442075  9.368093544 6.360312244
8.138752835 5.181373099 3.824747424 5.423581239
6.296398214 4.74405298  9.837741509 7.714662742
5.177385358 1.241610571 5.028388255 4.491743107
4.251033792 8.261317658 7.415111851 6.430957844
4.720645386 1.0721718   2.187147908 2.815078796
1.941872069 1.108191586 6.24591771  3.994268819
4.220448549 9.931055481 4.435085917 5.233711923
9.398867623 2.799376317 7.982096264 7.612485261
4.971020963 1.578519218 0.462459906 2.248086465
我用1/3x[0]+1/6x[1]+1/2x[2]+E生成Y值,其中E是[-0.1..+0.1]中的随机数。如果算法工作正常,我们希望从这个结果中大致得到a=1/3和b=1/6。事实上,我们得到a=0.3472和b=0.1845


OP现在说他的实际数据大于3向量。这种方法很容易推广。如果向量的长度为n,则需要求解一个n-1 x n-1系统。

对于7个变量,它是一个7x7系统。然后,你应该使用一个数学库,可以解决这样的方程。如果希望保持标准化,还可以尝试其他非线性优化方法,如Levenberg-Marquardt。或者一个约束最小二乘解算器。通过写Ex,你就意味着误差项是x向量的函数。这就是你真正的意思吗?另外,你的目标是对你没有指定的某些特征给出一个无偏的估计值yx吗?你有观察到的yx,你正试图与你的函数相匹配吗?如果你失去了比例因子1/a+b+c,这就是最小二乘回归。如果残差的方差随y的变化而变化,则应将方差稳定变换应用于y的,例如
斯奎特或斯奎特。如果方差作为x的函数变化,您需要,其中最佳权重与残差的方差成反比。缩放使这变得更困难,而您没有给出您问题的背景。缩放真的有必要吗?你能回答@pjs的问题吗?您的符号显示的错误取决于观测矩阵,但您提到它是随机的和未知的。如果这是真的,那么error=sum over all x of{Ex^2}也是未知的,不能最小化。你是指预测[i]-观测[i]的平方和吗?在这种情况下,假设Ex=E~Nμ,σ和X。min@loannis对于线性模型,它是随机的和未知的。这类回归分析的演练是对数据的形式进行假设。这就是模型。然后通过寻找最佳的模型参数来最小化数据和模型之间的差异。参见7个变量的示例,它是一个7x7系统。然后,你应该使用一个数学库,可以解决这样的方程。如果希望保持标准化,还可以尝试其他非线性优化方法,如Levenberg-Marquardt。或者一个约束最小二乘解算器。通过写Ex,你就意味着误差项是x向量的函数。这就是你真正的意思吗?另外,你的目标是对你没有指定的某些特征给出一个无偏的估计值yx吗?你有观察到的yx,你正试图与你的函数相匹配吗?如果你失去了比例因子1/a+b+c,这就是最小二乘回归。如果残差的方差随y的变化而变化,则应将方差稳定变换应用于y,如sqrty或logy。如果方差作为x的函数变化,您需要,其中最佳权重与残差的方差成反比。缩放使这变得更困难,而您没有给出您问题的背景。缩放真的有必要吗?你能回答@pjs的问题吗?您的符号显示的错误取决于观测矩阵,但您提到它是随机的和未知的。如果这是真的,那么error=sum over all x of{Ex^2}也是未知的,不能最小化。你是指预测[i]-观测[i]的平方和吗?在这种情况下,假设Ex=E~Nμ,σ和X。min@loannis对于线性模型,它是随机的和未知的。这类回归分析的演练是对数据的形式进行假设。这就是模型。然后通过寻找最佳的模型参数来最小化数据和模型之间的差异。例如,您的第一句话通常不正确,它仅适用于原始权重和一个或缩放值a*=a/a+b+c,b*=b/a+b+c,c*=c/a+b+c的情况。原始权重之和不太可能为1——如果[a,b,c]已经表示了凸权重,那么在原始问题陈述中就没有必要进行缩放。你是对的,我应该像你说的那样重新命名为a,b,c。由于根据他的定义,所有与常数因子不同的权重集都是最优的,所以我们可以假设我们正在寻找归一化系数。我加了这个。谢谢。你的第一句话一般不正确,它只适用于原始权重和一个或缩放值a*=a/a+b+c,b*=b/a+b+c,c*=c/a+b+c的情况。原始权重之和不太可能为1——如果[a,b,c]已经表示了凸权重,那么在原始问题陈述中就没有必要进行缩放。你是对的,我应该像你说的那样重新命名为a,b,c。由于根据他的定义,所有与常数因子不同的权重集都是最优的,所以我们可以假设我们正在寻找归一化系数。我加了这个。谢谢