Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2015
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.06 KB | None | 0 0
  1. package parser
  2.  
  3. import java.nio.file.{Files, Paths}
  4. import java.util.function.Consumer
  5.  
  6. import scala.collection.mutable.ArrayBuffer
  7.  
  8. /**
  9.  * @author miniwolf
  10.  */
  11. object LinearRegression {
  12.   val STEP_SIZE: Int = 15
  13.  
  14.   def main(args: Array[String]) {
  15.     val x: ArrayBuffer[Int] = new ArrayBuffer[Int]()
  16.     val y: ArrayBuffer[Int] = new ArrayBuffer[Int]()
  17.     val res = new ArrayBuffer[Double]()
  18.  
  19.     Files.lines(Paths.get("input.csv")).forEach( new Consumer[String] {
  20.       override def accept(line: String): Unit = {
  21.       val res = line.split(";")
  22.       x.+=:(res(0).toInt)
  23.       y.+=:(res(1).toInt)
  24.     } })
  25.  
  26.     var i = 0
  27.     while ( i*STEP_SIZE-STEP_SIZE < x.length ) {
  28.       val xk = new ArrayBuffer[Int](STEP_SIZE)
  29.       val yk = new ArrayBuffer[Int](STEP_SIZE)
  30.       for ( k <- 0 until STEP_SIZE ) {
  31.         if ( (k + i * STEP_SIZE) < x.length - 1 ) {
  32.           xk += x(k + i * STEP_SIZE)
  33.           yk += y(k + i * STEP_SIZE)
  34.         }
  35.       }
  36.       res.+=(linearReg(xk, yk))
  37.       println()
  38.       i += 1
  39.     }
  40.  
  41.     res.foreach(println(_))
  42.  
  43.     def linearReg(xk: ArrayBuffer[Int], yk: ArrayBuffer[Int]): Double = {
  44.       var sumx: Double = 0.0
  45.       var sumy: Double = 0.0
  46.       var sumx2: Double = 0.0
  47.       xk.foreach { case d =>
  48.         sumx += d
  49.         sumx2 += d * d
  50.       }
  51.  
  52.       // second pass: compute summary statistics
  53.       yk.foreach(i => sumy += i)
  54.       var i = 0
  55.       val n = xk.length
  56.       val xbar: Double = sumx / n
  57.       val ybar: Double = sumy / n
  58.       var xxbar: Double = 0.0
  59.       var yybar: Double = 0.0
  60.       var xybar: Double = 0.0
  61.       var beta1: Double = 0.0
  62.       var beta0: Double = 0.0
  63.       while ( i < n ) {
  64.         val xi = xk(i)
  65.         val yi = yk(i)
  66.         xxbar += (xi - xbar) * (xi - xbar)
  67.         yybar += (yi - ybar) * (yi - ybar)
  68.         xybar += (xi - xbar) * (yi - ybar)
  69.  
  70.         beta1 = xybar / xxbar
  71.         beta0 = ybar - beta1 * xbar
  72.         i += 1
  73.         // print results
  74.         println("y" + xi + " = " + beta1 + " * x + " + beta0)
  75.       }
  76.       beta1
  77.     }
  78.   }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement