An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120505/f2e9a768/attachment.pl>
what is Non-numeric argument to mathematical function in prediction ?
3 messages · Petr Savicky, kiinalist
On Sat, May 05, 2012 at 09:21:10AM +0300, kiinalist wrote:
Hi, I tried to use naivebayes in package 'e1071'. when I use following parameter, only one predictor, there is an error.
> m <- naiveBayes(iris[,1], iris[,5]) > table(predict(m, iris[,1]), iris[,5])
Error in log(sapply(attribs, function(v) { :
Non-numeric argument to mathematical function
However, when I use two predictors, there is not error any more.
> m <- naiveBayes(iris[,1:2], iris[,5]) > table(predict(m, iris[,1:2]), iris[,5])
setosa versicolor virginica
setosa 49 0 0
versicolor 1 37 19
virginica 0 13 31
Hi. A untested suggestion is to try m <- naiveBayes(iris[,1, drop=FALSE], iris[,5]) The difference is that iris[,1] is not a dataframe, while both iris[,1:2] and iris[,1, drop=FALSE] are. Hope this helps. Petr Savicky.
1 day later
Thanks. It does work now.
I also get another problem when I use naivebayes and prediction in myapplication
There was anerror message:
Error in table(predict(nb.obj, test.data[, subset, drop = FALSE]), test.data[, :
all arguments must have the same length
The length of test.data[,subset, drop=FALSE] and test.data[,ncol(expr.matrix)] of are the same. I further checked length ofpredict(nb.obj, test.data[, subset, drop = FALSE]) is 0. I do not know why.
The script is shown below. I also attached test data
evaluator<- function(subset){
# k-fold cross validation
k<- 5
splits<- runif(nrow(expr.matrix))
results<- sapply(1:k, function(i){
test.indx<- (splits>= (i-1)/k)& (splits<i/k)
train.indx<- !test.indx
test.data<- expr.matrix[test.indx, , drop=FALSE]
train.data<- expr.matrix[train.indx, , drop=FALSE]
nb.obj<- naiveBayes(train.data[,subset, drop=FALSE], train.data[,ncol(expr.matrix)])
error.rate<- sum(predict(nb.obj,test.data[,subset, drop=FALSE]) == test.data[,ncol(expr.matrix)])/nrow(test.data)
return (error.rate)
})
print(subset)
print(mean(results))
return(mean(results))
}
subset<- best.first.search(colnames(expr.matrix)[-ncol(expr.matrix)], evaluator)
Br,
Luffy
On 05/05/2012 12:53 PM, Petr Savicky wrote:
On Sat, May 05, 2012 at 09:21:10AM +0300, kiinalist wrote:
Hi, I tried to use naivebayes in package 'e1071'. when I use following parameter, only one predictor, there is an error.
> m<- naiveBayes(iris[,1], iris[,5]) > table(predict(m, iris[,1]), iris[,5])
Error in log(sapply(attribs, function(v) { :
Non-numeric argument to mathematical function
However, when I use two predictors, there is not error any more.
> m<- naiveBayes(iris[,1:2], iris[,5]) > table(predict(m, iris[,1:2]), iris[,5])
setosa versicolor virginica
setosa 49 0 0
versicolor 1 37 19
virginica 0 13 31
Hi. A untested suggestion is to try m<- naiveBayes(iris[,1, drop=FALSE], iris[,5]) The difference is that iris[,1] is not a dataframe, while both iris[,1:2] and iris[,1, drop=FALSE] are. Hope this helps. Petr Savicky.
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.