/ / Ustal, czy zbiór danych pochodzi z funkcji liniowej czy logarytmicznej? - algorytm, matematyka, statystyka, analiza danych

Określić, czy zbiór danych pochodzi z funkcji liniowej czy logarytmicznej? - algorytm, matematyka, statystyka, analiza danych

Mam zestaw punktów danych i jestem ciekawy, czy dane reprezentują funkcję liniową lub funkcję logarytmiczną.

Zestaw danych jest dwuwymiarowy.

Powiedzmy, że idealny zbiór punktów danych następował po funkcji f (x) = x. Gdybym wyznaczył punkt danych, byłbym w stanie powiedzieć, że jest liniowy.

Podobnie, jeśli punkty danych następowałyby po funkcji f (x) = log (x), byłbym w stanie wizualnie powiedzieć, że jest logarytmiczna.

Z drugiej strony, posiadanie programu określa, czy zestaw danych jest liniowy czy logarytmiczny, jest nietrywialny. Jak mam się do tego zbliżyć?

Odpowiedzi:

9 dla odpowiedzi № 1

Jedną z opcji byłoby zrobienie regresja liniowa na zestawie danych, aby uzyskać linię najlepszego dopasowania. Jeśli dane są liniowe, dostaniesz bardzo dobre dopasowanie i błąd średniokwadratowy powinien być niski. W przeciwnym razie uzyskasz odpowiednie dopasowanie i uzasadniony błąd.

Alternatywnie można rozważyć przekształcenie zestawu danych przez konwersję każdego punktu (x0, x1, ..., xn, y) do (x0, x1, ..., xn, ey). Jeśli dane byłyby liniowe, teraz będą miały charakter wykładniczy, a jeśli dane były logarytmiczne, teraz będą liniowe. Uruchomienie regresji liniowej i uzyskanie błędu średniego kwadratu będzie teraz miało niski błąd dla danych logarytmicznych i ogromnie duży błąd dla danych liniowych, ponieważ funkcja wykładnicza bardzo szybko wysadza się w powietrze.

Aby faktycznie zaimplementować regresję, jedną z opcji byłoby użycie a regresja metodą najmniejszych kwadratów. Dodatkową korzyścią byłoby dodanie współczynnika korelacji oprócz modelu, który można również wykorzystać do rozróżnienia między dwoma zestawami danych.

Ponieważ zapytałeś, jak to zrobić w Javie, pojawiło się szybkie wyszukiwanie w Google ten kod Java zrobić regresję liniową. Jednak możesz lepiej dopasować się do takiego języka jak Matlab, który jest specjalnie zoptymalizowany do wykonywania tego rodzaju zapytań. Na przykład w Matlab możesz zrobić tę regresję w jednym wierszu kodu, pisząc

linearFunction = inputs / outputs

Mam nadzieję że to pomoże!