在 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)
x1
和err
都将是向量,并且没有两个向量的乘法运算符方法。例如,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 中运行最小均方函数的主要内容,如果未能解决你的问题,请参考以下文章