在Julia中运行最小均方函数

在Julia中运行最小均方函数,julia,least-squares,Julia,Least Squares,我是朱莉娅的新手,所以如果这太简单,请原谅我。我正在尝试运行以下脚本 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) *

我是朱莉娅的新手,所以如果这太简单,请原谅我。我正在尝试运行以下脚本

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:没有方法匹配 *(::数组{Float64,1},::数组{Union{Missing,Float64},1})最近的候选对象是:*(::Any,::Any,!Matched::Any,!Matched::Any…) operators.jl:502*(!Matched::LinearAlgebra.Adjoint{s571,{s570}
where#s570我不确定你想在这里做什么,但我觉得它一点也不像最小二乘法

话虽如此,您的脚本中的问题在这一行:

w = w + (err * x1)
x1
err
都是向量,两个向量没有乘法运算符方法。例如,
rand(2)*rand(2)
也会出错。这是因为在这种情况下,
*
的用法不明确

如果需要点积,请使用
dot(x1,err)

如果您想要元素式产品,请使用
x1.*err
,它跨输入元素广播
*


你的代码还有其他几个问题,但我不敢尝试纠正它们,因为,如上所述,我不确定你想做什么。

这是最小均方/在线GD和y[t,:]和pred[t,:]都是float64/double not向量。@Jamil,y[t,:]和pred[t,:]都是数组{float64,1}.pred是一个二维数组,其中的一个片段是一个一维数组。如果pred最初被认为是一个一维数组,那么它可以用
fill(0.0,T)