Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package parser
- import java.nio.file.{Files, Paths}
- import java.util.function.Consumer
- import scala.collection.mutable.ArrayBuffer
- /**
- * @author miniwolf
- */
- object LinearRegression {
- val STEP_SIZE: Int = 15
- def main(args: Array[String]) {
- val x: ArrayBuffer[Int] = new ArrayBuffer[Int]()
- val y: ArrayBuffer[Int] = new ArrayBuffer[Int]()
- val res = new ArrayBuffer[Double]()
- Files.lines(Paths.get("input.csv")).forEach( new Consumer[String] {
- override def accept(line: String): Unit = {
- val res = line.split(";")
- x.+=:(res(0).toInt)
- y.+=:(res(1).toInt)
- } })
- var i = 0
- while ( i*STEP_SIZE-STEP_SIZE < x.length ) {
- val xk = new ArrayBuffer[Int](STEP_SIZE)
- val yk = new ArrayBuffer[Int](STEP_SIZE)
- for ( k <- 0 until STEP_SIZE ) {
- if ( (k + i * STEP_SIZE) < x.length - 1 ) {
- xk += x(k + i * STEP_SIZE)
- yk += y(k + i * STEP_SIZE)
- }
- }
- res.+=(linearReg(xk, yk))
- println()
- i += 1
- }
- res.foreach(println(_))
- def linearReg(xk: ArrayBuffer[Int], yk: ArrayBuffer[Int]): Double = {
- var sumx: Double = 0.0
- var sumy: Double = 0.0
- var sumx2: Double = 0.0
- xk.foreach { case d =>
- sumx += d
- sumx2 += d * d
- }
- // second pass: compute summary statistics
- yk.foreach(i => sumy += i)
- var i = 0
- val n = xk.length
- val xbar: Double = sumx / n
- val ybar: Double = sumy / n
- var xxbar: Double = 0.0
- var yybar: Double = 0.0
- var xybar: Double = 0.0
- var beta1: Double = 0.0
- var beta0: Double = 0.0
- while ( i < n ) {
- val xi = xk(i)
- val yi = yk(i)
- xxbar += (xi - xbar) * (xi - xbar)
- yybar += (yi - ybar) * (yi - ybar)
- xybar += (xi - xbar) * (yi - ybar)
- beta1 = xybar / xxbar
- beta0 = ybar - beta1 * xbar
- i += 1
- // print results
- println("y" + xi + " = " + beta1 + " * x + " + beta0)
- }
- beta1
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement