У меня возникают проблемы с QuadraticMinimizer - каждый раз, когда я его выполняю, я получаю ошибки, которые нечувствительны. Я посмотрел на scaladoc и код, и я просто не уверен, что я делаю неправильно.QuadraticMinimizer всегда возвращает нечувственный ответ
У меня есть следующий код:
val lBounds:DenseVector[Double] = DenseVector(Array(Double.NegativeInfinity, 5.0, 0.1, 50.0, 50.0))
val uBounds:DenseVector[Double] = DenseVector(Array(Double.PositiveInfinity, 500.0, 100.0, 99000.0, 99000.0))
val inputMatrix:DenseMatrix[Double] = breeze.linalg.csvread(file=new java.io.File(getClass.getResource("/input/zip06latlong.csv").toURI), skipLines=1)
val y = inputMatrix(::, 0).toDenseVector
val X = inputMatrix(::, Seq(1,2,3,4,5)).copy.toDenseMatrix
val T = X.toDenseMatrix.t
val gram = (T * X)
val b:Transpose[DenseVector[Double]] = y.t * X
println(gram)
println(b.inner)
breeze.linalg.csvwrite(new java.io.File("grammatrix.csv"), gram)
val minimizer:QuadraticMinimizer = new QuadraticMinimizer(rank(gram), ProjectBox(lBounds,uBounds))
val coeffs = minimizer.minimize(gram, b.inner)
println(coeffs)
вот что грамм выглядит следующим образом:
279.0 628207.0 1461245.0 1024.0 729.5
628207.0 1.569309427E9 3.414471724E9 2449533.0 1755536.5
1461245.0 3.414471724E9 1.2324155401E10 5511816.0 3846583.0
1024.0 2449533.0 5511816.0 3980.0 2786.0
729.5 1755536.5 3846583.0 2786.0 2092.75
и вектор Ь:
2.917264069193999E8, 7.294450468242601E11, 1.585917338779061E12, 1.131888709844E9, 8.260072757806E8
, когда я выполняю код I получить:
DenseVector(-12171.118011368422, -424.79971124882286, -9.565028484748783, 49.3827769217138, 49.536905925364195)
Это указано ниже нижних границ.
Грамм-матрица, которую я использую, может быть вычислена путем ввода столбцов 1: 4 ввода и умножения их на их транспонирование. Я добавлю оригинал к вопросу, хотя это несколько сотен строк для 4 векторов. –
Пожалуйста добавьте только грамматическую матрицу и линейный член. Если у вас есть 5 переменных, грамм будет иметь 5 x 5 матриц (не такой большой). Также линейный член также должен содержать 5 терминов ... Это H и y, которые должны быть отправлены, чтобы свести к минимуму –
. Ваш комментарий говорит мне, в чем проблема, я думаю. Моя грамматическая матрица похожа на 279x279, поэтому, видимо, я строю ее неправильно. –