zl程序教程

您现在的位置是:首页 >  后端

当前栏目

线性回归、正则化线性模型、梯度下降、损失函数、API介绍

API 函数 介绍 模型 回归 正则 线性 梯度
2023-09-11 14:17:00 时间

线性回归(Linear regression)是利用回归方程(函数)一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。

1、线性回归API

from sklearn.linear_model import LinearRegression


#数据获取
x = [[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]]
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]

#2模型训练
# 2.1 实例化API
estimator = LinearRegression()
# 2.2 使用fit方法进行训练
estimator.fit(x,y)

estimator.coef_     #对应的系数

estimator.predict([[100, 80]])   #预测结果

2、损失函数

如何去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值)

  • 线性回归经常使用的两种优化算法
    • 正规方程
    • 梯度下降法

 

 

梯度下降扩展内容:梯度下降算法推导及常见梯度下降算法(FG\SG\mini-batch\SAG)介绍

3.3线性方程和梯度下降优化的api介绍

  • sklearn.linear_model.LinearRegression(fit_intercept=True)
    • 通过正规方程优化
    • 参数
      • fit_intercept:是否计算偏置
    • 属性
      • LinearRegression.coef_:回归系数
      • LinearRegression.intercept_:偏置

 

  • 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 : string, optional
        • 学习率填充
        • 'constant': eta = eta0
        • 'optimal': eta = 1.0 / (alpha * (t + t0)) [default]   学习率越到后面越来越小
        • 'invscaling': eta = eta0 / pow(t, power_t)    学习率越到后面越来越小
          • power_t=0.25:存在父类当中
        • 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
    • 属性:
      • SGDRegressor.coef_:回归系数
      • SGDRegressor.intercept_:偏置

4 正则化线性模型

岭回归API介绍

  • sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)
    • 具有l2正则化的线性回归
    • alpha:正则化力度,也叫 λ
      • λ取值:0~1 或1~10(值越小,惩罚力度越小)
    • solver:会根据数据自动选择优化方法
      • sag(随机平均梯度下降):如果数据集、特征都比较大,选择该随机梯度下降优化
    • normalize:数据是否进行标准化
      • normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
    • Ridge.coef_:回归权重
    • Ridge.intercept_:回归偏置

Ridge方法相当于SGDRegressor(penalty='l2', loss="squared_loss"),只不过SGDRegressor实现了一个普通的随机梯度下降学习,推荐使用Ridge(实现了随机平均梯度下降SAG)

  • sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
    • 具有l2正则化的线性回归,可以进行交叉验证
    • coef_:回归系数
class _BaseRidgeCV(LinearModel):
    def __init__(self, alphas=(0.1, 1.0, 10.0),
                 fit_intercept=True, normalize=False,scoring=None,
                 cv=None, gcv_mode=None,
                 store_cv_values=False):

正则化程度的变化,对结果的影响? 

 

  • 正则化力度越大,权重系数会越小
  • 正则化力度越小,权重系数会越大

  • Ridge Regression 岭回归
    • 就是把系数添加平方项
    • 然后限制系数值的大小
    • α值越小,系数值越大,α越大,系数值越小
  • Lasso 回归
    • 对系数值进行绝对值处理
    • 由于绝对值在顶点处不可导,所以进行计算的过程中产生很多0,最后得到结果为:稀疏矩阵
  • Elastic Net 弹性网络
    • 是前两个内容的综合
    • 设置了一个r,如果r=0--岭回归;r=1--Lasso回归
  • Early stopping
    • 通过限制错误率的阈值,进行停止

 

补充知识:数学求导

 

矩阵求导公式的数学推导(矩阵求导——进阶篇)