All Downloads are FREE. Search and download functionalities are using the official Maven repository.

epic.framework.StandardExpectedCounts.scala Maven / Gradle / Ivy

The newest version!
package epic.framework

import breeze.linalg.{scaleAdd, DenseVector, axpy}
import breeze.util.Index
import breeze.features.FeatureVector
import breeze.generic.UFunc.InPlaceImpl3

/**
 * This is a standard expected counts class that most models will use...
 * Loss is the log-loss (or, whatever), and counts are for the derivative
 * @param loss
 * @param counts
 */
case class StandardExpectedCounts[F](var loss: Double,
                                  counts: DenseVector[Double],
                                  index: Index[F]) extends ExpectedCounts[StandardExpectedCounts[F]] {

  def length = index.size

  def toObjective: (Double, DenseVector[Double]) = loss -> counts

  def +=(that: StandardExpectedCounts[F]): StandardExpectedCounts[F] = {
    this.loss += that.loss; this.counts += that.counts; this
  }

  def -=(that: StandardExpectedCounts[F]): StandardExpectedCounts[F] = {
    this.loss -= that.loss; this.counts -= that.counts; this
  }

  def *=(scale: Double) = {
    loss *= scale
    counts *= scale
    this
  }

  def apply(f: F) = counts(index(f))
}

object StandardExpectedCounts {
  def zero[F](index: Index[F]) = StandardExpectedCounts(0.0, DenseVector.zeros(index.size), index)

  trait Model[D] extends epic.framework.Model[D] {
    type ExpectedCounts = StandardExpectedCounts[Feature]

    def emptyCounts = zero(this.featureIndex)

    def expectedCountsToObjective(ecounts: ExpectedCounts): (Double, DenseVector[Double]) = {
      ecounts.loss -> ecounts.counts
    }
  }

  implicit def scaleAddCounts[T]: InPlaceImpl3[scaleAdd.type, StandardExpectedCounts[T], Double, FeatureVector]  = new scaleAdd.InPlaceImpl3[StandardExpectedCounts[T], Double, FeatureVector] {
    override def apply(v: StandardExpectedCounts[T], v2: Double, v3: FeatureVector): Unit = {
      axpy(v2, v3, v.counts)
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy