机器学习之线性回归代码(java版)

项目共需要两个java文件LR.java;Test.java

 运行结果(由于采用了随机生成数据集,所以结果也是随机的):

 

LR.java: 
 

public class LR 
{
    private double k;
    private double b;
    private double[] X;
    private double[] y;
    private double learningRate = 0.01; //学习率
    public LR()
    {
        k = 5;
        b = 10;
    }
    
    public void fit(double[] X,double[] y)
    {
        this.X = X;
        this.y = y;
        
        for(int i = 0;i < 10000;i++)
        {
            for(int j=0;j<X.length;j++)
            {
                b = b - learningRate * (k * X[j] + b - y[j]) * 1;
                k = k - learningRate * (k * X[j] + b - y[j]) * X[j];
            }            
        }
    }
    
    public double[] predict(double[] x) 
    {
        double[] yhat = new double[x.length];
        for(int i=0;i<x.length;i++)
        {
            yhat[i]= k * x[i] + b;  
        }
        return yhat;
    }
    
    public double Lost()
    {
        double sum = 0;
        for(int i=0;i<X.length;i++)
        {
            double err = k * X[i]+ b - y[i]; 
            sum += err * err;
        }
        return sum / (2 * X.length);
    }
    
    public double getK() 
    {
        return k;
    }
    
    public double getB() 
    {
        return b;
    }
    
    public double getLearningRate()
    {
        return learningRate;
    }
    
    public void setLearningRate(double value)
    {
        learningRate = value;
    }
}


Test.java:
 

import java.util.Random;


public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double[] X = new double[20];
        double[] y = new double[20];
        Random random = new Random();
        for(int i=0;i<X.length;i++)
        {
            X[i] = i;
            y[i] = 2 * X[i] + 1 + random.nextDouble();
        }
        
        LR lr = new LR();
        //控制学习率
        lr.setLearningRate(0.001);
        lr.fit(X, y);
        System.out.println("斜率:"+lr.getK() + "\n" +"截距:"+ lr.getB());
    }

}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打开第1234676289次

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值