Запуск функции наименьших средних квадратов в Юлии - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в Джулии, поэтому, пожалуйста, прости меня, если это слишком просто.Я пытаюсь запустить следующий сценарий.

using Pkg
Pkg.add("DataFrames")
using DataFrames

function LS(x,y,a)
    T = size(x,1)
    N = size(x,2)
    pred = fill(0.0,T)
    w= fill(0.0,N)
    for t = 1:T
        x1 = x[t,:]
        pred[t] = transpose(w) * x1
        err = a*(y[t]-pred[t])
        w = w + (err * x1)
    end
    return pred
end

input = readtable("input.csv")
output = readtable("label.csv")
en = convert(Array, input)
out = convert(Array, output)
a = 0.5
prediction = LS(en,out,a)
print(prediction)

При запуске я получаю следующую ошибку:

ОШИБКА: LoadError: MethodError: нет соответствия метода * (:: Array{Float64,1}, :: Array {Union {Missing, Float64}, 1}) Ближайшие кандидаты: * (:: Any, :: Any,! Matched :: Any,! Matched :: Any ...) вoperator.jl: 502 * (! Matched :: LinearAlgebra.Adjoint {# s571, # s570} где # s570 <: Union {DenseArray {T <: Union {Complex {Float32}, Complex {Float64}, Float32, Float64},2}, ReinterpretArray {T <: Union {Complex {Float32}, Complex {Float64}, Float32, Float64}, 2, S, A}, где S, где A <: Union {SubArray {T, N, A, I, true} где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}, ReshapedArray {T <: Union {Complex {Float32}, Complex {Float64}, Float32,Float64}, 2, A, MI}, где MI <: Tuple {Vararg {SignedMultiplicativeInverse {Int64}, N}, где N}, где A <: Union {ReinterpretArray {T, N, S, A}, где S, где A <: Union{SubArray {T, N, A, I, true}, где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N} wздесь A <: DenseArray, где N, где T, DenseArray}, где N, где T, SubArray {T, N, A, I, true}, где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <:DenseArray, где N, где T, DenseArray}, SubArray {T <: Union {Complex {Float32}, Complex {Float64}, Float32, Float64}, 2, A, I, L}, где L, где I <: Tuple {Vararg {Union{Int64, AbstractRange {Int64}, AbstractCartesianIndex}, N}, где N}, где A <: Union {ReinterpretArray {T, N, S, A}, где S, где A <: Union {SubArray {T, N, A, I,true} где I <: Tuple {AbstractUnitRange, Vararg {Any, N} где N}, где A <: DenseArray, где N, где T, DenseArray}, где N, где T, ReshapedArray {T, N, A, MI}, где MI <:Кортеж {Vararg {SignedMultiplicativeInverse {Int64}, N}, где N}, где A <: Union {ReinterpretArray {T, N, S, A}, где S, где A <: Union {SubArray {T, N, A, I, true}где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}, где N, где T, SubArray {T, N, A, I, true}, где I <:Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, гдеT, DenseArray}, где N, где T, DenseArray}}, где # s571, :: Union {DenseArray {S, 1}, ReinterpretArray {S, 1, S, A}, где S, где A <: Union {SubArray {T, N, A, I, true}, где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}, ReshapedArray {S, 1, A, MI}, где MI <: Tuple {Vararg {SignedMultiplicativeInverse {Int64}, N}, где N}, где A <: Union {ReinterpretArray {T, N, S, A}, где S, где A <: Union {SubArray {T, N, A, I, true,} где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}, где N, где T, SubArray {T, N, A, I, true}, где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}, SubArray {S, 1, A, I, L}, где L, где I <: Tuple {Vararg {Union{Int64, AbstractRange {Int64}, AbstractCartesianIndex}, N}, где N}, где A <: Union {ReinterpretArray {T, N, S, A}, где S, где A <: Union {SubArray {T, N, A, I,true} где I <: Tuple {AbstractUnitRange, Vararg {Any, N} где N}, где A <: DenseArray, где N, где T, плотныйArray} где N где T, ReshapedArray {T, N, A, MI}, где MI <: Tuple {Vararg {SignedMultiplicativeInverse {Int64}, N}, где N}, где A <: Union {ReinterpretArray {T, N, S, A} где S, где A <: Union {SubArray {T, N, A, I, true}, где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}где N, где T, SubArray {T, N, A, I, true}, где I <: Tuple {AbstractUnitRange, Vararg {Any, N}, где N}, где A <: DenseArray, где N, где T, DenseArray}, где N, где T, DenseArray}}) где {T <: Union {Complex {Float32}, Complex {Float64}, Float32, Float64}, S} в / Users / osx / buildbot / slave / package_osx64 / build / usr / share / julia / stdlib/v1.0/LinearAlgebra/src/matmul.jl:98* (! Matched :: LinearAlgebra.Adjoint {# s571, # s570} где # s570 <: LinearAlgebra.AbstractTriangular где # s571, :: AbstractArray {T, 1} где T) в каталоге / Users / osx / buildbot / slave / package_osx64/build/usr/share/julia/stdlib/v1.0/LinearAlgebra/src/triangular.jl:1805 ... </p>

Stacktrace: 2 LS (:: Array {Union {Отсутствует, Float64}, 2}, :: Array {Union {Missing, Float64}, 2}, :: Float64) в /Users/wj/Desktop/Julia/NLSR.jl:16

2 область верхнего уровня в none: 0

[3] include at ./boot.jl:317 [встроенный]

[4] include_relative (:: Module, ::String) at ./loading.jl:1044

[5] include (:: Module, :: String) в ./sysimg.jl:29

[6] exec_options (::Base.JLOptions) в ./client.jl:231

[7] _start () в ./client.jl:425

Как мне успешно запустить этот скрипт?

Примечание: Псевдокод алгоритма имеет вид следует enter image description here:

Скрипт обновлен после комментарияУоррен

Код работает сейчас!

1 Ответ

0 голосов
/ 29 ноября 2018

Я не уверен, что вы пытаетесь сделать здесь, но для меня это не похоже на наименьшие квадраты.

Сказав это, проблема в вашем сценарии заключается в этой строке здесь:

w = w + (err * x1)

x1 и err оба будут векторами, и для двух векторов метод оператора умножения отсутствует.Например, rand(2) * rand(2) также приведет к ошибке.Это связано с тем, что использование * в этой ситуации неоднозначно.

Если вы хотите получить точечный продукт, используйте dot(x1, err).

Если вы хотите поэлементный продукт, используйте x1 .* err, который передает * по элементам входных данных.

Есть несколько других проблем с вашим кодом, но я не решаюсь их исправить, поскольку, как уже говорилось, я не оченьуверен, что вы пытаетесь сделать.

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