Quantcast

what is Non-numeric argument to mathematical function in prediction ?

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

what is Non-numeric argument to mathematical function in prediction ?

kiinalist
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

Do you know what is the problem?

Br,
Luffy

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: what is Non-numeric argument to mathematical function in prediction ?

Petr Savicky
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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: what is Non-numeric argument to mathematical function in prediction ?

kiinalist
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.
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Loading...