机器学习之线性回归

线性回归的原理

回归问题的判定是什么?目标值是连续性的数据。

线性回归的应用场景
  • 房价预测
  • 销售额度预测
  • 金融:贷款额度预测、利用线性回归以及系数分析因子
什么是线性回归
  1. 定义与公式
          线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)何让因变量(目标值)之间关系进行建模的一种分析方式。
    特点:只有一个自变量的情况称为单变量回归,多一个人自变量情况的情况的叫做多元回归。
    在这里插入图片描述
    例如:
  • 期末成绩:0.7考试成绩+0.3平时成绩‘
  • 房子价格=0.02中心区域的距离+0.04城市一氧化氮的浓度+(-0.12自住房平均房价)+0.254城镇犯罪率
    可以看出特征值和目标值之间建立了一个关系,这一关系可以理解为线性关系。
  1. 线性回归的特征与目标的关系分析
    线性回归当中线性模型有两种,一种是线性关系,另一种是非线性关系。
    (1)线性关系
    在这里插入图片描述
    在这里插入图片描述
          注释:单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面关系,更高气度的不用去想,只要记住这种关系即可。
    (2)非线性关系
    在这里插入图片描述
          注释:如果是非线性关系,那么回归方程可以理解为,类似于这种情况: w 1 ∗ x 1 + w 2 ∗ x 2 2 + w 3 ∗ x 3 3 w1*x1+w2*x2^2+ w3*x3^3 w1x1+w2x22+w3x33

总之,线性模型分以下两种情况:
(1)自变量一次: y = w 1 ∗ x 1 + w 2 ∗ x 2 + w 3 ∗ x 3 + . . . + w n x n + b y = w1*x1+w2*x2+ w3*x3+...+wnxn+b y=w1x1+w2x2+w3x3+...+wnxn+b
(2)参数一次: y = w 1 ∗ x 1 + w 2 ∗ x 2 2 + w 3 ∗ x 3 3 + . . . . + b y = w1*x1+w2*x2^2+ w3*x3^3+....+b y=w1x1+w2x22+w3x33+....+b
      注意线性模型和线性关系。:线性关系一定是线性模型,但是线性模型不一定是线性关系。

线性回归的损失原理(理解记忆)
目标:求模型参数,模型参数使得预测准确

      假设刚才的房子例子,真实的数据之间存在这样的关系:
      房子价格=0.02中心区域的距离+0.04城市一氧化氮的浓度+(-0.12自住房平均房价)+0.254城镇犯罪率
      现在,随意指定一个关系(猜测):
      房子价格=0.25中心区域的距离+0.14城市一氧化氮的浓度+0.42自住房平均房价+0.34城镇犯罪率
在这里插入图片描述
      对于真实值和预测值之间的误差,使用损失函数/cost/成本函数/目标函数来衡量。

损失函数

总损失定义为:
在这里插入图片描述
y_i为第i个训练样本的真实值
h(x_i)为第i个训练样本特征值组织预测函数
又称最小二乘法
如何去减少这个损失,使预测更加准确?机器学习有自动学习的功能,在线性回归这方面能够体现,这里可以通过一些优化方法去优化(使用数学中的求导功能)回归的总损失。

线性回归的优化原理

如果去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值
线性回归经常使用的两种优化算法:

优化算法1:正规方程

在这里插入图片描述
X为特征值矩阵,y为目标值矩阵。
优点:直接求到最好的结果
缺点:当特征过多过复杂时,求解速度太慢并且得不到结果。
在这里插入图片描述

优化算法2:梯度下降法(Gradient Descent)
  1. 公式
    在这里插入图片描述
          注释:α为学习速率,需要手动指定(超参数),α旁边的整体表示方向,沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值。
          使用:面对训练数据规模十分庞大的任务,能够找到较好的结果。
    在这里插入图片描述
    在这里插入图片描述
          注:线性回归函数一般不会出现上图这样,其他函数有可能出现这种情况,会在沿着函数下降的方向不断更新时得到一个局部最优值。
线性回归API

from sklearn.linear_model import LinearRegression

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

from sklearn.linear_model import SGDRegressor(loss=“squared_loss”,fit_intercept=True,learning_rate='invscaling',eat0=0.01)

  • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
  • loss:损失类型
    loss=“squared_loss”:普通最小二乘法(默认)
  • fit_intercept:是否计算偏置
  • learning_rate:string,optional
    学习率填充
    ‘constant’: eta = eta0
    ‘optimal’: eta = 1.0/ (alpha " (t + t0)) [default]
    ’invscaling’: eta = eta0, powf, power_t),power_ t=0.25:存在父类当中(默认)
    对于一个常数值的学习率来说,可以使用learning rate=‘constant’ ,并使用eat0来指定学习率。学习率是可以调的
  • SGDRegressor.coef_:回归系数
  • SGDRegressor.intercept_:偏置
回归性能评估
  1. 分析
    回归当中的数据大小不一致,是否会导致结果影响较大。所以要做标准化处理:
    (1)数据分割于标准化处理
    (2)回归预测
    (3)线性回归的算法效果评估
  2. 回归性能评估
    均方误差(Mean Squared Error)MSE评价机制:
    在这里插入图片描述
    注: y i 为 预 测 值 , y − 为 真 实 值 y^i为预测值,y^-为真实值 yiy
  3. API:
    sklearn.metrics mean_squared_error
    均方误差回归损失
    y_true:真实值
    y_pred:预测值
    return:浮点数结果
波士顿房价预测
  1. 流程:
    (1)获取数据
    (2)划分数据集
    (3)特征工程:标准化
    (4)预估器流程
    fit()------>模型
    coef_、intercept_
    (5)模型评估
  2. 代码
    (1)导入包:
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error

(2)编写linear1()和linear2()函数:

def linear1():
    '''
    正规方程的方法对波士顿房价进行预测
    :return:
    '''
    # 1.获取数据
    boston = load_boston()
    # 2.划分数据集
    x_train,x_test,y_train,y_test = train_test_split(boston.data, boston.target, random_state= 22)
    # 3.特征工程:标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 4.预估器流程
    estimator = LinearRegression()
    estimator.fit(x_train,y_train)
    # 5.得出模型
    print("正规方程权重系数为:\n",estimator.coef_)
    print("正规方程偏置为:\n",estimator.intercept_)
    # 6.评估模型
    y_predict = estimator.predict(x_test)
    #print("正规方程的y_predict为:\n", y_predict)
    error = mean_squared_error(y_test,y_predict)
    print("正规方程均方误差为:\n",error)
    return None
def linear2():
    '''
    梯度下降法对波士顿房价进行预测
    :return:
    '''
    # 1.获取数据
    boston = load_boston()
    # 2.划分数据集
    x_train,x_test,y_train,y_test = train_test_split(boston.data,boston.target,random_state= 22)
    # 3.特征工程:标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 4.预估器流程
    estimator = SGDRegressor(eta0=0.01,max_iter=10000 )
    estimator.fit(x_train,y_train)
    # 5.得出模型
    print("梯度下降权重系数为:\n",estimator.coef_)
    print("梯度下降偏置为:\n",estimator.intercept_)
    # 6.评估模型
    y_predict = estimator.predict(x_test)
    #print("梯度下降的y_predict为:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("梯度下降均方误差为:\n", error)
    return None

(3)调用linear1()和linear2()函数:

if __name__ == "__main__":
    # 代码1:正规方程的方法对波士顿房价进行预测
    linear1()
    # 代码2:梯度下降法对波士顿房价进行预测
    linear2()

(4)结果:
在这里插入图片描述

正规方程和梯度下降对比
  • 文字对比
梯度下降正规方程
需要选择学习率不需要
需要迭代求解一次运算得出
特征数量较大可以使用需要计算方程,时间复杂度高
  • 选择
    (1)小规模数据
    LinearRegression(不能解决拟合问题)
    岭回归
    (2)大规模数据:SGDRegressor
关于优化方法GD、SGD、SAG
  1. GD
          梯度下降(Gradient Descent),原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以需要进一步改进。
  2. SGD
          随机梯度下降(Stochastic Gradient Descent)是一个优化方法,它在一次迭代时只考虑一个训练样本。
          SGD的优点:高效、容易实现
          SGD的缺点:
                (1)SGD需要许多超参数,比如正则项参数、迭代数。
                (2)SGD对于特征标准化是敏感的。
  3. SAG
          随机平均梯度法(Stochastic Average Descent),由于收敛的速度太慢,有人提出ASG等基于梯度下降的算法。
          Scikit-learn:岭回归、逻辑回归等当中都会有SAG优化。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值