java.lang.UnsupportedOperationException: Empty .max

78 views
Skip to first unread message

Andrew Cropper

unread,
Apr 1, 2012, 12:15:57 PM4/1/12
to scal...@googlegroups.com
Can anyone help me with this exception:

scala>       val r = classifier.classify(ys(0).features)
java.lang.UnsupportedOperationException: Empty .max
at scalala.tensor.TensorLike$class.argmax(Tensor.scala:354)
at scalala.tensor.mutable.Counter$Impl.argmax(Counter.scala:52)
at scalanlp.classify.Classifier$class.classify(Classifier.scala:34)
at scalanlp.classify.LinearClassifier.classify(LinearClassifier.scala:45)

To give context, I am trying to classify into two classes, 1 and 0.  The features are three doubles.  Here is an example:  

Example { ids =, label = 0, features =  0.137787
 0.00000
 0.00000}

This is an extract of the output when I train the svm:

scala>     val classifier = svm.train(xs)
(INFO) (SVM.scala:98) rate: 10.0
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 0 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 5.0
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 1 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 3.333333333333333
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 2 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 2.5
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 3 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 2.0
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 4 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 1.6666666666666665
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 5 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 1.4285714285714284
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 6 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 1.25
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 7 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 1.1111111111111112
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 8 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 1.0
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 9 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.9090909090909091
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 10 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.8333333333333333
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 11 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.7692307692307692
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 12 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.7142857142857142
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 13 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.6666666666666666
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 14 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.625
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 15 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.588235294117647
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 16 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.5555555555555556
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 17 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.5263157894736842
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 18 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.5
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 19 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.47619047619047616
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 20 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.45454545454545453
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 21 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.4347826086956521
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 22 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.41666666666666663
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 23 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.4
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 24 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.3846153846153846
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 25 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.37037037037037035
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 26 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.3571428571428571
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 27 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.3448275862068965
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 28 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.3333333333333333
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 29 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.3225806451612903
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 30 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.3125
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 31 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.303030303030303
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 32 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.2941176470588235
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 33 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.2857142857142857
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 34 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.2777777777777778
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 35 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.27027027027027023
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 36 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.2631578947368421
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 37 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.2564102564102564
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 38 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.25
(INFO) (SVM.scala:99) subset size: 0
(INFO) (SVM.scala:111) iter: 39 0.0
(INFO) (SVM.scala:122) Post loss: 0.0
(INFO) (SVM.scala:98) rate: 0.2439024390243902
(INFO) (SVM.scala:99) subset size: 0


It is this code in Tensor.scala that is throwing the exception:

 /** Returns a key associated with the largest value in the tensor. */
  def argmax : K = {
    if (!pairsIterator.hasNext) {
      throw new UnsupportedOperationException("Empty .max");
    }
    var (arg,max) = pairsIterator.next;
    foreachPair((k,v) => if (scalar.>(v, max)) { max = v; arg = k; });
    arg;
  }


Anyone have any ideas?



David Hall

unread,
Apr 1, 2012, 7:31:09 PM4/1/12
to scal...@googlegroups.com
Sorry about letting this languish in moderation for several hours...

Um, I've seen this when I was first writing the classifiers, but I
thought I had code to prevent it. Could you send me a dataset that
reproduces the issue and I'll get it fixed this evening? You could
also try SMO in the meantime, if your dataset isn't huge.

-- David

> --
> You received this message because you are subscribed to the Google Groups
> "ScalaNLP" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/scalanlp/-/dcriqQsMvbgJ.
> To post to this group, send email to scal...@googlegroups.com.
> To unsubscribe from this group, send email to
> scalanlp+u...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/scalanlp?hl=en.

Reply all
Reply to author
Forward
0 new messages