Skip to content

Instantly share code, notes, and snippets.

@imjacobclark
Created January 4, 2018 23:03
Show Gist options
  • Save imjacobclark/2698d0f41835d97c724e4197f3dd9be0 to your computer and use it in GitHub Desktop.
Save imjacobclark/2698d0f41835d97c724e4197f3dd9be0 to your computer and use it in GitHub Desktop.
Simple Linear Regression implementation in Java
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));
}
}
@thinkxacademy
Copy link

Very Well written code!!

@Rill2000
Copy link

Can I ask a question sir? How can I do this with GUI.

@Rill2000
Copy link

Please help me, I really need it for my project.

@suharsha
Copy link

suharsha commented Aug 6, 2021

Thanks for this!

Please help me, I really need it for my project.
You need to get the values and pass them to the predictForValue method.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment