线性回归LinearRegress

线性回归,实际上是做拟合,即根据样本X和观测值Y,回归出一个公式,使残差的平方和达到最小值。
观测值Y和样本X1……Xn的关系为:
Y=b0+b1x1+……+bnxn
残差平分和为:
这里写图片描述

通过求导来求极值,对b0,b1….依次求偏导,可得
这里写图片描述
把负的部分移到等号右边,可得
这里写图片描述
如果用矩阵A来表示系数,可得
这里写图片描述*这里写图片描述
等号右边也用矩阵表示,可得
这里写图片描述
由于Ab=D
b = A-1*D=(X‘X)-1 X’Y

下面给出java版的实现,该实现依赖jama矩阵库

package com.tao.ml;
import Jama.Matrix;

public class LinearRegress {

    public static void main(String[] args) {
        double[][] x = {
        {1,316, 1536, 874, 981},
        {1,385, 1771, 777, 1386},
        {1,299, 1565, 678, 1672},
        {1,326, 1970, 785, 1864},
        {1,441, 1890, 785, 2143},
        {1,460, 2050, 709, 2176},
        {1,470, 1873, 673, 1769},
        {1,504, 1955, 793, 2207},
        {1,348, 2016, 968, 2251},
        {1,400, 2199, 944, 2390},
        {1,496, 1328, 749, 2287},
        {1,497, 1920, 952, 2388},
        {1,533, 1400, 1452, 2093},
        {1,506, 1612, 1587, 2083},
        {1, 458, 1613, 1485, 2390}
        };
        Matrix X = new Matrix(x);
        double[][] y = {
        {3894},
        {4628},
        {4569},
        {5340},
        {5449},
        {5599},
        {5010},
        {5694},
        {5792},
        {6126},
        {5025},
        {5924},
        {5657},
        {6019},
        {6141}
        };
        Matrix Y = new Matrix(y);

        Matrix Xtrans = X.transpose();
        Xtrans.times(X).inverse().times(Xtrans).times(Y).print(1, 8);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值