監督學習中,如果**的變數是離散的,我們稱其為分類(如決策樹,支援向量機等),如果**的變數是連續的,我們稱其為回歸。回歸分析中,如果只包括乙個自變數和乙個因變數,且二者的關係可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變數,且因變數和自變數之間是線性關係,則稱為多元線性回歸分析。對於二維空間線性是一條直線;對於三維空間線性是乙個平面,對於多維空間線性是乙個超平面…這裡,談一談最簡單的一元線性回歸模型。
模型如下:
總體回歸函式中y與x的關係可是線性的,也可是非線性的。對線性回歸模型的「線性」有兩種解釋:
(1)就變數而言是線性的,y的條件均值是 x的線性函式
(2)就引數而言是線性的,y的條件均值是引數
線性回歸模型主要指就引數而言是「線性」,因為只要對引數而言是線性的,都可以用類似的方法估計其引數。
對於一元線性回歸模型, 假設從總體中獲取了n組觀察值(x1,y1),(x2,y2), …,(xn,yn)。對於平面中的這n個點,可以使用無數條曲線來擬合。要求樣本回歸函式盡可能好地擬合這組值。綜合起來看,這條直線處於樣本資料的中心位置最合理。 選擇最佳擬合曲線的標準可以確定為:使總的擬合誤差(即總殘差)達到最小。有以下三個標準可以選擇:
(1)用「殘差和最小」確定直線位置是乙個途徑。但很快發現計算「殘差和」存在相互抵消的問題。
(2)用「殘差絕對值和最小」確定直線位置也是乙個途徑。但絕對值的計算比較麻煩。
(3)最小二乘法的原則是以「殘差平方和最小」確定直線位置。用最小二乘法除了計算比較方便外,得到的估計量還具有優良特性。這種方法對異常值非常敏感。
最常用的是普通最小二乘法( ordinary least square,ols):所選擇的回歸模型應該使所有觀察值的殘差平方和達到最小。(q為殘差平方和)
樣本回歸模型:
殘差平方和:
則通過q最小確定這條直線,即確定
解得:
[cpp]view plain
copy
print?
#include
#include
#include
using
namespace std;
class leastsquare
a = (t3*x.size() - t2*t4) / (t1*x.size() - t2*t2);
//b = (t4 - a*t2) / x.size();
b = (t1*t4 - t2*t3) / (t1*x.size() - t2*t2);
} double gety(const
double x) const
void print() const
};
int main(int argc, char *argv)
else
} }
#include
#include#includeusing namespace std; class leastsquare{ double a, b; public: leastsquare(const vector& x, const vector& y) { double t1=0, t2=0, t3=0, t4=0; for(int i=0; ix; ifstream in(argv[1]); for(double d; in>>d; ) x.push_back(d); int sz = x.size(); vectory(x.begin()+sz/2, x.end()); x.resize(sz/2); leastsquare ls(x, y); ls.print(); cout<>x0) { cout< 最小二乘法及其c 的實現
目錄 1 引文背景 2 最小二乘法原理介紹 3 最小二乘法在c 上的實現 4 最小二乘法與梯度下降法的比較 一.背景 通過這段描述可以看出來,最小二乘法也是一種優化方法,求得目標函式的最優值。並且也可以用於曲線擬合,來解決回歸問題。難怪 統計學習方法 中提到,回歸學習最常用的損失函式是平方損失函式,...
最小二乘法及其c 的實現
最小二乘法的實現 include include include source.h define length 10 using namespace std double fun int n,double array length length for ii 0 ii n ii 求對角線的積 即 行...
最小二乘法
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函式...