【问题标题】:Non-Conformable Arrays when Doing Matrix Multiplication in R在 R 中进行矩阵乘法时的不一致数组
【发布时间】:2016-09-08 02:26:34
【问题描述】:

我正在尝试在 R 中实现内核岭回归。

公式为:

alpha <- ((lambda.I + K)^(-1)) * y

Lambda = 0.1。 I = 与 K 大小相同的单位矩阵。y 是与 K 具有相同行数的特征向量。

所以我在 R 中尝试了这个:

I <- diag(nrow(df_matrix)
lambda <- 0.1
alpha <- (lambda * I + df_matrix) ^ (-1) * df_vector

我收到以下错误

Error in (0.1 * I + df_matrix)^(-1) * df_vector : non-conformable arrays

这是关于我的数据集的一些信息

> nrow(df_matrix)
[1] 8222
> ncol(df_matrix)
[1] 8222
> nrow(df_vector)
[1] 8222
> nrow(I)
[1] 8222
> ncol(I)
[1] 8222
> class(df_matrix)
[1] "matrix"
> class(df_vector)
[1] "matrix"

【问题讨论】:

  • R 中矩阵求逆的语法不是^(-1)。而* 不是 R 中的矩阵乘法。
  • 什么是 ncol(df_vector)?如果您假设它是 8222 或 1,那么代码似乎可以工作

标签: r matrix


【解决方案1】:

我敢打赌,您想在这里进行矩阵求逆,即solve(m),而不是逐元素 (m^(-1))。此外,矩阵乘法 (%*%) 而不是逐元素 (*)。所以,完全是

alpha <- solve(lambda * I + df_matrix) %*% df_vector

【讨论】:

  • 当然,solve(lambda * I + df_matrix, df_vector) 会更明智/高效。
【解决方案2】:

你需要使用矩阵乘法,%*%。此外,您还需要使用solve 来计算倒数,因为将幂次幂减去一只会做元素明智的倒数。例如:

K <- matrix(runif(9),3)
y <- matrix(runif(3),nrow=3)

solve(lambda*diag(nrow(K))+K) %*% y
            [,1]
[1,]  0.50035075
[2,] -0.04985508
[3,]  0.74944867

【讨论】:

    【解决方案3】:

    要转置矩阵,矩阵必须是二次的,并且行列式必须不为零。如果你的矩阵 df_matrix 满足这些要求,那么

    alpha <- solve(lambda * I + df_matrix) %*% df_vector
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2021-01-31
      • 2012-04-01
      • 2023-04-06
      相关资源
      最近更新 更多