机器学习实践(十二)—sklearn之线性回归

一、线性回归应用场景

  • 房价预测
  • 销售额度预测
  • 金融:贷款额度预测、利用线性回归以及系数分析因子

二、线性回归的原理

  • 什么是回归

    在机器学习中,回归就是拟合的意思,我们需要找出一个模型来拟合(回归)数据。

  • 什么是线性回归
    • 线性回归是:利用回归方程(函数),对特征值和目标值之间关系进行建模的一种分析方式。
    • 特征值和目标值可以是一个或多个,特征值和目标值可以看作函数意义上的自变量和因变量。
  • 特点
    • 只有一个自变量的情况称为单变量回归。
    • 多于一个自变量的情况称为多元回归。
  • 通用公式

    h ( θ ) = θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + . . . + b = θ T x + b h(\theta) = \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + ... + b = \theta^Tx + b h(θ)=θ1x1+θ2x2+θ3x3+...+b=θTx+b

    • 其中:
      • θ = ( θ 1 , θ 2 , . . . , θ n , b ) T \theta = (\theta_1,\theta_2,...,\theta_n,b)^T θ=(θ1,θ2,...,θn,b)T
      • x = ( x 1 , x 2 , . . . , x n , 1 ) T x = (x_1,x_2,...,x_n,1)^T x=(x1,x2,...,xn,1)T
  • 线性回归的特征与目标的关系

    线性回归当中线性模型有两种,一种是线性关系,另一种是非线性关系。

三、损失函数

假设真实值为 y y y ,我们的预测值为 h ( θ ) h(\theta) h(θ) ,真实结果与我们预测的结果之间可能存在一定的误差。

既然存在这个误差,那我们就可以将这个误差给衡量出来。

  • 损失函数

    J ( θ ) = ( h θ ( x 1 ) − y 1 ) 2 + ( h θ ( x 2 ) − y 2 ) 2 + . . . + ( h θ ( x 3 ) − y 3 ) 2 = ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta) = (h_\theta(x_1)-y_1)^2 +(h_\theta(x_2)-y_2)^2 + ... +(h_\theta(x_3)-y_3)^2 = \sum_{i=1}^{m}(h_\theta(x_i)-y_i)^2 J(θ)=(hθ(x1)y1)2+(hθ(x2)y2)2+...+(hθ(x3)y3)2=i=1m(hθ(xi)yi)2

    • y i y_i yi 为第 i 条训练数据的真实值。
    • h ( x i ) h(x_i) h(xi) 为第 i 条训练数据的预测函数产生的预测值,且 h ( x i ) h(x_i) h(xi) 是关于参数 θ \theta θ 的函数。
    • 又称最小二乘法

四、优化算法

如何去减少损失函数的损失使我们预测的更加准确呢?

我们一直说机器学习有自动学习的能力,在线性回归这里更是能够体现。

这里可以通过一些优化方法去优化(本质是求导)回归的总损失!

  • 正规方程

    θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)1XTy

    理解:X 为特征值矩阵,y 为目标值矩阵。直接求到最好的结果。

    缺点:当特征过多过复杂时,求解速度太慢并且得不到结果。

  • 梯度下降(Gradient Descent)

    θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j} J(\theta) θj:=θjαθjJ(θ)

    理解:α 为学习速率,需要手动指定(超参数), ∂ ∂ θ j J ( θ ) \frac{\partial}{\partial\theta_j} J(\theta) θjJ(θ) 整体表示下降方向

    沿着这个函数下降的方向,最后就能找到山谷的最低点,然后更新 θ \theta θ

    使用:面对训练数据规模十分庞大的任务 ,能够找到较好的结果

    • 梯度下降步骤
      1. 随机初始化一个点
      2. 自主学习
      3. 达到最小,终止学习
  • 有了梯度下降这样一个优化算法,回归就有了"自动学习"的能力

在这里插入图片描述

五、sklearn - 线性回归 - API

sklearn提供给我们两种实现的API, 可以根据选择使用。

  • 正规方程 API

    sklearn.linear_model.LinearRegression(fit_intercept=True)

    • 通过正规方程优化
    • fit_intercept
      • 是否计算偏置
    • LinearRegression.coef_
      • 回归系数
    • LinearRegression.intercept_
      • 偏置
  • 梯度下降 API

    sklearn.linear_model.SGDRegressor(loss=“squared_loss”, fit_intercept=True, learning_rate =‘invscaling’, eta0=0.01)

    • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
    • loss
      • 损失类型
      • loss=”squared_loss”: 普通最小二乘法
    • fit_intercept
      • 是否计算偏置
    • learning_rate
      • 学习率填充
      • ‘constant’
        • η = η 0 \eta = \eta_0 η=η0
      • ‘optimal’
        • $\eta = \frac{1.0}{\alpha * (t + t_0)} $ [default]
      • ‘invscaling’
        • η = η 0 p o w ( t , p o w e r t ) \eta = \frac{\eta_0}{pow(t, power_t)} η=pow(t,powert)η0
        • power_t=0.25
          • 存在父类当中
      • 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用 η 0 \eta_0 η0来指定学习率。
    • SGDRegressor.coef_
      • 回归系数
    • SGDRegressor.intercept_
      • 偏置
  • 回归性能评估 API
    • 均方误差(Mean Squared Error)评价机制:

    M S E = 1 m ∑ i = 1 m ( y i − y r e a l ) 2 MSE = \frac{1}{m}\sum_{i=1}^{m}(y^i-y^{real})^2 MSE=m1i=1m(yiyreal)2

    注: y i y^i yi 为预测值, y r e a l y^{real} yreal 为真实值

    • sklearn.metrics.mean_squared_error(y_true, y_pred)
      • 均方误差回归损失
      • y_true
        • 真实值
      • y_pred
        • 预测值
      • return
        • 浮点数结果

六、案例 - 线性回归 - 波士顿房价预测

  • 数据介绍

在这里插入图片描述

在这里插入图片描述

给定的这些特征,是专家们得出的影响房价的结果属性。我们此阶段不需要自己去探究特征是否有用,只需要使用这些特征。

  • 步骤分析

    回归当中的数据大小不一致,是否会导致结果影响较大。所以需要做标准化处理。

    • 数据分割与标准化处理
    • 回归预测
    • 线性回归的算法效果评估
  • 完整代码
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LinearRegression,SGDRegressor
    from sklearn.datasets import load_boston
    from sklearn.metrics import mean_squared_error
    
    # 获取数据
    boston = load_boston()
    
    # 划分数据集
    x_train,x_test,y_train,y_test = train_test_split(boston.data,boston.target,random_state=8)
    
    # 特征工程,标准化
    # 1> 创建一个转换器
    transfer = StandardScaler()
    # 2> 数据标准化
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    
    # 方法一:正规方程求解
    # 模型训练
    # 1> 创建一个估计器
    estimator_1 = LinearRegression()
    # 2> 传入训练数据,进行机器学习
    estimator_1.fit(x_train,y_train)
    # 3> 打印梯度下降优化后的模型结果系数
    print(estimator_1.coef_)
    # 4> 打印梯度下降优化后的模型结果偏置
    print(estimator_1.intercept_)
    
    # 方法二:梯度下降求解
    # 模型训练
    # 1> 创建一个估计器,可以通过调参数,找到学习率效果更好的值
    estimator_2 = SGDRegressor(learning_rate='constant', eta0=0.001)
    # 2> 传入训练数据,进行机器学习
    estimator_2.fit(x_train,y_train)
    # 3> 打印梯度下降优化后的模型结果系数
    print(estimator_2.coef_)
    # 4> 打印梯度下降优化后的模型结果偏置
    print(estimator_2.intercept_)
    
    # 模型评估
    # 使用均方误差对正规方程模型评估
    y_predict = estimator_1.predict(x_test)
    error = mean_squared_error(y_test,y_predict)
    print('正规方程优化的均方误差为:\n',error)
    
    # 使用均方误差对梯度下降模型评估
    y_predict = estimator_2.predict(x_test)
    error = mean_squared_error(y_test,y_predict)
    print('梯度下降优化的均方误差为:\n',error)
    

七、正规方程与梯度下降比较

梯度下降正规方程
需要选择学习率不需要
需要迭代求解一次运算得出
特征数量较大可以使用需要计算方程,时间复杂度高O(n3)
适用大数据集适用小数据集
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泡泡码客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值