【问题标题】:Julia Linear RegressionJulia 线性回归
【发布时间】:2015-03-15 01:41:45
【问题描述】:

我试图在 Julia 中拟合线性回归。 我有一个包含 10 列的数据框。前 9 列是预测变量 我称之为 X,最后一列是我称之为 Y 的响应变量

我输入了linreg(X, Y) 但我收到一条错误消息说 linreg 没有匹配 DataFrame 和 DataArray Float 的方法。

我想知道如何解决这个问题。 我正在考虑将 X 转换为数据数组

我试过convert(X, Array) 但这也引发了错误: '转换没有匹配转换的方法' 有没有人有什么建议

【问题讨论】:

  • 我只标记了 R 和 python,因为使用 R 和 Python 的人通常熟悉线性回归。所以我认为他们可以提供一些有用的建议。

标签: julia


【解决方案1】:

如果您已经将数据保存在 DataFrame 中,您应该查看 GLM.jl 包。

特别是lm 函数应该做你想做的事情,如果你是一个 R 用户,你会感觉非常熟悉。

如果您发布更多代码(也许您的DataFrame 中的哪些列存储XY)我们可以进一步帮助您。

【讨论】:

    【解决方案2】:

    更新:在对数组执行标量加法时,必须在 Julia 1.0 中使用 dot 运算符。即y = m*x .+ b

    您还可以使用简单的线性代数进行线性回归。 这是一个例子:

    # Linear Algebra style
    # For single linear regresion y= mx .+ b
    m = 3.3; b = 2; x = rand(100,1)
    y = m * x .+ b
    # add noise
    yn= y + randn(size(y)) * 0.5
    
    # regression
    X = zeros(100,2); X[:,1] = x;  X[:,2] = 1.0
    coeff_pred = X\yn
    
    slope =  round(coeff_pred[1], 2)
    intercept = round(coeff_pred[2], 2)
    
    println("The real slope is $m, and the predicted slope is $slope")
    println("The real intercept is $b, and the predicted slope is $intercept")
    

    【讨论】:

    • 这似乎是线性回归的慢版本,我们不能写一个快的和定制的吗?
    【解决方案3】:

    您只是使用了convert 错误。正确的语法是convert(T, x),其内容为:将x 转换为T 类型的值。

    所以基本上你需要这样做:

    linreg(convert(Array,X),convert(Array,Y))
    

    它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2023-04-09
      • 2012-10-28
      • 2018-07-31
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多