【问题标题】:Julia - linear regression - ERROR: DimensionMismatchJulia - 线性回归 - 错误:DimensionMismatch
【发布时间】:2019-07-01 05:27:46
【问题描述】:

我希望在 Julia 中进行线性回归,但出现错误: DimensionMismatch("X 列的列长 3000,与 Y 列的列长 1000 不兼容")

julia> x=rand(1000,3);

julia> x[:,1]=x[:,1] .+ 1;

julia> y = rand(1000,1) .+ 3;

julia> size(x)
(1000, 3)

julia> size(y)
(1000, 1)

julia> ols = lm(@formula(Y ~ X), DataFrame(X = x, Y = y))
ERROR: DimensionMismatch("column length 3000 for column(s) X, and is incompatible with column length 1000 for column(s) Y")
Stacktrace:
 [1] (::getfield(DataFrames, Symbol("##DataFrame#83#86")))(::Bool, ::Type, ::Array{Any,1}, ::DataFrames.Index) at /Users/henry/.julia/packages/DataFrames/CZrca/src/dataframe/dataframe.jl:118
 [2] Type at ./none:0 [inlined]
 [3] #DataFrame#94(::Base.Iterators.Pairs{Symbol,Array{Float64,2},Tuple{Symbol,Symbol},NamedTuple{(:X, :Y),Tuple{Array{Float64,2},Array{Float64,2}}}}, ::Type) at /Users/henry/.julia/packages/DataFrames/CZrca/src/dataframe/dataframe.jl:174
 [4] (::getfield(Core, Symbol("#kw#Type")))(::NamedTuple{(:X, :Y),Tuple{Array{Float64,2},Array{Float64,2}}}, ::Type{DataFrame}) at ./none:0
 [5] top-level scope at none:0

有人可以帮忙吗?

【问题讨论】:

  • 您需要使xy 的大小相同。所以它们的大小应该是(1000, 3)(1000,1)
  • @philoez98 它们的尺寸相同:我显示上面的尺寸。
  • 他们不是,(1000,3) 不等于 (1000,1),这就是你得到错误的原因。

标签: dataframe julia


【解决方案1】:

你的问题是当你写的时候:

DataFrame(X = x, Y = y)

您正在尝试将Matrix 设置为DataFrame 的列。这是不允许的。您只能将向量添加为数据框的列。所以这将工作例如

DataFrame([x y], [:x1, :x2, :x3, :y])

因此,您可以在原始代码中编写例如:

lm(@formula(y ~ x1+x2+x3), DataFrame([x y], [:x1, :x2, :x3, :y]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2017-10-13
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    相关资源
    最近更新 更多