2013-05-12 16 views
10

Istnieje wiele narzędzi do dopasowywania krzywych i interpolacji, takich jak polyfit (lub nawet ten miły zestaw narzędzi do logfitu znalazłem here), ale nie mogę znaleźć niczego, co pasowałoby do funkcji sigmoid do moich danych x-y.Dopasowanie sigmoid do danych

Czy takie narzędzie istnieje, czy muszę zrobić własne?

Odpowiedz

13

Jeśli masz zainstalowany Statystyki Toolbox, można użyć nonlinear regression z nlinfit:

sigfunc = @(A, x)(A(1) ./ (A(2) + exp(-x))); 
A0 = ones(size(A)); %// Initial values fed into the iterative algorithm 
A_fit = nlinfit(x, y, sigfunc, A0); 

Tutaj sigfunc jest tylko przykładem dla funkcji esicy i A jest wektorem współczynników dopasowania.

+1

Znalazłem następujący sigfunc aby być bardziej użytecznym 'sigfunc = @ (A, x) (A (1) ./ (1 + exp (-A (2) * x));' – ohnoplus

+0

@ user92519 Bez problemu , Podałem to tylko jako przykład. –

+0

Witam. Co rozumiesz przez "wektor współczynników dopasowania"? –

1

Proponuję użyć MATLAB-a Global Optimization Toolbox, aw szczególności Genetic Algorithm Solver, którego możesz użyć do swojego problemu poprzez optymalizację (= znalezienie najlepszego dopasowania do danych) parametrów funkcji sigmoidowej za pomocą algorytmu genetycznego. Ma GUI, który jest łatwy w użyciu.

Genetic Algorithm Solver „s GUI, które można wywołać za pomocą gatool: enter image description here

9

nlinfit, a zwłaszcza gatool, są duże młoty do tego problemu. Sigmoid nie jest określoną funkcją. Najczęściej przyjmuje się, że jest taka sama jak funkcji logistycznej (również często najbardziej skuteczne, aby obliczyć):

y = 1./(1+exp(-x)); 

lub uogólniony logistycznych. Ale wszystkie rodzaje krzywych mogą mieć sigmoidal shapes. Jeśli wiesz, czy twoje dane odpowiadają jednemu w szczególności, dopasowanie może być ulepszone i można zastosować bardziej wydajne metody. Na przykład error function (erf) ma sigmoidalny kształt i pojawia się w CDF z normal distribution. Jeśli wiesz, że twoje dane są wynikiem procesu Gaussa (tzn. Dane to CDF) i masz przybornik ze statystykami, możesz użyć funkcji normfit. Ta funkcja jest oparta na maximum likelihood estimation (MLE). Jeśli będziesz musiał napisać niestandardową funkcję dopasowania - powiedzmy, ze względu na wydajność - zbadam techniki MLE dla konkretnej postaci sigmoidy, którą chcesz dopasować.

Powiązane problemy