Библиотека Ruby для выполнения линейной или нелинейной аппроксимации наименьших квадратов?

Есть ли библиотека Ruby, которая позволяет мне выполнять линейную или нелинейную аппроксимацию набора данных методом наименьших квадратов.

Я хотел бы сделать следующее:

  • Учитывая ряд точек данных [x, y]
  • Создайте линейное или нелинейное приближение методом наименьших квадратов к этим данным
  • Библиотеке не нужно выяснять, нужна ли ей линейная или нелинейная аппроксимация. Вызывающий библиотеку должен знать, какой тип регрессии ему нужен.

Я бы предпочел не пытаться портировать какую-то библиотеку C/C++/Java, чтобы получить эту функциональность, поэтому я надеюсь, что есть какая-то существующая библиотека Ruby, которую я могу использовать.


person Peter C    schedule 25.05.2011    source источник
comment
Вы пробовали читать stackoverflow.com/questions/703717/anything -like-scipy-in-ruby и stackoverflow.com/questions/5416655/ruby-mathematic-gem и stackoverflow.com/questions/4775013/ ?   -  person Andrew Grimm    schedule 25.05.2011
comment
Я сделал и прочитал эти библиотеки, и только библиотека linalg подразумевает, что она может приблизительно выполнять метод наименьших квадратов, но когда я копался в исходном коде, я не мог найти реализацию.   -  person Peter C    schedule 25.05.2011
comment
Возможно, было бы неплохо упомянуть об этом в вашем вопросе.   -  person Andrew Grimm    schedule 26.05.2011


Ответы (3)


Попробуйте использовать гем «statsample». Вы можете выполнить логарифмическое, экспоненциальное, степенное или любое другое преобразование, используя приведенный ниже пример. Надеюсь, это поможет.

require 'statsample'

# Independent Variable
x_data = [Math.exp(1), Math.exp(2), Math.exp(3), Math.exp(4), Math.exp(5)]

# Dependent Variable
y_data = [3, 5, 7, 9, 11]

# Logarithmic Transformation of X data 
# Math.log in Ruby has the base of Euler's number 'e' ~= '2.71828', 
# instead of the base '10'. Just a note.
log_x_data = x_data.map { |x| Math.log(x) }

# Linear Regression using the Logarithmic Transformation
x_vector=log_x_data.to_vector(:scale)
y_vector=y_data.to_vector(:scale)
ds={'x'=>x_vector,'y'=>y_vector}.to_dataset
mlr=Statsample::Regression.multiple(ds,'y')
mlr.summary

# Provides the value of the y-intercept 
#p mlr.constant

# Lists the coefficients of each casual variable. In this case, we have only one--'x'.
#p mlr.coeffs

# The regression output produces the line y = 1 + 2*x, but 
# considering that we transformed x earlier, it really produces
# y = 1 + 2*ln(x).
person dpott197    schedule 29.04.2012

Я использовал этот фрагмент, чтобы проработать некоторые регрессии. Первый параметр — это массив, содержащий координаты x, второй — массив, содержащий координаты y, а последний — степень искомого многочлена. Не уверен, что это то, что вы ищете, но надеюсь, что это поможет.

person Serabe    schedule 25.05.2011

Я поддерживаю библиотеку C для минимизации нелинейного метода наименьших квадратов, http://apps.jcns.fz-juelich.de/lmfit, который поставляется с файлами swig для Ruby.

person Joachim W    schedule 08.08.2013