Определить, является ли набор данных линейной или логарифмической функцией? - PullRequest
5 голосов
/ 24 августа 2011

У меня есть набор точек данных, и мне любопытно, представляют ли данные линейную функцию или логарифмическую функцию.

Набор данных является двухмерным.

Скажем, идеальный наборТочки данных следовали за функцией f (x) = x.Если бы я нанес на график точку данных, я мог бы сказать, что она линейная.

Точно так же, если точки данных следовали бы за функцией f (x) = log (x), я мог бы визуально сказать, что она логарифмическая.,

С другой стороны, программа определяет, является ли набор данных линейным или логарифмическим нетривиальным.Как бы я подошел к этому?

1 Ответ

9 голосов
/ 24 августа 2011

Один из вариантов - сделать линейную регрессию для набора данных, чтобы получить наиболее подходящую линию. Если данные линейные, вы получите очень хорошее соответствие, и средняя ошибка должна быть низкой. В противном случае вы получите хорошую посадку и разумную ошибку.

В качестве альтернативы, вы можете рассмотреть преобразование набора данных путем преобразования каждой точки (x 0 , x 1 , ..., x n , y) до (x 0 , x 1 , ..., x n , e y ). Если данные были линейными, теперь они будут экспоненциальными, а если данные были логарифмическими, то теперь они будут линейными. Выполнение линейной регрессии и получение среднеквадратичной ошибки теперь будут иметь низкую ошибку для логарифмических данных и потрясающе огромную ошибку для линейных данных, поскольку экспоненциальная функция взрывается очень быстро.

Чтобы на самом деле реализовать регрессию, можно было бы использовать регрессию наименьших квадратов . Это даст дополнительное преимущество, заключающееся в том, что в дополнение к модели вы получите коэффициент корреляции, который также можно использовать для различения двух наборов данных.

Поскольку вы спрашивали, как это сделать в Java, быстрый поиск в Google показал этот код Java , чтобы выполнить линейную регрессию. Тем не менее, вы можете лучше подходить к языку, подобному Matlab, который специально оптимизирован для выполнения подобных запросов. Например, в Matlab вы можете сделать эту регрессию в одной строке кода, написав

linearFunction = inputs / outputs

Надеюсь, это поможет!

...