做网站怎么赚流量,怎么自己设计网站,怎样建设责任文化,wordpress 韩国 主题目录
一、认识线性回归
1. 介绍
2. 多元线性回归的基本原理#xff08;LinearRegression#xff09;
二、多重共线性
1. 介绍
2. 多重共线性详细解释
三、岭回归#xff08;解决多重共线性问题#xff09;
1. 模型推导
2. 选取最佳的正则化参数取值
四、LassoLinearRegression
二、多重共线性
1. 介绍
2. 多重共线性详细解释
三、岭回归解决多重共线性问题
1. 模型推导
2. 选取最佳的正则化参数取值
四、Lasso解决多重共线性问题
五、多项式回归解决非线性问题
六、回归类的模型评估指标
1. 是否预测到了正确的数值
1均方误差
2绝对均值误差
2. 是否拟合到了足够的信息
七、sklearn中的线性回归自查 一、认识线性回归
1. 介绍 回归是一种 应用广泛的 预测建模技术这种 技术的核心 在于 预测的结果 是连续型变量。理解线性回归可以有 两种角度矩阵的角度和代数的角度。
2. 多元线性回归的基本原理LinearRegression 多元线性回归 指的 是一个样本 有多个特征的 线性回归问题。对于一个有 n 个特征的样本 i 而言它的 回归结果可以 写作方程 w 被统称为 模型的 参数其中 w0 被称为截距interceptw1~wn 被称为 回归系数regression coefficient。这个表达式和 yazb 是同样的性质。其中 y 是目标变量也就是 标签。xi1~xin 是样本 i 上的特征 不同特征。如果考虑有 m 个样本则回归结果 可以被写作 其中 是包含了 m 个全部的样本的回归结果的 列向量。 注通常 使用 粗体的 小写字母来 表示列向量粗体的 大写字母 表示矩阵 或者 行列式。 进一步的可以 使用 矩阵来表示这个方程其中 w 可以被看做是一个结构为n1, 1的列矩阵X 是一个结构为m, n1的特征矩阵则有 线性回归的任务就是 构造一个 预测函数来 映射输入的 特征矩阵 X 和 标签值 y 的 线性关系。这个 预测函数的本质 就是需要 构建的模型而 构造预测函数的 核心就是 找出模型的参数向量 。 在逻辑回归 和 SVM 中都是先定义了 损失函数然后 通过 最小化损失函数 或 损失函数的某种变化 来将求解 参数向量以此 将单纯的 求解问题转化为一个 最优化问题。在 多元线性回归中损失函数如下定义 其中 是样本 i 对应的 真实标签 也就是 是样本 i 在一组参数 下的 预测标签。 现在 只实现了向量上 每个点对应相乘后的 平方和开没有 开平方所以 损失函数是 L2 范式即 欧式距离的 平方结果。这个损失函数实在的 计算了 真实标签和预测值之间的距离。因此我们认为这个损失函数衡量了构造的模型的预测结果和真实标签的差异因此我们 希望预测结果 和 真实值差异 越小越好。经转换的 求解目标 其中右下角的 2 表示向量 的 L2 范式也就是 损失函数 所代表的 含义。在 L2 范式上 开平方就是 损失函数。我们往往 称呼这个式子为 SSE Sum of Sqaured Error误差平方和或者RSS Residual Sum of Squares 残差平方和。在 sklearn 所有官方文档和网页上都称之为 RSS残差平方和。 现在问题转换成了 求解让 RSS 最小化的 参数向量 w这种 通过最小化 真实值 和 预测值之间的 RSS 来求解参数的方法叫做 最小二乘法。现在 残差平方 和 RSS 上对参数向量 w 求导。 在这里逆矩阵 存在的 充分必要条件是 特征矩阵 不存在多重共线性。假设矩阵的逆 是存在的此时我们的 w 就是参数的 最优解。求解出 这个 参数向量就解出了我们的 也就能够计算出我们的 预测值了。 class sklearn.linear_model.LinearRegression(fit_interceptTrue, normalizeFalse, copy_XTrue, n_jobsNone)
参数含义 fit_intercept 布尔值可不填默认为 True 是否计算此模型的截距。如果设置为 False 则不会计算截距 normalize 布尔值可不填默认为 False 设置为 False 时将忽略此参数。如果为 True 则特征矩阵 X 在进入回归之前将 会被减去均值中心化并除以 L2 范式缩放。如果希望进行标准化请在 fit 数据之前使用 preprocessing 模块中的 标准化专用类 StandardScaler copy_X 布尔值可不填默认为 True 如果为真将在 X.copy() 上进行操作否则的话原本的特征矩阵 X 可能被线性回归影响并覆盖 n_jobs 整数或者 None 可不填默认为 None 用于计算的作业数。只在多标签的回归和数据量足够大的时候才生效。除非 None 在 joblib.parallel_backend上下文中否则 None 统一表示为 1 。如果输入 -1 则表示使用全部 的CPU 来进行计算。
属性含义 coef_ 数组形状为 (n_features, ) 或者 (n_targets, n_features) 线性回归方程中估计出的系数。 如果在fit 中传递多个标签当 y 为二维或以上的时候则返回 的系数是形状为n_targets n_features 的二维数组而如果仅传递一个标签则返回的系 数是长度为 n_features 的一维数组。 intercept_ 数组线性回归中的截距项。 二、多重共线性
1. 介绍 多重共线性 是一种 统计现象是 指线性模型中的 特征解释变量之间 由于存在 精确相关关系 或 高度相关关系多重共线性的 存在会使模型 无法建立或者 估计失真。
2. 多重共线性详细解释 在 最后一步中 需要左乘 的逆矩阵而 逆矩阵 存在的 充分必要条件 是特征矩阵 不存在多重共线性。 首先需要 先理解 逆矩阵存在 与否 的 意义 和 影响。逆矩阵的 计算公式 位于 分母的 变量不能 为 0一旦 为 0 则 无法计算出 逆矩阵。因此 逆矩阵 存在的 充分必要条件是矩阵的行 列式不能为 0对于 线性回归而言即是说 不能为 0。这是使用 最小二乘法来 求解线性回归的 核心条件之一。 假设 特征矩阵 结构为m,n则 就是结构为n,m的矩阵乘以结构为m,n的矩阵从而得到结果为n,n的方阵。 在线性代数中可以 通过 行列式的计算 将一个行列式 整合成一个梯形的 行列式 梯形的行列式 表现为所有的数字 都被整合 到对角线的 上方 或 下方通常是上方虽然具体的 数字发生了变化但是 行列式的 大小在 初等行变换 / 列变换 的过程中是 不变的。 矩阵满秩即 转换为 梯形矩阵后 对角线上没有 0是矩阵的行列式不为 0 的充分必要条件。 假设 对于上述矩阵 进行变换 矩阵 A 明显 不是满秩的它 有全零行所以 行列式会 为 0。而 矩阵 B 和 C 没有 全零行 所以满秩。而 矩阵 A 和 矩阵 B 的区别在于A 中存在 着完全 具有 线性关系的两行112和224而 B 和 C 中则 没有这样的 两行。而 矩阵 B 虽然 对角线上 每个元素都不 为 0但具 有非常接近于 0 的 元素 0.02而 矩阵 C 的对角线上 没有任何元素 特别接近于 0。 矩阵 A 中 第一行 和 第三行的 关系被称为 “精确相关关系”即 完全相关一行 可使另一行 为 0。在 这种精确 相关关系 下矩阵 A 的行列式 为 0则 矩阵 A 的逆 不可能存在。在 我们的 最小二乘法中如果矩阵 中存在这种 精确 相关关系则逆 不存在最小二乘法 完全无法使用线性回归 会无法 求出结果。 矩阵 B 中 第一行 和 第三行 的关系 不太一样他们之间 非常接近于 “精确相关关系” 但又 不是完全相关一行 不能 使另一行 为 0这种关系 被称为 “高度相关关系”。在这种 高度 相关关系下矩阵的 行列式 不为 0但 是一个 非常接近 0 的数矩阵 A 的逆 存在不过 接近于 无限大。在这种情况下最小二乘法 可以使用不过 得到的 逆会很大直接 影响我们对参数向量 w 的求解 这样 求解出来的 参数向量 w 会很大因此 会影响建模的 结果造成模型 有偏差 或者 不可用。精确相关关系 和 高度相关关系 并称为 “多重共线性”。在 多重共线性下模型 无法建立或者 模型不可用。 相对的矩阵 C 的行之间 结果 相互独立梯形矩阵 看起来 非常正常它的对角线上 没有任何元素 特别接近于 0因此 其行列式也就 不会接近 0 或者 为 0因此 矩阵 C 得出的 参数向量 w就不会 有太大偏差对于 我们拟合而言是 比较理想的。 所以一个矩阵 如果 要满秩则要 求矩阵中 每个向量之间 不能存在 多重共线性这也 构成了线性回归算法 对于 特征矩阵的要求。 三、岭回归解决多重共线性问题
1. 模型推导 岭回归又称为 吉洪诺夫正则化 Tikhonov regularization。岭回归 在多元线性回归的 损失函数上 加上了正则项表达为 系数 w 的 L2范式即系数w的平方项乘以 正则化系数 a。 依然使用 最小二乘法来求解。假设 特征矩阵结构为m,n系数 w 的结构是1, n则可以有 正则化系数 a 避免了 “精确相关关系” 带来的影响。当 a 越大模型 越不容易受到 共线性的影响。 最小二乘法 一定有解并且 这个解可以通过 a 来进行调节以 确保 不会偏离太多。当然 a 挤占了 w 中由原始的 特征矩阵 贡献的空间因此 a 如果太大也会导致 w 的估计 出现较大的 偏移无法 正确拟合数据的 真实面貌。 # 在sklearn中岭回归由线性模型库中的Ridge类来调用class sklearn.Linear_model.Ridge(alpha1.0, fit_interceptTrue, normalizeFalse, copy_XTrue, max_iterNone, tol0.001, solver‘auto’, random_ stateNone)
2. 选取最佳的正则化参数取值 这一个以 正则化参数 为 横坐标线性模型求解的 系数 w 为纵坐标的图像其中 每一条 彩色的线 都是一个 系数 w。其目标是 建立正则化参数 与 系数 w 之间的 直接关系以此来 观察 正则化参数的 变化 如何影响了 系数 w 的拟合。 岭迹图认为线条 交叉 越多则说明 特征之间的 多重共线性 越高。应该 选择系数较 为 平稳的 喇叭口 所对应的 a 取值 作为 最佳的 正则化参数的 取值。
# 使用交叉验证来选择最佳的正则化系数class sklearn.linear_model.RidgeCV(alphas(0.1, 1.0, 10.0), fit_interceptTrue, normalizeFalse, scoringNonecvNone, gcv_modeNone, store_cv_valuesFalse)
重要参数含义 alphas 需要测试的正则化参数的取值的元祖 scoring 用来进行交叉验证的模型评估指标默认是 R²可自行调整 store_cv_values 是否保存每次交叉验证的结果默认False cv 交叉验证的模式默认是 None 表示默认进行 留一交叉验证 可以输入 Kfold 对象 和 StratifiedKFold 对象 来进行交叉验证 注仅仅当为 None 时每次交叉验证的结果才可以被保存下来 当 cv 有值存在不是 None 时 store_cv_values 无法被设定为 True 重要属性含义 alpha_ 查看交叉验证选中的alpha cv_values_ 调用所有交叉验证的结果只有当 store_cv_valuesTrue 的时候才能够调用因此返回的 结构是(n_samples, n_alphas) 重要接口含义 score 调用Ridge类不进行交叉验证的情况下返回的R平方 四、Lasso解决多重共线性问题 Lasso 全称 最小绝对收缩 和 选择算子 least absolute shrinkageand selection operator。和 岭回归一样Lasso 是 被创造来 作用于 多重共线性问题的 算法Lasso 使用的是系数 w 的 L1范式L1范式则是系数w的绝对值乘以 正则化系数 a所以 Lasso 的损失函数 表达式为 使用 最小二乘法来求解 Lasso 中的 参数 w对损失函数 进行求导 Lasso 无法解决特征之间 “精确相关” 的问题。当使用 最小二乘法 求解线性回归 时如果 线性回归 无解 或者 报除零错误换 Lasso 不能解决任何问题。 幸运的是在现实中 会 比较少遇到 “精确相关” 的多重共线性问题大部分 多重共线性 问题应该是 “高度相关”而 如果我们假设方阵 的逆是一定存在的那可以有 通过 增大 a可以为 w 的计算 增加一个 负项从而 限制参数估计中 w 的大小而 防止多重共线性 引起的 参数 w 被估计 过大导致 模型失准的 问题。Lasso 不是 从根本上 解决多重共线性问题而是 限制多重共线性带来的影响。 class sklearn.linear_model.Lasso(alpha1.0, fit_interceptTrue, normalizeFalse, precomputeFalse copy_XTrue, max_iter1000, tol0.0001, warm_startFalse, positiveFalse, random_ stateNone, selection‘cyclic’) 比起岭回归Lasso 所带的 L1 正则项 对于系数的 惩罚要 重得多并且 它会 将系数 压缩至 0因此 可以被用来 做特征选择。也因此往往让 Lasso 的正则化 系数 a 在很小的 空间中变动以此来 寻找最佳的正则化系数。 # 使用交叉验证的Lasso类class sklearn.linear_model.LassoCV (eps0.001, n_alphas100, alphasNone, fit_interceptTrue, normalizeFalse, precompute’auto’, max_iter1000, tol0.0001, copy_XTrue, cv’warn’, verboseFalse, n_jobsNone, positiveFalse, random_stateNone, selection’cyclic’)
参数含义 eps 正则化路径的长度默认0.001 n_alphas 正则化路径中 的个数默认100 alphas 需要测试的正则化参数的取值的元祖默认 None 。当不输入的时候自动使用 eps 和 n_alphas 来自动生成带入交叉验证的正则化参数 cv 交叉验证的次数属性含义 alpha_ 调用交叉验证选出来的最佳正则化参数 alphas_ 使用正则化路径的长度和路径中 的个数来自动生成的用来进行交叉验证的正则化参数 mse_path 返回所以交叉验证的结果细节 coef_ 调用最佳正则化参数下建立的模型的系数 五、多项式回归解决非线性问题 非线性模型能够 拟合 或 处理 线性数据。线性数据 对于非线性模型来说 太过简单很容易就把训练集上的 训练得很高。 线性模型若用来 拟合非线性数据 或者 对非线性可分的数据 进行分类那通常都会 表现糟糕。改善线性 模型 在非线性数据上 的效果的方法之一 时进行分箱并且从 下图来 看分箱的 效果非常好甚至 高过一些非线性模型。 线性模型非线性模型 代表模型 线性回归逻辑回归弹性网感知机决策树树的集成模型使用高斯核的SVM 模型特点 模型简单运行速度快模型复杂效果好但速度慢 数学特征回归 自变量是一次项自变量不都是一次项 分类 决策边界上的自变量都是一次项决策边界上的自变量不都是一次项 可视化 回归 拟合出的图像是一条直线拟合出的图像不是一条直线 分类 决策边界在二维平面是一条直线决策边界在二维平面不是一条直线 擅长数据类型 主要是线性数据线性可分数据所有数据 补充 当获 得数据 时往往 希望 使用线性 模型 来 对数据进行 最初的拟合 线性回归用于回归逻辑回归 用于分类 如果线性 模型 表现良好则 说明数据 本身很 可能是 线性的或者 线性可分 的如果 线性模型 表现糟糕那毫无疑问 我们 会投入 决策树随机森林 这些模型的 怀抱就 不必浪费时间 在线性模型 上了。 除了 分箱 之外另一种更普遍 的 用于解决 “线性回归只能处理线性数据” 问题的手段就是使用多项式回归对线性回归进行改进。这样的手法 是 机器学习研究者们 从支持向量机 中 获得的支持向量机 通过升维 可以 将非线性可 分数据转 化为 线性可分然后 使用核函数 在低维空间中 进行计算这是一种 “高维呈现低维解释” 的思维。我们也 可以让 线性回归 使用 类似于 升维的 转换将数据 由非线性转换 为线性从而 为线性 回归赋予处理 非线性数据 的能力。 多项式变化这是一种 通过 增加 自变量上的 次数而 将数据 映射到 高维空间的 方法只要 设定一个 自变量上的 次数大于 1就可以 相应地 获得数据投影 在高次方的 空间中的 结果。 当原始特征为 二维 的时候多项式 的 二次变化 突然 将特征 增加到了 六维其中 一维是常量截距。当继续 适用 线性回归去拟合的时候我们会 得到的方程如下 当进行多项式转换的时候多项式会 产出到 最高次数 为止的 所有低 高次项。如果 太过分的 共线性还是会 影响到模型 的拟合。因此 sklearn 中存在着 控制是否要 生成平方 和 立方项的 参数 interaction_only默认为 False以减少共线性只生成交互项。 随着 原特征矩阵的 维度上升随着 我们规定的 最高次数的 上升数据 会变得 越来越复杂维度 越来越多并且 这种维度的 增加 并不能用太简单的 数学公式表达出来。因此多项式回归 没有固定的模型表达式多项式回归的 模型最终长什么 样子是 由数据 和 最高次数决定的。 class sklearn.preprocessing.PolynomialFeatures(degree2, interaction_onlyFalse, include_ biasTrue) 参数 含义 degree 多项式中的次数默认为 2 interaction_only 布尔值是否只产生交互项默认为 False include_bias 布尔值是否产出与截距项相乘的 默认 True 补充多项式回归是线性还是非线性模型 来看 原始特征 为二维多项式 次数 为 二次的 多项式回归 表达式 经过变化后的 数据有 六个特征分别是 从 第四个特征 开始都是 高次特征而这些 高次特征 与 y 之间的 关系 必然 不是线性的。但也 可以换—种方式 来思考 这个问题假设 我们不知道 这些特征 是由多项式变化 改变来的只是 拿到了 含有 六个特征的 任意数据于是 现在对于 我们来说这 六个特征就是 通过检验发现z1 和 z4、z5 之间存 在一定的 共线性z2 也是如此但是 现实中的数据 不太可能 完全不相关因此 一部分的 共线性是 合理的。所以 使用 线性回归 来对 数据进行拟合然后得到了方程 多项式正是 利用线性回归的这种 “扭曲”为线性模型赋予了 处理非线性数 据的能力。 六、回归类的模型评估指标 在回归类算法中有 两种不同的 角度来 看待回归的效果① 是否预测到了正确的数值。② 是否拟合到了足够的信息。这两种角度分别 对应着不同的 模型评估指标。
1. 是否预测到了正确的数值
1均方误差 均方误差本质是在 RSS 的基础上 除以了 样本总量得到了 每个样本量上的 平均误差。有了 平均误差就可以 将平均误差 和 我们的标签的 取值范围 在一起比较以此 获得—个较为可靠的评估依据。 在 sklearn 当中有两种方式 调用 这个评估指标一种是使用 sklearn 专用的模型评估模块 metrics 里的类 mean_squared_error另一种是 调用 交叉验证的类 cross_val_score 并使用里面的 scoring 参数来设置使用均方误差。 我们 在决策树 和 随机森林中 都提到过虽然 均方误差永远 为正但是 sklearn 中的 参数scorin g下均方误差 作为评判标准时却是计算 “负均方误差”neg_mean_squared_error。这是因为 sklearn 在 计算模型评估指标的 时候会 考虑指标本身的 性质均方误差 本身是一种 误差所以被 sklearn 划分为模型的 一种损失loss。在 sklearn 当中所有的损失都使用负数表示因此 均方误差也 被显示为 负数了。真正的 均方误差 MSE 的数值其实就是 neg_mean_squared_error 去掉负号的 数字。 2绝对均值误差 MAEMean_absolute_error绝对均值误差。其表达的 概念与均方误差 完全一致在 真实标签 和 预测值之间的差异外 使用的是 L1 范式绝对值。 在 sklearn 中使用 命令 from sklearn.metrics import mean_absolute_error 来调用 MAE同时也可以使用交叉验证中的 scoringneg_mean_absolute _error以此在 交叉验证时调用 MAE。
2. 是否拟合到了足够的信息 这张图其中 红色线 是真实标签而 蓝色线 是拟合模型。对于 这样的一个 拟合模型如果使用 MSE 来对它 进行判断它的 MSE 会很小因为 大部分 样本其实都 被完美拟合了少数样本的 真实值 和 预测值 的巨大 差异在 被均分到 每个样本上之后MSE 就会很小。但 这样的 拟合结果 必然不是一个 好结果因为 一旦新样本 是处于 拟合曲线的 后半段的预测结果 必然会有巨大的偏差。 我们定义了 来帮助我们 其中 是真实标签 是预测结果 是均值 如果除以 样本量 m 就是方差。方差的 本质 是 任意一个 值和样本均值的 差异差异越大这些值所带的 信息越多。在 中分子 是真实值 和 预测值之差的 差值也就是 模型没有捕获到的 信息总量分母 是真实标签 所带的 信息量所以其衡量的是 1 - 我们的模型没有捕获到的信息量占真实标签中所带的信息量的比例所以 越接近 1 越好。 可以使用三种方式来调用① 直接从 metrics 中导入 r2_score输入 预测值和真实值 后打分。② 直接 从线性回归 LinearRegression 的的接口 score 来进行调用。③ 是在交叉验证中输入 “r2” 来调用。 七、sklearn中的线性回归自查 涉及模块linear_model
类 / 函数含义普通线性回归 linear_model.LinearRegression 使用普通最小二乘法的线性回归 岭回归 linear_model.Ridg 一种将 L2 作为正则化工具的线性最小二乘回归 linear_model.RidgeCV 带交叉验证的岭回归 linear_model.RidgeClassifier 岭回归的分类器 linear_model.RidgeClassifierCV 带交叉验证的岭回归的分类器 linear_model.ridge_regression 【函数】用正太方程法求解岭回归 LASSO linear_model.Lasso 使用 L1 作为正则化工具来训练的线性回归模型 linear_model.LassoCV 带交叉验证和正则化迭代路径的 Lasso linear_model.LassoLars 使用最小角度回归求解的 Lasso linear_model.LassoLarsCV 带交叉验证的使用最小角度回归求解的 Lasso linear_model.LassoLarsIC 使用 BIC 或 AIC 进行模型选择的使用最小角度回归求解的Lasso linear_model.MultiTaskLasso 使用 L1 / L2 混合范数作为正则化工具训练的多标签Lasso linear_model.MultiTaskLassoCV 使用 L1 / L2 混合范数作为正则化工具训练的带交叉验证的多标签 Lasso linear_model.lasso_path 【函数】用坐标下降计算 Lasso 路径弹性网 linear_model.ElasticNet 一种将 L1 和 L2 组合作为正则化工具的线性回归 linear_model.ElasticNetCV 带交叉验证和正则化迭代路径的弹性网 linear_model.MultiTaskElasticNet 多标签弹性网 linear_model.MultiTaskElasticNetCV 带交叉验证的多标签弹性网 linear_model.enet_path 【函数】用坐标下降法计算弹性网的路径最小角度回归 linear_model.Lars 最小角度回归Least Angle RegressionLAR linear_model.LarsCV 带交叉验证的最小角度回归模型 linear_model.lars_path 【函数】使用 LARS 算法计算最小角度回归路径或 Lasso 的路径正交匹配追踪 linear_model.OrthogonalMatchingPursuit 正交匹配追踪模型OMP linear_model.OrthogonalMatchingPursuitCV 交叉验证的正交匹配追踪模型OMP linear_model.orthogonal_mp 【函数】正交匹配追踪OMP linear_model.orthogonal_mp_gram 【函数】Gram正交匹配追踪OMP贝叶斯回归 linear_model.ARDRegression 贝叶斯 ARD 回归。 ARD 是自动相关性确定回归 Automatic Relevance Determination Regression 是一种类似于最小二乘的用来计算参数向量的数学方法。 linear_model.BayesianRidge 贝叶斯岭回归其他回归 linear_model.PassiveAggressiveClassifier 被动攻击性分类器 linear_model.PassiveAggressiveRegressor 被动攻击性回归 linear_model.Perceptron 感知机 linear_model.RANSACRegressor RANSACRANdom SAmple Consensus算法。 linear_model.HuberRegressor 胡博回归对异常值具有鲁棒性的一种线性回归模型 linear_model.SGDRegressor 通过最小化 SGD 的正则化损失函数来拟合线性模型 linear_model.TheilSenRegressor Theil-Sen 估计器一种鲁棒的多元回归模型