向量多元線性回歸

2021-07-25 10:42:48 字數 2248 閱讀 3736

前兩天被問乙個問題。有兩組向量

x 和

w,維度分別為

a 和

b,它們之間有線性對映關係。即滿足xt

a=wt

,其中a 為線性變換陣。給出兩組含有雜訊的資料,如何求出擬合度較好的陣

a。這實際上是乙個多元線性回歸問題,常用的方法是最小二乘法,確定使得方差最小的係數。

方差為 e(

a)=1

bn∑i

=1n∑

j=1b

(wij

−∑k=

1axi

kakj

)2求偏導忽略其係數 ∂e

(a)∂

akj=

∑i=1

nxik

(wij

−∑p=

1axi

papj

) 用梯度下降法,係數修改應該為 ak

j=ak

j+α∑

i=1n

xik(

wij−

∑p=1

axip

apj)

迭代至誤差收斂即可。注意當誤差上公升的時候,可能是因為迭代步長過大,需要減小步長。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int mod = 1000000007;

const

double eps = 1e-6;

const

int inf = 0x3f3f3f3f;

const ll inf = 100000000000000000ll;

const

int maxn = 100010;

const

int maxm = 300030;

double x[2][505][505];

double cx[505][505];

double c[505][505];

double e[505][505];

double theta;

double last;

double now;

int a,b,n;

void init(int op)}}

}double ex()

}return ret;

}void gradient()

for(int i = 0;i < a;i++)

}init(0);

last = ex();

int op = 1,cnt = 1;

printf("time %d step %.12f error = %f\n",cnt++,theta,last);

while(1)

x[op][i][j] = x[op^1][i][j]+2*tmp*theta;}}

init(op);

now = ex();

if(now > last)

printf("time %d step %.12f error = %f\n",cnt++,theta,now);

if(fabs(now-last)break;

last = now;

op ^= 1;

}for(int i = 0;i < a;i++)

}}void gen()

}int dd[6],bb[6];

int nn = 20;

printf("%d %d %d\n",nn,4,5);

for(int i = 0;i < 20;i++)

printf("\n");

for(int k = 0;k < 5;k++)

printf("%d ",bb[k]);

}printf("\n");

}}void calc()

while(1)

for(int j = 0;j < b;j++)

printf("%f%s",tot,j == b-1?"\n":" ");}}

}int main()

多元線性回歸

多元線性回歸的基本原理和基本計算過程與一元線性回歸相同,但由於自變數個數多,計算相當麻煩,一般在實際中應用時都要借助統計軟體。介紹多元線性回歸的一些基本問題。但由於各個自變數的單位可能不一樣,比如說乙個消費水平的關係式中,工資水平 受教育程度 職業 地區 家庭負擔等等因素都會影響到消費水平,而這些影...

多元線性回歸

from numpy import genfromtxt 用來讀取資料轉化為矩陣 from sklearn import linear model 含有回歸的模型 datapath r c users qaq desktop delivery dummy.csv 路徑 deliverydata ge...

多元線性回歸

比如有乙個住房 的資料集,可能會有多個不同的模型用於擬合,選擇之一像是這種二次模型 0 1x 2x2,因為直線並不能很好的擬合這些資料。但是現在如果用二次函式去考慮,可能會想到二次函式在最高點之後會下降,但是 並不會下降,並不合理,那我們可以用 0 1x 2x2 3x3這樣的三次模型。如果像這樣選擇...