线性回归和梯度下降
-
定义
- 利用回归方程对一个或者多个自变量(特征值)和因变量(目标)之间关系进行建模的一种分析方式
- 表示方法 h(w) = w1x1 + w2x2 + w3x3 + … b = W转置x+b
- 分类:线性关系、非线性关系
-
线性回归的损失和优化
- 最小二乘法 (y - XW)^2
- 预测值-真实值的平方
-
优化1:正规方程
- 利用矩阵的逆,转置进行一步求解
- 只适合样本和特征比较少的情况
- W = (X.T * X)^-1 * X.T * y
- 时间复杂度高 小规模数据用
- 优化算法 : 岭回归
-
API
- from sklearn.linear_model import LinearRegression
- LinearRegression() 不能解决拟合问题
- 参数 fit_intercept 偏差
- LinearRegression.coef_ 回归系数
- LinearRegression.intercept_ 偏置
-
优化2:梯度下降
- 梯度的方向实际是函数在此上升最快的方向,而我们需要沿着下降最快的放心走
- 山 可微分的函数
- 山底 函数的最小值
- 可能会走到鞍点,没有到达最小值
- alpha:学习率 步长
- 梯度加负号
- w = w - alpha * df(w)/dw
- 大规模数据 SGDRegressor
-
API
- from sklearn.linear_model import SGDRegressor
- SGDRegressoe(loss=‘square_loss’;,fit_intercept=True,learning_rate=‘invscaling’,eta0=0.1)
- loss 损失 square_loss 普通最小二乘法
- learnin_rate : 一般是动态更新 invscaling eta=eta0/pow(t,power_t=0.25)
- eta0学习率
-
梯度下降
- 正规方程和梯度下降对比
- 梯度下降 需要学习率 正规方程不需要
- 梯度下降 需要迭代求解 正规方程不需要
- 全梯度下降算法FG
- 计算所有样本误差,对其求和再取平均值作为目标值
- 花费时间成本高,内存存储最大
- 随机梯度下降算法SG
- 每轮计算的目标函数 是单个样本误差 每轮梯度更新都与上一轮数据和梯度无关
- 容易错过最优解 收敛效果不稳定
- 随机平均梯度下降SAG
- 每个样本都维护旧梯度,每一轮仅更新一个样本梯度
- 小批量梯度下降算法Mini-batch
- 从训练样本集中随机抽取一个小样本 使用最多
- 正规方程和梯度下降对比
-
MSE 均方误差 MSE=1/m * (求和i=1-m) (y_i - y_均值)^2
- sklearn.metrics.mean_squared_error(y_true,y_pred)
-
欠拟合和过拟合
- 欠拟合 训练集、测试集表现不好
- 解决方法:选择一个新网络架构 花费更多时间 优化算法
- 过拟合 训练集好 测试集不好
- 解决方法:重新清洗数据、采用更多数据,采用正则化、减少特征维度
-
正则化
- 通过限制高次项的系数 防止过拟合
- L2范式 把高阶值降低为特别小的值 岭回归Ridge
- J(w,b) = 1/m(求和)(Loss(y_pre,y_true)) +(λ/2m)* ||w||_2^2
- L1范式 高次项前面的系数变为0 Lass回归
- L1范式 J(w,b) = 1/m(求和)(Loss(y_pre,y_true)) +(λ/2m)* |w|
- 由于绝对值在顶点处不可导,所以会产生很多0,得到稀疏矩阵
- 弹性网络 通过混和比控制 融合L1范式和L2范式 r=0岭回归 r=1Lass
- from sklearn.linear_model import Ridge,ElasticNet,Lasso
- Ridge(alpha=学习率,fit_intercept=True,solve=‘auto’,normalize=False)
- alpha 正则化 力度越大权重系数越小 力度越小权重系数越大
- normaliza 默认封装 标准化