Created
January 4, 2018 23:03
-
-
Save imjacobclark/2698d0f41835d97c724e4197f3dd9be0 to your computer and use it in GitHub Desktop.
Simple Linear Regression implementation in Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package xyz.jacobclark; | |
import java.util.List; | |
import java.util.stream.Collectors; | |
import java.util.stream.IntStream; | |
import static java.util.Arrays.asList; | |
public class LinearRegression { | |
private static final List<Integer> x = asList(2, 3, 5, 7, 9, 11, 14); // Consecutive hours developer codes | |
private static final List<Integer> y = asList(4, 5, 7, 10, 15, 20, 40); // Number of bugs produced | |
private static Double predictForValue(int predictForDependentVariable) { | |
if (x.size() != y.size()) | |
throw new IllegalStateException("Must have equal X and Y data points"); | |
Integer numberOfDataValues = x.size(); | |
List<Double> xSquared = x | |
.stream() | |
.map(position -> Math.pow(position, 2)) | |
.collect(Collectors.toList()); | |
List<Integer> xMultipliedByY = IntStream.range(0, numberOfDataValues) | |
.map(i -> x.get(i) * y.get(i)) | |
.boxed() | |
.collect(Collectors.toList()); | |
Integer xSummed = x | |
.stream() | |
.reduce((prev, next) -> prev + next) | |
.get(); | |
Integer ySummed = y | |
.stream() | |
.reduce((prev, next) -> prev + next) | |
.get(); | |
Double sumOfXSquared = xSquared | |
.stream() | |
.reduce((prev, next) -> prev + next) | |
.get(); | |
Integer sumOfXMultipliedByY = xMultipliedByY | |
.stream() | |
.reduce((prev, next) -> prev + next) | |
.get(); | |
int slopeNominator = numberOfDataValues * sumOfXMultipliedByY - ySummed * xSummed; | |
Double slopeDenominator = numberOfDataValues * sumOfXSquared - Math.pow(xSummed, 2); | |
Double slope = slopeNominator / slopeDenominator; | |
double interceptNominator = ySummed - slope * xSummed; | |
double interceptDenominator = numberOfDataValues; | |
Double intercept = interceptNominator / interceptDenominator; | |
return (slope * predictForDependentVariable) + intercept; | |
} | |
public static void main(String[] args) { | |
System.out.println(predictForValue(13)); | |
} | |
} |
Can I ask a question sir? How can I do this with GUI.
Please help me, I really need it for my project.
Thanks for this!
Please help me, I really need it for my project.
You need to get the values and pass them to thepredictForValue
method.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Very Well written code!!