我对使用Julia进行数据分析非常陌生。如果我要问些琐碎的事,请忍受。我有一个二维数组X
,显示为
6-element Array{Array{T,1} where T,1}:
[0.962, 0.282, 0.19, 0.533, 2.032, 2.482, 0.863, 1.24, 0.819, 0.927 … 2.161, 0.967, 0.809, 1.22, 1.3, 1.307, 0.945, 1.02, 0.519, 0.837]
[11.0, 8.5625, 6.65, 6.68, 17.0, 11.75, 8.5625, 6.65, 7.54, 8.0 … 6.315, 5.661, 6.189, 6.455, 7.297, 6.7, 7.3, 6.475, 65.601, 6.506]
[59, 59, 59, 61, 52, 59, 61, 60, 66, 68 … 2, 2, 4, 1, 3, 2, 2, 4, 2, 0]
[1, 1, 0, -1, 1, 1, -1, 0, 0, 1 … 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[115.725, -1.0, 111.515, -1.0, 119.467, 111.515, 110.111, 115.725, -1.0, -1.0 … 12.933, 12.933, 12.933, 12.933, 12.933, 12.933, 12.933, 12.933, 12.933, 12.933]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0 … 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我的Y表示为
365-element Array{Union{Missing, Float64},1}:
1.33
1.1995
1.029
1.15
3.15
4.0
1.725
1.845
1.445
1.8
1.525
1.17
1.32
⋮
1.32
1.7495
1.9045
1.6999
1.45
1.98
2.08
1.6199
1.36188
1.55
1.28
1.35
现在,如果我尝试将其传递给sklearn线性模型,则会给我一个错误
ValueError('Found input variables with inconsistent numbers of samples: [6, 365]',)
搜索该错误表明它可能是重塑问题。建议转置可以正常工作。
尝试transpose(X)
时,错误就像
Element type mismatch. Tried to create a `Transpose{LinearAlgebra.Transpose}` from an object with eltype `Array{T,1} where T`, but the element type of the transpose of an object with eltype `Array{T,1} where T` must be `LinearAlgebra.Transpose{_1,_2} where _2 where _1`
我什至尝试了GLM软件包,但存在一些荒谬的错误
MethodError: no method matching fit(::Type{LinearModel}, ::Array{Array{T,1} where T,1}, ::Array{Union{Missing, Float64},1}, ::Bool)
但是我将得到如图所示的X和Y,我如何才能成功拟合其回归呢?任何帮助表示赞赏。预先感谢。
答案 0 :(得分:3)
您的X
不是 2D数组或Matrix
。就像类型所说的,它是Array{Array{T,1} where T,1}
,在其他语言中,它称为“锯齿状数组”。要将其转换为Matrix
,有multiple options,但最短的方法是使用hcat
并进行拼写:
hcat(X...)
尽管应该尽可能避免喷溅大型阵列。尝试将X
构造为矩阵。
除此之外,只需在Julia中进行线性回归就可以了
hcat(X...) \ Y
没有任何外部库。
根据@Milan的评论,reduce(hcat, X)
也很短,并且通过节省编译时间会更快。