R中进行矩阵乘法时的非整数数组

时间:2016-05-12 10:09:55

标签: r matrix

我正在尝试在R中实现Kernel Ridge回归。

公式为:

// assuming second canvas is same dimensions as first one
var secondCanvasId = context.createImageData(canvas.width, canvas.height);
for (var x = 0; x < canvas.width; x++) {
  for (var y = 0; y < canvas.height; y++) {
    var pix = context.getImageData(x, y, 1, 1).data;
    var r = pix[0];
    var g = pix[1];
    var b = pix[2];
    var a = pix[3];
    // set canvas2 (x, y) pixel with this color, if it matches the choosen color
    if (r === color.r && g === color.g && b === color.b && a === color.a) {
      secondCanvasId.data[0] = r;
      secondCanvasId.data[1] = g;
      secondCanvasId.data[2] = b;
      secondCanvasId.data[3] = a;
      context.putImageData(secondCanvasId, x, y);
    }
  }
}

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

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

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

我收到以下错误

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

您需要使用矩阵乘法%*%。此外,您还需要使用solve来计算逆,因为提升到幂只减去一个就会做元素明智的倒数。 e.g:

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

答案 2 :(得分:1)

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

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