Подгонка линейной модели в Scalanlp/Breeze

Я пытаюсь подогнать линейную модель (и получить R^2) к следующим тестовым данным.

0.0   0.0
1.0   1.0
2.0   2.0
3.0   3.1

Я написал следующий код, используя scalanlp/breeze 0.12:

  import breeze.linalg.{DenseMatrix, DenseVector}
  import breeze.stats.regression.leastSquares

  val indep = DenseMatrix((1.0, 0.0), (1.0, 1.0), (1.0, 2.0), (1.0, 3.0))
  val dep = DenseVector(0.0, 1.0, 2.0, 3.1)
  val result = leastSquares(indep, dep)

  println("intercept=" + result.coefficients.data(0))
  println("slope=" + result.coefficients.data(1))
  println("r^2=" + result.rSquared)

вывод:

intercept=-0.020000000000000018
slope=1.03
r^2=0.0014623322596666252

Перехват и наклон разумны, но я не понимаю R-квадрат, он должен быть близок к 1!


person Raphael Roth    schedule 13.07.2016    source источник


Ответы (1)


Ваш вектор единиц должен быть последним, а не первым. Отсюда ожидаемое r^2 = 1-r_e^2.

РЕДАКТИРОВАТЬ: хотя то, что я сказал выше, правильно о переключении вашего вектора 1 с. Я все еще получаю ужасно неправильный r-квадрат, даже используя это. Мой наклон и точка пересечения точны, как и у вас. Итак... к исходному коду!

EDIT2: известная проблема. Не исправлено. пожать плечами

person Robert Beatty    schedule 19.12.2016