第1.1章:线性回归(Linear Regression)_算法原理推导

简述一下线性回归流程:首先可以进行数据的预处理,包括但不限于:缺失值处理、线性相关的特征值处理、误差较大的脏数据处理。然后搭建一个线性回归模型,运用梯度下降或者正规方程法可以求出参数,这样模型就确定了。之后再用一些检测方法,评估模型是否合理并进行针对性的优化。

文中 y ^ \hat{y} y^为预测值, y ( i ) y^{(i)} y(i)为实际值, x i x_{i} xi表示第 i i i个变量(特征), x ( i ) x^{(i)} x(i)表示第 i i i组数据(样本),同理 x n ( m ) x_{n}^{(m)} xn(m)表示第m个样本的第n个特征

来源

Lecture_01

本章视频

06_线性回归算法原理推导、07_线性回归参数的求解

一、线性回归算法原理推导

1.假设函数的推导

关于回归问题与分类问题

举一个银行贷款的例子:给定几组数据(年龄,工资,贷款额度)做为样本,当再次给一组数据(年龄,工资)时,预测出贷款额度则是一个回归问题(推测出一个连续值的结果),预测出能不能得到贷款则是一个分类问题(推测出离散的输出值)。

算法的选择

优先考虑简单的算法,可以根据结果再进行优化,选择别的算法试试看。简单的算法有一个好处就是参数比较少,做可视化和分析的时候更容易。比如线性回归的参数 θ \theta θ代表的就是各个特征的权重,就很直观,而越复杂的算法解释起来越不方便,也不知道具体的参数代表什么意思。

关于假设函数(预测函数)

  • 假设 x 1 x_{1} x1是年龄, x 2 x_{2} x2是工资, θ 0 \theta_{0} θ0是偏置参数, θ 1 \theta_{1} θ1是年龄参数, θ 2 \theta_{2} θ2是工资参数。
  • 我可以根据已知的样本拟合一个平面: h θ ( x ) = y ^ = θ 0 + θ 1 x 1 + θ 2 x 2 h_{\theta}(x)=\hat{y}=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2} hθ(x)=y^=θ0+θ1x1+θ2x2用来近似的表示对于一个组合(年龄、工资)相对应的贷款金额(注:大多数情况近似值与真实值并不一样)。我们的目的就是确定 θ i \theta_{i} θi的值,这样当给定一组新的 x i x_{i} xi就可以预测出想要的结果。
    注:之所以这样来定义假设函数,是为了使得函数值 h θ ( x ) h_{\theta}(x) hθ(x)尽可能的接近真实值,以达到预测的效果。
  • 进一步,我们可以令 x 0 x_{0} x0=1,将假设函数整合成: h θ ( x ) = ∑ i = 0 m θ i x i = θ T X h_{\theta}(x)=\sum_{i=0}^{m} \theta_{i} x_{i}=\theta^{T} X hθ(x)=i=0mθixi=θTX
    其中 θ T = ( θ 0 … θ m ) \theta^{T}=\left(\begin{array}{ccc}{\theta_{0}} & {\dots} & {\theta_{m}}\end{array}\right) θT=(θ0θm) X = ( x 0 … x m ) T X=\left(\begin{array}{lll}{x_{0}} & {\dots} & {x_{m}}\end{array}\right)^{T} X=(x0xm)T。将假设函数表示成矩阵相乘的形式,目的则是便于计算。

2.误差项分析

误差

引入误差: y ( i ) = θ T x ( i ) + ε ( i )                                               ( 01 ) y^{(i)}=\theta^{T} x^{(i)}+\varepsilon^{(i)}                         (01) y(i)=θTx(i)+ε(i)                       01
重要的话:误差 ε ( i ) \boldsymbol{\varepsilon}^{(i)} ε(i)是独立的并且具有相同的分布,并且服从均值为0,方差为 σ 2 \sigma^{2} σ2的高斯分布。
注:我们是假设误差服从的高斯分布,并且实际得出的结果确实是可利用的,即假设可行

在统计学中,高斯-马尔可夫定理陈述的是:在线性回归模型中,如果误差满足零均值、同方差且互不相关,则回归系数的最佳线性无偏估计(BLUE, Best Linear unbiased estimator)就是普通最小二乘法估计。

  • 误差 ε ( i ) \boldsymbol{\varepsilon}^{(i)} ε(i)为每组样本的真实值 y ( i ) y^{(i)} y(i)与预测值 h θ ( x ) h_{\theta}(x) hθ(x)之间的差距
  • 误差项
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一元线性回归算法的Java实现代码: Linear_Regression.java ```java public class Linear_Regression { private double[] x; //自变量 private double[] y; //因变量 private double beta0; //截距 private double beta1; //斜率 private int n; //样本数量 public Linear_Regression(double[] x, double[] y) { this.x = x; this.y = y; this.n = x.length; fit(); } // 计算斜率和截距 private void fit() { double sum_x = 0.0, sum_y = 0.0, sum_xy = 0.0, sum_x2 = 0.0; for (int i = 0; i < n; i++) { sum_x += x[i]; sum_y += y[i]; sum_xy += x[i] * y[i]; sum_x2 += x[i] * x[i]; } beta1 = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x * sum_x); beta0 = (sum_y - beta1 * sum_x) / n; } // 预测 public double predict(double x0) { return beta0 + beta1 * x0; } // 获取斜率 public double getSlope() { return beta1; } // 获取截距 public double getIntercept() { return beta0; } } ``` linear_regression_test.java ```java public class linear_regression_test { public static void main(String[] args) { double[] x = new double[]{1, 2, 3, 4, 5}; double[] y = new double[]{2, 4, 5, 4, 5}; Linear_Regression model = new Linear_Regression(x, y); System.out.println("斜率:" + model.getSlope()); System.out.println("截距:" + model.getIntercept()); System.out.println("预测x=6时的值:" + model.predict(6)); } } ``` 这里的例子是通过自己编写的Linear_Regression类,对简单的数据进行线性回归,并输出斜率、截距以及预测结果。如果要使用该类进行更复杂的线性回归,需要在fit()方法中加入更复杂的处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值