Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

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