原理簡介
最小二乘估計演算法是 gauss 於 1795 年為研究行星軌道問題而提出來的。這種演算法的優點就是簡單、易實現。但是常規的最小二乘演算法估計精度並不高,原因主要在於沒有考慮量測資訊統計特性的優劣就直接使用了量測資訊。如果採用加權的方法區分各量測資訊的優劣,就可以大幅度的提高估計精度。加權最小二乘估計演算法的思想是:對於精度較高的感測器,權重取的大些,而對於精度較低的感測器,權重就取的小些。
matlab權重函式
原始碼是網上的乙個demo,大家湊合著理解
clear all;
close all;
clc;
a=2;b=2;c=-3;d=1;e=2;f=30; %係數
n=1:0.2:20;
x=repmat(n,96,1);
y=repmat(n',1,96);
z=a*x.^2+b*y.^2+c*x.*y+d*x+e*y +f; %原始模型
surf(x,y,z)
n=100;
ind=int8(rand(n,2)*95+1);
x=x(sub2ind(size(x),ind(:,1),ind(:,2)));
y=y(sub2ind(size(y),ind(:,1),ind(:,2)));
z=z(sub2ind(size(z),ind(:,1),ind(:,2)))+rand(n,1)*20; %生成待擬合點,加個雜訊
z(1:10)=z(1:10)+400; %加入離群點
hold on;
plot3(x,y,z,'o');
xx=[x.^2 y.^2 x.*y x y ones(100,1)];
yy=z;
c=inv(xx'*xx)*xx'*yy; %最小二乘
z=c(1)*x.^2+c(2)*y.^2+c(3)*x.*y+c(4)*x+c(5)*y +c(6); %擬合結果
cm=c;
mesh(x,y,z)
z=c(1)*x.^2+c(2)*y.^2+c(3)*x.*y+c(4)*x+c(5)*y +c(6);
c0=c;
while 1
r = z-z;
w = tanh(r)./r; %權重函式
w=diag(w);
c=inv(xx'*w*xx)*xx'*w*yy; %加權最小二乘
z=c(1)*x.^2+c(2)*y.^2+c(3)*x.*y+c(4)*x+c(5)*y +c(6); %擬合結果
if norm(c-c0)<1e-10
break;
endc0=c;
endz=c(1)*x.^2+c(2)*y.^2+c(3)*x.*y+c(4)*x+c(5)*y +c(6); %擬合結果
mesh(x,y,z)
結果
普通最小二乘法 加權最小二乘法 廣義最小二乘法
所謂回歸分析實際上就是根據統計資料建立乙個方程,用這個方程來描述不同變數之間的關係,而這個關係又無法做到想像函式關係那樣準確,因為即使你重複全部控制條件,結果也還有區別,這時通過讓回歸方程計算值和試驗點結果間差值的平方和最小來建立 回歸方程的辦法就是最小二乘法,二乘的意思就是平方。最小二乘就是指回歸...
最小二乘法
include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...
最小二乘法
在研究兩個變數之間的關係時,可以用回歸分析的方法進行分析。當確定了描述兩個變數之間的回歸模型後,就可以使用最小二乘法估計模型中的引數,進而建立經驗方程.簡單地說,最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小.這裡的 二乘 指的是用平方來度量觀測點與估計點的遠近 在古漢語中 平方 稱為...