在 Julia 中运行最小均方函数

Posted

技术标签:

【中文标题】在 Julia 中运行最小均方函数【英文标题】:Running Least Mean Squares Function in Julia 【发布时间】:2019-05-01 00:53:03 【问题描述】:

我是 Julia 的新手,所以如果这太基本了,请原谅我。我正在尝试运行以下脚本。

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:没有方法匹配 *(::ArrayFloat64,1, ::ArrayUnionMissing, Float64,1) 最接近的候选者是:*(::Any, ::Any, !Matched::Any, !Matched::Any ...) 在 运算符.jl:502 *(!Matched::LinearAlgebra.Adjoint#s571,#s570 其中#s570<:union complex float32 float64 s a i where n t densearray reshapearray mi subarray l abstractrange abstractcartesianindex ::union ::abstractarray at ...>

堆栈跟踪:2 LS(::ArrayUnionMissing, Float64,2, ::ArrayUnionMissing, Float64,2, ::Float64) 在 /Users/wj/Desktop/Julia/NLSR.jl:16

2 ***范围无:0

[3] 包含在 ./boot.jl:317 [内联]

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

[5] 在./sysimg.jl:29 中包含(::Module, ::String)

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

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

我怎样才能成功运行这个脚本?

备注: 算法伪代码为follows:

在 Warren 发表评论后更新脚本

代码现在可以工作了!

【问题讨论】:

【参考方案1】:

我不确定你想在这里做什么,但对我来说它看起来不像最小二乘法。

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

w = w + (err * x1)

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

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

如果您想要逐元素产品,请使用x1 .* err,它会在输入的元素之间广播*

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

【讨论】:

这是最小均方/在线 GD 和 y[t,:] 和 pred[t,:] 都是 float64/double 不是向量。 @Jamil, y[t,:] 和 pred[t,:] 属于 ArrayFloat64,1 类型。 pred 是一个二维数组,它的一部分是一维数组。如果 pred 一开始就应该是一维数组,则可以使用 fill(0.0,T) 构造它

以上是关于在 Julia 中运行最小均方函数的主要内容,如果未能解决你的问题,请参考以下文章

怎么用MATLAB计算均方误差啊

在 Julia 中最小化具有多个参数的函数

什么是最小均方(LMS)算法

如果从命令行运行 Julia 脚本,是不是每次都需要重新编译?

说说最小均方误差(MMSE)

如何使用Optim最小化Julia中的多元成本函数?