Библиотека Ruby для выполнения линейного или нелинейного приближения наименьших квадратов? - PullRequest
8 голосов
/ 25 мая 2011

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 29 апреля 2012

Попробуйте использовать гем '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).
5 голосов
/ 25 мая 2011

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

0 голосов
/ 08 августа 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...