spark:逻辑回归

来源:互联网 发布:网络教学的弊端 编辑:程序博客网 时间:2024/05/12 04:43
import breeze.linalg.{Vector, DenseVector}import scala.util.Random/**  * Created by fhqplzj on 16-7-16 at 下午5:16.  */object LogisticRegression {  val N = 10000  val D = 10  val R = 0.7  val ITERATIONS = 5  val rand = new Random(System.nanoTime())  case class DataPoint(x: Vector[Double], y: Double)  def generateData = {    def generatePoint(i: Int) = {      val y = if (i % 2 == 0) -1 else 1      val x = DenseVector.fill(D)(rand.nextGaussian() + y * R)      DataPoint(x, y)    }    Array.tabulate(N)(generatePoint)  }  def main(args: Array[String]) {    val data = generateData    val w = DenseVector.fill(D)(2 * rand.nextDouble() - 1)    println("Initial w=" + w)    for (i <- 1 to ITERATIONS) {      println(s"On iteration ${i}")      val gradient = DenseVector.zeros[Double](D)      for (p <- data) {        val scale = (1 / (1 + math.exp(-p.y * w.dot(p.x))) - 1) * p.y        gradient += scale * p.x      }      w -= gradient      println("w = " + w)    }    println("Final w=" + w)  }}

关键公式如图:


0 0
原创粉丝点击