2016-05-12 7 views
1

I Kernel Ridge Regression in R.Nicht Conformable Arrays, wenn in R Matrixmultiplikation Doing

Die Formel umzusetzen versuche ist:

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

Lambda = 0,1. I = Einheitsmatrix die gleiche Größe wie K. y ist ein Merkmalsvektor, der die gleiche Anzahl von Zeilen wie K. hat

Also habe ich versucht, dies in R:

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

bekomme ich folgende Fehler

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

hier einige Informationen über meine Dataset

> 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

Die Syntax zum Invertieren einer Matrix in R ist nicht "^ (- 1)". Und '*' ist keine Matrixmultiplikation in R. – Roland

+0

Was ist ncol (df_vector)? Wenn Sie davon ausgehen, dass es 8222 oder 1 ist, scheint der Code zu funktionieren – vasanthcullen

Antwort

5

ich wette, Sie hier Matrixinvertierung haben wollen, whic h ist solve(m), statt elementweise (m^(-1)). Auch Matrixmultiplikation (%*%) statt elementweise (*). Also, insgesamt ist

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

Und natürlich, 'lösen (Lambda * I + df_matrix, df_vector)' wäre sinnvoller/effizienter. – Roland

1

Sie müssen Matrix Multiplikation, %*% verwenden. Darüber hinaus müssen Sie auch solve verwenden, um Inversen zu berechnen, wenn Sie auf die Leistung minus eine erhöhen, wird nur element weise Reziproken tun. z.B .:

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

eine Matrix transponieren, hat die Matrix quadratisch und die Determinante Null verschieden sein sein. Wenn Ihre Matrix df_matrix diese Anforderungen erfüllt, dann

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