Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 21. 06. 2013 18:18 — Editoval netix (21. 06. 2013 18:22)

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Linearni regrese

Zdravím, jsem programátor a snažím se sestavit třídu na mnohonásobnou lineární regresi. Mám už kód, na vzorec:  y = x1 * a1 + x2 * a2 který funguje naprosto přesně.
Já ale potřebuji, aby to fungovalo na vzorec: y = x1 * a1 + x2 * a2 + B

Nejlíp to vysvětlím na excel ukázce: https://dl.dropboxusercontent.com/u/973 … roblem.png

Můj kód funguje skvěle na případě, že konstanta B není vypočítána, ale já naopak konstantu B potřebuji vypočítat, a tak se ptám: je velký rozdíl ve výpočtu pokud potřebuji konstantu B?

Děkuji za případné rady

Offline

  • (téma jako vyřešené označil(a) netix)

#2 21. 06. 2013 19:47

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

Matice X bude mít navíc sloupec jedniček na začátku.

Spojitost s Excelem jaksi nechápu.

Offline

 

#3 21. 06. 2013 22:15

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Linearni regrese

↑ netix:

Ahoj,

konstantu, kterou značíš B, samozřejmě potřebuješ, Tvůj vzorec  y = x1 * a1 + x2 * a2 + B totiž není nic jiného než obecná rovnice roviny v prostoru. Ve Tvém problému ale nemáš jen dva nezávislé sloupce x1, x2, ale tři. V tom případě ale musíš hledat lineární funkci ne dvou, ale tří proměnných tvaru  y = x1 * a1 + x2 * a2+ x3 * a3+ B. Anebo to chápu špatně?


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#4 22. 06. 2013 08:49 — Editoval netix (22. 06. 2013 09:07)

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

↑ martisek:

Těch sloupců může být klidně 50, to není důležité.

Takhle vypadá zatím můj kód: http://pastebin.com/pcCYfXdm

A já ho potřebuji upravit, aby vypočítal nejen promenné A(double[] C;) ale i kosntantu B

Offline

 

#5 22. 06. 2013 14:33

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

Kolega martisek asi naráží na fakt, že nám ukazujete deterministický model, přitom máte na mysli klasickou regresi s chybovým prvkem.

Moje rada stále platí — první sloupec v X matici budou jedničky a pak normálně

$\hat{\beta} = (X'X)^{-1} X'Y$

Offline

 

#6 22. 06. 2013 14:51

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

Platí tahle rada i pro mnohonásobnou lineární regresi? Já teda nemám VŠ vzdělání, takže mi ten vzorec ve skutečnosti moc nepomůže..

Offline

 

#7 22. 06. 2013 15:01 — Editoval halogan (22. 06. 2013 19:11)

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

Ano, platí to obecně.

Pokud nechcete/neumíte použít maticový zápis (váš kód jsem neprocházel), tak prostě nagenerujte první proměnnou s konstantní hodnotou, vždy rovnou jedné. Snad to bude fungovat, nikdy jsem to vaším postupem nezkoušel.

Edit: ten vzorec je vskutku jednoduchý. Jakmile máte matici nezávislých proměnných (x a jedničky jako konstanta) a vektor závislé proměnné (y), tak stačí mít funkci/třídu na maticové násobení a inverzi matic, pak je to hračka. Z toho maticového násobku vám vyjde vektor koeficientů začínající konstantou a pokračující jednotlivými neznámými.

Offline

 

#8 22. 06. 2013 19:22

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Linearni regrese

↑ netix:

V předpisu funkce y = x1 * a1 + x2 * a2 + x3 * a3 + B znáš y; x1; x2; x3 a hledáš a1; a2; a3; B. Takže je třeba sestavit a řešit soustavu

$ n\cdot B     +a1\Sigma x1+a2\Sigma x2+a3\Sigma x3 =\Sigma y $
$ B\Sigma x1+a1\Sigma x1^2+a2\Sigma x1x2 +a3\Sigma x1x3 =\Sigma yx1 $
$ B\Sigma x2+a1\Sigma x1x2+a2\Sigma x2^2 +a3\Sigma x2x3 =\Sigma yx2 $
$ B\Sigma x3+a1\Sigma x1x3+a2\Sigma x2x3 +a3\Sigma x3^2 =\Sigma yx3 $

kde n je počet hodnot v jednotlivých sloupcích.


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#9 22. 06. 2013 19:26 — Editoval halogan (22. 06. 2013 22:55)

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

↑ martisek:



Edit: hloupost.

---

Více způsoby jde dosáhnout vzorce, který jsem nabízel výše.

Offline

 

#10 22. 06. 2013 19:38

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

Ok, děkuji všem za rady, asi nejlepší způsob k pochopení bude jednoduchý příklad, vložíme jen dva řádky dat a počet x bude taktéž 2.

Takže první řádek: x1 = -1; x2 = 1; y1 = 1;
Druhý řádek: x3 = 5; x4 = 2; y2 = 10;

Z těchto dat by ten vzorec mel vypočítat tyhle hodnoty: a1 = 1.5; a2 = 0; b = 2.5

Mohli byste mi z tohoto zadani vypočítat vysledek jen pomoci základni matematiky (+ - * / mocnina odmocnina) a dalších pomocnych promennych

Offline

 

#11 22. 06. 2013 19:42

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

Je to možné spočítat, sám jsem to dělal loni na podzim, ale oproti maticovému zápisu to byla naprosto zbytečná dřina.

Offline

 

#12 22. 06. 2013 19:45

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

no já to stejně musím přepsat do c++, které mi poskytuje jen základní znaménka a odmocninu

Offline

 

#13 22. 06. 2013 19:53

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

Pokud jde pouze o funkční kód, netřeba znovu vynalézat kolo.

Hledejte "multiple linear regression C#" nebo "OLS C#". Základní skripty budou dělat inverzi matic, pokročilejší budou aplikovat různé algoritmy pro efektivnější kód.

Kdybyste přeci jen chtěl jednoduché řešení, následující vzorec je na odrazení. Funguje jen a pouze pro dvě vysvětlující proměnné.

http://forum.matweb.cz/upload3/img/2013-06/23626_Screen%2BShot%2B2013-06-22%2Bat%2B18.52.17.png

Offline

 

#14 22. 06. 2013 22:03

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Linearni regrese

↑ halogan:

Ale probůh - to je metoda nejmenších čtverců !!!!


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#15 22. 06. 2013 22:53 — Editoval halogan (22. 06. 2013 23:10)

halogan
Ondřej
Místo: UK
Příspěvky: 4528
Škola: IES FSV UK (09-12, Bc.)
Pozice: student
Reputace:   106 
 

Re: Linearni regrese

↑ martisek:

Metoda momentů, že? Neviděl jsem ji v nich, jak máte nevypsané indexy, pardon. Zmátl mě váš úvod, kde píšete o funkci nebo nutnosti konstanty. Obojí neplatí.

Tak jako tak se nedostane k požadovanému jednoduchému výpočtu. A tak jako tak se dostaneme k maticovému vyjádření.

Offline

 

#16 23. 06. 2013 09:29 — Editoval netix (23. 06. 2013 09:39)

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

To nikdy nemůžu zvládnout, jak říkám, nemám VŠ vzdělání, vůbec těm vzorcům nerozumím. Mám ještě jeden c++ kód, je o hodně jednodušší, ale je to lineární regrese pouze s jedním X.

link: https://github.com/Netix/Multiple-Linea … linreg.cpp

27-36 řádek je pro přidáni dat x, y

38 řádek začíná funkce na spočítáni a, b



Můj problém by vyřešilo, kdyby jsme nějak dali dohromady kód kde budou dvě vstupní X, a ne jen jeden.

Offline

 

#17 23. 06. 2013 10:52 — Editoval martisek (23. 06. 2013 10:55)

martisek
Příspěvky: 914
Škola: MU Brno
Pozice: učitel, FSI VUT v Brně
Reputace:   52 
 

Re: Linearni regrese

↑ netix:

===============

vložíme jen dva řádky dat a počet x bude taktéž 2.

Takže první řádek: x1 = -1; x2 = 1; y1 = 1;
Druhý řádek: x3 = 5; x4 = 2; y2 = 10;

Z těchto dat by ten vzorec mel vypočítat tyhle hodnoty: a1 = 1.5; a2 = 0; b = 2.5

================

Ze dvou bodů nemůžeš vygenerovat tři parametry, ale jenom dva.

Ještě jednou připomínám soustavu, kterou už jsem napsal:

$ n\cdot B     +a1\Sigma x1+a2\Sigma x2+a3\Sigma x3 =\Sigma y $
$ B\Sigma x1+a1\Sigma x1^2+a2\Sigma x1x2 +a3\Sigma x1x3 =\Sigma yx1 $
$ B\Sigma x2+a1\Sigma x1x2+a2\Sigma x2^2 +a3\Sigma x2x3 =\Sigma yx2 $
$ B\Sigma x3+a1\Sigma x1x3+a2\Sigma x2x3 +a3\Sigma x3^2 =\Sigma yx3 $

a pro Tvoje první data https://dl.dropboxusercontent.com/u/973 … roblem.png jsem to přeložil do excelu:

http://forum.matweb.cz/upload3/img/2013-06/77368_MNC.png

Samozřejmě, že by to bylo jednodušší maticově, jak píše ↑ halogan:, ale to bys asi neprostřelil. Toto by snad jít mohlo. Nevím, jak jinak bych to už napsal.


Wolfram ani jiný chemický prvek matematiku nenaučí.

Offline

 

#18 23. 06. 2013 11:17

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

↑ martisek:

Tohle možná pomůže..

Offline

 

#19 03. 07. 2013 15:10

netix
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Linearni regrese

Díky, ten poslední příspěvek mi vysvětlil v podstatě všechno co jsem potřeboval vědět.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson