我正在用numpy函数linalg.lstsq拟合二维多项式:
profileImageView.layoutIfNeeded()
profileImageView.layer.cornerRadius = profileImageView.frame.size.height / 2
profileImageView.layer.masksToBounds = true
我要适应的某些观点比其他观点更可靠。 有没有办法以不同的方式衡量这些观点? 谢谢
答案 0 :(得分:0)
try{
await db.runTransaction(async transaction => {
const doc = await transaction.get(ref);
if(!doc.exists){
throw "Document does not exist";
}
const newCount = doc.data().count + 1;
transaction.update(ref, {
count: newCount,
});
})
} catch(e){
console.log('transaction failed', e);
}
就足够了;权重可以应用于方程式。也就是说,如果系统超定
lstsq
您更关心第一个方程,将其乘以大于1的某个数字。例如,乘以5:
3*a + 2*b = 9
2*a + 3*b = 4
5*a - 4*b = 2
在数学上,系统是相同的,但是最小二乘解将有所不同,因为它使残差的平方和最小化,并且第一个方程式的残差乘以5。
这是一个基于您的代码的示例(进行了一些细微的调整以使其更像NumPythonic)。首先,不加权拟合:
15*a + 10*b = 45
2*a + 3*b = 4
5*a - 4*b = 2
这会将残差显示为
import numpy as np
x, y = np.meshgrid(np.arange(0, 3), np.arange(0, 3))
x = x.ravel()
y = y.ravel()
values = np.sqrt(x+y+2) # some values to fit
functions = np.stack([np.ones_like(y), y, x, x**2, y**2], axis=1)
coeff_r = np.linalg.lstsq(functions, values, rcond=None)[0]
values_r = functions.dot(coeff_r)
print(values_r - values)
现在我给第一个数据点更大的权重。
[ 0.03885814 -0.00502763 -0.03383051 -0.00502763 0.00097465 0.00405298
-0.03383051 0.00405298 0.02977753]
残余:
weights = np.ones_like(x)
weights[0] = 5
coeff_r = np.linalg.lstsq(functions*weights[:, None], values*weights, rcond=None)[0]
values_r = functions.dot(coeff_r)
print(values_r - values)
第一个残差现在要小一个数量级,这当然是以其他残差为代价的。