05-线性回归概述

发布时间:2026/7/26 9:17:52

05-线性回归概述 1. 概念线性回归利用回归方程函数对一个或多个自变量特征值和因变量目标值之间的关系进行建模的分析方式。线性回归要求解需要数据特征x 目标yy连续线性方程式一元、多元损失函数种类MAE、MSE、RMSE优化方法正规方程法求导、求偏导、梯度下降法过拟合、欠拟合调整过拟合减少特征增加样本量L1、L2正则化欠拟合增加特征1.1 一元线性回归1个目标值1个特征值公式k是权重b是偏置1.2 多元线性回归1个目标值n个特征值公式是权重是偏置。2. API# 包 from sklearn.linear_model import LinearRegression from sklearn.linear_model import SGDRegressor from sklean.metrics import mean_absolute_error, mean_squared_error, root_mean_squared_error # 1. 模型训练正规方程/梯度下降 二选一 estimator LinearRegression(fit_intercept True) # 正规方程 estimator SGDRegressor(fit_intercept True, learning_rate constant, eta0 0.01) # 梯度下降 estimator.fit(x_train,y_train) # 2. 模型预测 y_pre estimator.predict(x_test) print(f预测值为{y_pre}) print(f权重系数为{estimator.coef_}) print(f偏置为{estimator.intercept_}) # 3. 模型评估 mse mean_squared_error(y_test, y_pre) mae mean_absolute_error(y_test, y_pre) rmse root_mean_squared_error(y_test,y_pre)3. 损失函数误差预测值-真实值损失函数代价函数/成本函数/目标函数衡量每个样本预测值与真实值效果的函数。找到损失函数的最小值就找到了线性回归的最优拟合得到的权重就是最优解。要想一条直线更好地拟合所有点引入损失函数通过一个优化方法求最小值得到的最优解损失函数分类最小二乘法误差平方和均方误差Mean-Square Error, MSE平均绝对误差Mean Absolute Error, MAE均方根误差Root Mean Absolute Error, RMSEMSE开根号4. 优化方法正规方程法 VS 梯度下降法正规方程法梯度下降法不需要学习率一次运算即可得到结果不需要迭代应用于小数据量场景计算量大易受噪声、特征相关性等影响计算非常耗时且不存在时无法求解如果数据不是线性规律无法使用/效果不好需要选择学习率需要迭代适用于嘈杂、大数据应用场景在各种损失函数求解中被大量应用4.1 正规方程法求导、求偏导4.1.1 原理设线性回归模型损失函数这里用最小二乘损失目标找到使得最小。是关于的二次凸函数二次项半正定全局只有一个极小值 全局最小值多元可微凸函数取最小值的充要条件梯度 0 向量对损失函数求梯度令梯度等于 0直接解出最优这个方程就是正规方程Normal Equation。损失函数取最小值时的参数解析解存在的问题如果运算量过大可能造成内存溢出该方法需要假设的逆矩阵存在如果不存在即不是正定矩阵即不是列满秩矩阵即特征之间存在多重共线性则存在无穷多组使得最小一般用岭回归加正则项来达成目标。4.1.2 一元线性回归将损失函数求导如对b求偏导令对k求偏导令带入4.1.3 多元线性回归4.1.4 APIfrom sklearn.linear_model import LinearRegression estimator LinearRegression(fit_interceptTrue) # 含偏置默认True属性LinearRegression.coef_回归系数LinearRegression.intercept_偏置4.2 梯度下降法4.2.1 原理沿梯度下降的方向求解极小值。步骤输入初始化位置S每步距离为学习率输出从S到达山底S为任意位置在S环顾四周如果四周都比S高则返回S终止否则继续下一个步骤在S环顾四周寻找坡度最抖的方向令其为x方向沿x方向往下走长度为到达新的位置S重复上述步骤直到收敛梯度单变量函数梯度是某一点切线斜率某一点导数方向为函数增长最快的方向多变量函数某一个点的偏导方向为偏导分量的方向梯度下降循环迭代求当前点的梯度更新当前的权重参数。下个点当前点-学习率*损失函数求偏导学习率步长一般为0.001~0.014.2.2 梯度下降算法分类全梯度下降算法 FGD (Full Gradient Desent)每次迭代时使用全部样本的梯度值训练速度慢随机梯度下降算法 SGD每次迭代时随机选择使用1个样本梯度值简单、高效、不稳定小批量梯度下降算法 mini-batch每次迭代时在m个样本中随机选择使用x个样本梯度值1xmx1即为SGDxm即为FGD结合了FG的心细和SG的胆大目前使用最多随机平均梯度下降算法 SAG每次迭代时随机选择1个样本的梯度值和以往样本的梯度值的均值训练初期表现不佳优化速度慢4.2.3 单变量梯度下降4.2.4 多变量梯度下降数据说明样本8条特征3个每月工资、存款余额、房产面积标签1个授信额度假设函数将b换成其中其中.损失函数最小二乘梯度下降公式其中为第j个特征的第s次迭代权重为学习率为损失函数对的偏导数梯度。则更新梯度下降公式为设置初始位置s0则其中时以此类推一直算到即可求出的值得到的第1次迭代位置然后重复上述步骤直到收敛得到最优。其他的也是同样的计算方式最终得到1个权重向量求解结束。4.2.5 APIfrom sklearn.linear_model import SGDRegressor # 随机梯度下降算法 estimator SGDRegressor( loss squared_loss, # 损失函数类型 fit_intercept True, # 是否含偏置 learning_rate constant, # 学习率策略默认为常数也可以不断变小invscaling eta0 0.01 # 学习率大小 )属性SGDRegressor.coef_回归系数SGDRegressor.intercept_偏置5. 线性回归模型评估衡量预测值与真实值之间的差距。公式见本文损失函数平均绝对误差 MAE均方误差 MSE给出平均误差均方根误差 RMSE计算公式中有平方项误差可能会被放大对异常值更敏感一般情况下MAERMSE如果RMSE指标训练地非常低说明模型对异常点噪声的拟合非常好模型容易过拟合以上指标值越小模型预测越准确。一般用MAE、RMSE结合着看APIfrom sklean.metrics import mean_absolute_error, mean_squared_error, root_mean_squared_error mae mean_absolute_error(y_test,y_pre) mse mean_squared_error(y_test,y_pre) rmse root_mean_squared_error(y_test,y_pre)6. 过拟合、欠拟合6.1 欠拟合模型在训练集、测试集表现都不好原因模型过于简单调整增加特征组合、泛化、相关性、增加多项式特征项二次、三次项提高模型复杂度6.1.1 模拟欠拟合# 模拟欠拟合 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split # 1. 创造数据 np.random.seed(66) x np.random.uniform(-3,3,size100) y 0.5*x**2 x 2 np.random.normal(0,1,size100) # 2. 数据预处理 X x.shape(-1,1) # 3. 模型训练 estimator LinearRegression() estimator.fit(X,y) # 4. 模型预测 y_pre estimator.predict(X) # 5. 模型评估 mse mean_squared_error(y, y_pre) print(f均方误差{mse}) # 6. 画图 plt.scatter(x,y) plt.plot(x,y_pre,colorred) plt.show()6.2 过拟合模型在训练集表现好测试集表现不好原因模型过于复杂存在过多噪声调整重新清洗数据减少特征增加数据量L1、L2正则化正则化模型训练时数据中有些特征影响模型复杂度、或某个特征的异常值较多所以尽量要较少这个特征的影响甚至删除这个特征在损失函数中增加正则化项可以消除异常点带来的权重值w过大/过小6.2.1 L1正则化其中为惩罚系数该值越大对的惩罚力度就越大该特征对整体的影响就越小。L1正则化会使权重趋向于0可以等于0一般会将高次方项系数变为0使得某些特征失效达到特征筛选的目的。L1正则化的线性回归模型是Lasso 回归。from sklearn.linear_model import Lasso estimator Lasso(alpha0.01)6.2.2 L2正则化其中为惩罚系数该值越大对的惩罚力度就越大该特征对整体的影响就越小。L2正则化会使权重趋向于0一般不等于0对高次方项系数影响较大使得某些特征影响程度小达到特征筛选的目的。L2正则化的线性回归模型是岭回归。实际工作中一般选择L2正则化from sklearn.linear_model import Ridge estimator Ridge(alpha0.01)6.2.3 模拟过拟合# 模拟过拟合 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split # 1. 创造数据 np.random.seed(66) x np.random.uniform(-3,3,size100) y 0.5*x**2 x 2 np.random.normal(0,1,size100) # 2. 数据预处理 X x.shape(-1,1) X2 np.hstack([X, X**2,X**3,X**4,X**5,X**6,X**7,X**8,X**9,X**10]) # 3. 模型训练下面estimator三选一 estimator LinearRegression() # 正规方程法 estimator Lasso(alpha0.01) # L1正则化 estimator Ridge(alpha0.01) # L2正则化 estimator.fit(X2,y) # 4. 模型预测 y_pre estimator.predict(X3) # 5. 模型评估 mse mean_squared_error(y, y_pre) print(f均方误差{mse}) # 6. 画图 plt.scatter(x,y) plt.plot(np.sort(x),y_pre[np.argsort(x)],colorr) # x,y数据要排序 plt.show()案例汇总波士顿房价预测补充知识A 标量、向量、矩阵、张量标量scalar一个独立存在的数只有大小没有方向向量vector一列顺序排列的元素有大小有方向默认是列向量张三的数理化成绩矩阵matrix二维数组pd.DataFrame张三、李四的数理化成绩张量Tensor高维数组Numpy ndarray基于向量和矩阵的推广2个3*4矩阵or3个2*4矩阵or4个2*3矩阵A1 向量运算向量的大小向量的模。如向量(1,2,3)模长向量转置向量的基运算A2 范数Norm是一个数学概念具有长度的意义对于向量L1范数向量中各个元素绝对值之和L2范数向量的模各个元素平方和开平方Lp范数向量中每个元素p幂求和开p次根A3 矩阵矩阵转置k为1个常数矩阵加法对应元素相加矩阵乘法A列数B行数才能相乘即这样才能相乘相乘后为矩阵。不满足交换律满足结合率矩阵与单位阵相乘等于它本身若则B为A的逆矩阵记为如方阵行数列数为方阵对称方阵单位阵方阵对角线为1其余为0B 导数B1 导数概念函数某一个点求切线就是导数。瞬时速度变化率导数0的位置是函数的极值点偏导如函数对的偏导记为将视为常数对求导数。各分量上求偏导形成一个向量即为z的导数。B2 导数公式B3 导数四则运算

相关新闻