2016-07-21 20 views
0
Phi <- as.matrix(cbind(1, train.data)) # add a column of 1 as phi_0 
train.len <- 75 
eta <- 0.01 # Learning rate 
epsilon <- 0.001 # 
tau.max <- 75 # Maximum number of iterations 

T <- ifelse(train.label == c0, eval(parse(text=c0)),eval(parse(text=c1))) labels 

W <- matrix(,nrow=tau.max, ncol=ncol(Phi)) # Empty Weight vector 
W[1,] <- runif(ncol(Phi)) # Random initial values for weight vector 

error.trace <- matrix(0,nrow=tau.max, ncol=1) # Placeholder for errors 
error.trace[1] <- sum((Phi%*%W[1,])*T<0)/train.len*100 

train.data樣子:矩陣錯誤:要求中的R數字

x1 x2 x3 x4 y 
5.1 3.5 1.4 0.2 C1 
4.7 3.2 1.3 0.2 C1 
35.0 3.6 1.4 0.2 C1 

的問題在最後一行發生。我查了一些其他帖子(Matrix expression causes error "requires numeric/complex matrix/vector arguments"?)。他們說要確保數據是矩陣格式,我也檢查他們都是數字(PhiW)。

我得到的錯誤是

Error in Phi %*% W[1, ] : requires numeric/complex matrix/vector arguments

+0

矩陣乘法期間'train.data'中的'y'列會發生什麼? – Carl

回答

1

我沒有得到任何錯誤,當我產生一些玩具數據:train.data <- rnorm(75)。你的train.data是什麼?數據框?如果是這樣,什麼是sapply(train.data, class)?我懷疑你有因素/字符。在這種情況下,您的矩陣Phi將是一個字符矩陣,而不是數字矩陣。

也許你應該嘗試使用:

Phi <- cbind(1, data.matrix(train.data)) 

閱讀?data.matrix更多。另一種方法是使用:

Phi <- cbind(1, sapply(train.data, as.numeric)) 

更新

你的確有一列y,既不是一個因素或字符列。我上面的解決方案將工作。但是,我不知道你的上下文,所以你應該問問你自己是否有意義,包括y列進行計算。如果你不想要它,請放下它並使用:

Phi <- cbind(1, as.matrix(train.data[,1:4])) 
+0

Doh!這是在凌晨3點做R時發生的情況!我完全忽略了我的Y專欄。是的,下降了,現在都很好。謝謝! – maric