Итак, я проверил, что начальная версия того, что я пытаюсь сделать, работает, но по какой-то причине при помещении ее в функцию высокого порядка Matrix.map она ломается.
Вот неисправная функция:
let SumSquares (theta:Vector<float>) (y:Vector<float>) (trainingData:Matrix<float>) =
let m = trainingData.RowCount
let theta' = theta.ToRowMatrix()
trainingData
|> Matrix.mapRows(fun a r -> (theta' * r) - y.[a] )
Вот несколько примеров тестов
Настраивать:
let tData = matrix [[1.0; 2.0]
[1.0; 3.0]
[1.0; 3.0]
[1.0; 4.0]]
let yVals = vector [5.0; 6.0; 7.0; 11.0]
let theta = vector [1.0; 0.2]
Протестируйте необработанные функциональные возможности базовой операции (тета-транспонирование * вектор - фактический)
let theta' = theta.ToRowMatrix()
(theta.ToRowMatrix() * tData.[0, 0 .. 1]) - yVals.[0]
Тестирование в реальной работе:
tData |> SumSquares theta yVals
Вот копия/вставка фактической ошибки. Это читается так, как будто у меня проблемы с отображением большего вектора на меньший вектор.
Имя параметра: цель
в MathNet.Numerics.LinearAlgebra.Storage.VectorStorage
1.CopyToRow(MatrixStorage
1 цель, Int32 rowIndex, ExistingData, существующие данные)
в FSI_0061.SumSquares(Vector1 theta, Vector
1 y, Matrix`1 trainingData) в C:\projects\deleteme\ASPNet5Test\ConsoleApplication1\ConsoleApplication1\MachineLearning. fsx:строка 23
в .$FSI_0084.main@() в C:\projects\deleteme\ASPNet5Test\ConsoleApplication1\ConsoleApplication1\MachineLearning.fsx:строка 39
Остановлено из-за ошибки
System.ArgumentException: All vectors must have the same dimensionality.
- person s952163   schedule 17.05.2016