我的問題是討論How to fit the 2D scatter data with a line with C++的延伸。現在我想進一步擴展我的問題:在估計符合2D散射數據的線時,如果我們可以以不同的方式處理每個2D散射數據會更好。也就是說,如果散點距離線很遠,我們可以給這個點低權重,反之亦然。因此,問題就變成了:給定一系列二維散射點以及它們的權重因子,我們如何估計通過它們的線性線?這篇文章(weighted least regression)可以找到這個方法的一個很好的實現。然而,該文中算法的實現過於複雜,因爲它涉及矩陣計算。因此,我試圖找到一種沒有矩陣計算的方法。該算法是simple linear regression的延伸,並且爲了說明的算法,我寫了下面MATLAB代碼:加權線性二維數據點最小二乘設置
function line = weighted_least_squre_for_line(x,y,weighting);
part1 = sum(weighting.*x.*y)*sum(weighting(:));
part2 = sum((weighting.*x))*sum((weighting.*y));
part3 = sum(x.^2.*weighting)*sum(weighting(:));
part4 = sum(weighting.*x).^2;
beta = (part1-part2)/(part3-part4);
alpha = (sum(weighting.*y)-beta*sum(weighting.*x))/sum(weighting);
a = beta;
c = alpha;
b = -1;
line = [a b c];
在上述碼,x,y,weighting
表示的x座標,分別加權因子y座標和。我用幾個例子來測試算法,但仍然不確定是否正確,因爲這種方法得到與Polyfit不同的結果,其依賴於矩陣計算。我現在在此發佈實施並徵求您的建議。你認爲這是一個正確的實施?謝謝!
感謝您提供建議。 – feelfree 2012-07-20 07:29:45