Mogę zmusić dwa składniki w trójdrożnym regresji liniowej za pozytywny?

głosy
1

Przepraszam, jeśli nie używam odpowiednie warunki mathemathical, ale mam nadzieję, że zrozumiesz, co próbuję osiągnąć.

My problem: m za pomocą regresji liniowej (obecnie metody najmniejszych kwadratów) na wartości z dwóch wektorów X i Y w stosunku do Z wyników. To jest do zrobienia w Matlab, i używam \ -operator przeprowadzić regresję. Mój zestaw danych będzie zawierać kilka tysięcy obserwacji (do około 50000 przy max).

X-wartości będą w zakresie 10-300 (najczęściej od 60 do 100), a na osi rzędnych wartości w zakresie 1-3.

Mój kod wygląda następująco:

X = [ones(size(x,1) x y];
parameters = X\y;

Wyjście „parametry”, następnie trzy współczynniki A0, A1 i A2, które są stosowane w tym wzorze:

a0 * 1 + a1 * xi + a2 * yi = zi

(I na mają być indeksowane)

To działa jak oczekiwano, chociaż chcę oba parametry a1 i a2, aby zawsze być wartości dodatnie, nawet gdy wektor oo jest ujemna (oznacza to, że a0 będzie ujemny, oczywiście), gdyż to właśnie prawdziwa modelka wygląda (z zawsze jest pozytywnie skorelowane z X i z). Jest to możliwe za pomocą metody najmniejszych kwadratów? Jestem również otwarty dla innych algorytmów regresji liniowej.

Utwórz 20/02/2009 o 08:09
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Pozwól mi spróbować i przeformułować w celu wyjaśnienia. Accoring do modelu z jest zawsze pozytywnie skorelowana z xi y. Czasami jednak, gdy rozwiąże regresji liniowej dla współczynnika to daje wartość ujemną.

Jeśli masz rację o danych, powinno to nastąpić tylko wtedy, gdy właściwy współczynnik jest mały, a hałas stanie wziąć to negatywne. można po prostu przypisać go do zera, ale wtedy środki nie byłyby odpowiednio dopasować.

W takim przypadku właściwe rozwiązanie jest jak jpalacek mówi, ale wyjaśniono bardziej szczegółowo tutaj:

  1. Spróbuj i regres przeciwko xi y. Jeśli wziąć zarówno pozytywny wynik.
  2. Jeśli a1 jest ujemna, zakładamy, powinno wynosić zero. Z regresji na rok. Jeśli A2 jest dodatnia następnie a1 zakresie 0 i A0 oraz A2 z tej regresji.
  3. Jeśli a2 jest ujemna, zakładamy, powinno wynosić zero zbyt. Regres oo przeciwko 1, i wziąć to jako A0. Niech a1 i a2 być 0.

To powinno dać ci to, co chcesz.

Odpowiedział 20/02/2009 o 11:40
źródło użytkownik

głosy
1

Prostym rozwiązaniem jest użycie narzędzia przeznaczonego do rozwiązania. Oznacza to, że korzystać lsqlin, z przybornika optymalizacji. Ustawić dolną granicę ograniczenie dla dwóch z trzech parametrów.

Tak więc, przy założeniu, że X, Y i Z wszystkie wektory kolumnowe,

A = [ci (długość (x) 1), X, Y];

LB = [inf, 0, 0];

A = lsqlin (A, Z, [], [], [], [], lb);

Pozwoli to ograniczyć tylko drugi i trzeci nieznanych parametrów.

Bez zestawu narzędzi optymalizacji, użyj lsqnonneg, który jest częścią samego Matlab. Także w tym przypadku rozwiązanie jest dość prosta.

A = [ci (długość (x) 1), X, Y];

A = lsqnonneg (A, Z);

Twój model będzie

z = a (1) + A (2) * x + A (3) * Y

W przypadku (1) jest w przybliżeniu równa zero, to znaczy, jest w tolerancji od zera, a następnie założyć, że pierwszy parametr związany ograniczone przez zero. W takim przypadku rozwiązać drugi problem poprzez zmianę znaku na kolumnie jedynek w A.

A (:, 1) = 1;

A = lsqnonneg (A, Z);

Jeśli to rozwiązanie ma (1) znacząco różna od zera, a następnie drugi roztwór musi być wyższe niż pierwsze. Twój model będzie teraz

z = -a (1) + A (2) * x + A (3) * Y

To kosztuje cię co najwyżej dwoma połączeniami do lsqnonneg, a drugie połączenie jest jedynym w historii jakiś ułamek (brak jakichkolwiek informacji o swoim problemie, szanse są 50% z drugiego naboru) czasu.

Odpowiedział 31/03/2009 o 15:28
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more