2016-05-12 50 views
1

我試圖實現內核嶺迴歸在R.非一致的數組中的R

的公式做矩陣乘法時是:

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

LAMBDA = 0.1。 I =單位矩陣的尺寸K.ý相同的是,具有相同的行數爲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" 
+1

反轉R中矩陣的語法不是「^( - 1)」。並且'*'不是R中的矩陣乘法。 – Roland

+0

什麼是ncol(df_vector)?如果你認爲它是8222或1,代碼似乎工作 – vasanthcullen

回答

5

我敢打賭,你想在這裏有矩陣求逆,whic h是solve(m),而不是元素明智的(m^(-1))。此外,矩陣乘法(%*%)而不是元素明智的(*)。因此,總共是

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

當然,解決(lambda * I + df_matrix,df_vector)'會更明智/更高效。 – Roland

1

您需要使用矩陣乘法%*%。此外,您還需要使用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 
1

爲了轉置矩陣,矩陣必須是二次的,並且行列式必須不同於零。如果矩陣df_matrix滿足這些要求,則

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