Узнайте, моделирует ли образец данных линейный, полиномиальный, экспоненциальный или логарифмический рост с Ruby?
Есть ли библиотека для ruby, которая помогает мне выяснить, является ли выборка значений x моделью линейного, полиномиального, экспоненциального или логарифмического роста?
лайк:
[1,2,3,4].linear? => true
[1,2,4,8].exponential? => true
он должен поддерживать некоторую нечеткость, то есть, если образец содержит [1,2,2,8,4], линейная зависимость, однако, должна быть распознана.
большое спасибо вам.
1 ответ
Я не знаю, есть ли такой, но достаточно просто написать:
class Array
def linear?
array = self.sort
fuzzy_factor = 0.1 * array[0] # just threw this in as an example fuzzy factor, take your pick.
difference = array[1]-array[0]
!array.each_with_index.reject {|x,i|
i == 0 ||
x < array[i-1] + difference + fuzzy_factor &&
x > array[i-1] + difference - fuzzy_factor }.any?
end
def exponential?
array = self.sort
fuzzy_factor = 0.1 * array[0]
factor = array[1]/array[0]
!array.each_with_index.reject { |x,i| i==0 ||
x <array[i-1]*(factor+fuzzy_factor) &&
x>array[i-1]*(factor-fuzzy_factor)}.any?
end
end
[1,2,3,4].linear?
# true
[1,2,3,5].linear?
#false
[2,4,8,16].exponential?
#true
[2,4,8,16,3].exponential?
#false
РЕДАКТИРОВАТЬ: добавление в нечеткий фактор. Я просто вставил случайный, изменить из-за требований.