线性模型是在实践中广泛使用的一类模型,其利用输入特征的线性函数(linear function)进行预测。
1. 基本形式
给定由d个特征描述的样本,其中 是 在第 个特征上的特征值,线性模型(linear model)试图学得一个通过特征的线性组合来进行预测的函数,即:
一般用向量形式写成
其中, 和 学得之后,模型就得以确定。
线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型(nonlinear model) 可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于 直观表达了各特征在预测中的重要性,因此线性模型有很好的可解释性(comprehensibility)。
2. 线性回归
1.1 损失函数
给定数据集 ,其中。假设之间存在线性关系,线性回归试图通过数据集学得
显然,对于不同的组合生成的不同,那么和间的差别也会有所不同。
如何确定和与之间的差距最小,此时可以使用均方误差(Mean-Square Error, MSE)来度量:
也称为损失(目标或代价)函数,用于衡量和(预测值和真实值)之间的误差。为了更好的理解损失函数的意思,请看下面案例:
编号 | 身高 | 体重 |
1 | 160 | 56.3 |
2 | 166 | 60.6 |
3 | 172 | 65.1 |
4 | 174 | 68.5 |
5 | 180 | 75 |
6 | 176 | ? |
给定样本集1~5,为了预测样本6的体重,假设样本中身高和体重具有线性关系,那么可以用线性方程表示两者关系(x为身高,y为体重),则关于k和b的损失函数为,损失函数展开会变成二元二次方程。下面将会讲解如何对该函数求解获得误差最小的k,b组合。
1.2 均方差求解
1.2.1 最小二乘法
均方误差有非常好的几何意义,它对应了常用的欧几里得距离或简称"欧氏距离" (Euclidean distance)。基于均方误差最小化来进行模型求解的方法称为"最小二乘法" (least squ method)。
在线性回归中,最小 乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
求解 和使最小化的过程,称为线性回归
模型的最小二乘"参数估计" (pameter estimation)。我们可以将分别对和进行求偏导,得到
然后令上述两式为0,即可得到和的最优解。
1.2.2 多元线性回归
更一般的情形是如本节开头的数据集 样本由 个属性描述.此时我们试图学得
这称为”多元线性回归“(multivariate linear regression)。
类似的,可利用最小二乘法来对进行估计。为便于讨论,我们把和吸收入向量形式,相应的,把数据集 表示为一个大小的矩阵,其中每行对应于一个样本数据,该行前个元素对应于样本的个特征值,最后一个元素值恒为1,即
再把标记也写成向量形式,则有
对求偏导得到
令上式为0可得到的最优解。但由于涉及矩阵逆运算,比单变量情形要复杂一些,下面做简单讨论。
当为满秩矩阵或者正定矩阵时,令上式为0得
其中是矩阵的逆矩阵,令,则最终学得的多元线性回归模型为
然而,现实任务中 往往不是满秩矩。例如在许多任务中我们会遇到大量的变量,其数目甚至超过样例数,导致的列数多于行数,显然不满秩。此时可解出多个,它们都能使均方误差最小化。选择哪个解作为输出将由学习算法的归纳偏好决定,常见的做法是引入正则化(regularization) 项.
1.2.3 线性回归API
- sklearn.linear_model.LinearRegression(fit_intercept=True)
- 参数:fit_intercept,是否计算偏置(默认计算,False则模型计算(0, 0)点)
- 属性
- LinearRegression.coef_ (回归系数)
- LinearRegression.intercept_(偏置)
1.3 梯度下降思想
1.3.1 概念
机器学习算法都需要最大化或最小化一个函数,这个函数被称为"目标函数",其中我们一般把最小化的一类函数,称为"损失函数"。它能根据预测结果,衡量出模型预测能力的好坏。在求损失函数最小化的过程中使用梯度下降法。
在直线方程中,导数代表斜率,在曲线方程中,导数代表切线的斜率。导数代表着参数,单位变化时,损失函数J相应的的变化。通过上面图中的点可以发现,该点的导数为负值,所以随着参数
的增加,损失函数J减小,因此导数从某种意义上还可以代表方向,对应着损失函数J增大的方向。
综上,如果最小化一个函数,我们就需要得到导数再取个负数,并且再乘以一个系数,为,这个系数通常叫做步长或者叫学习率(Learning rate, Lr)。的取值影响获得求最优解的速度,取值不合适的话甚至得不到最优解,它是梯度下降的一个超参数。太小,减慢收敛速度效率,太大,甚至会导致不收敛。在机器学习中,学习率为:0.001 ~ 0.01
此时,通过循环迭代的思想,给定一个点点,通过梯度下降的方式就可以得出下一个更靠近极值点 点:
为学习率,即每次迭代过程中梯度提升的步长。
1.3.2 局部最优解
对于梯度下降算法而言,最不友好的就是并不是所有的函数都有唯一的极值点。很大概率就是局部最优解,并不是真正的全局最优解。这还只是针对二维平面来说,如果对于高维空间更加相对复杂的环境,就更不好说了。
解决方案:多次运行,随机化初始点。初始点也是梯度下降算法的一个超参数。初始化的方法也有很多
1.3.3 梯度下降算法的分类
在线性回归算法中损失函数具有唯一的最优解。已知多元线性回归函数为:
其中。则,损失函数为:。其中为第个样本的预测值,为第个样本的真实值。则对损失函数求导:
其中, 为第i个样本的向量表示。如果将上式线性回归梯度下降法的梯度向量表示改写为标量表示,有:
其中, 表示第个样本的第个特征值。当有了分量的梯度之后,带入标量梯度下降公式:
全梯度下降算法 FGD
有m个样本,对于方向上的梯度,使用全部样本的梯度值进行迭代
- 由于使用全部数据集,训练速度较慢
小批量梯度下降算法 mini-bantch
有m个样本,对于方向上的梯度,随机选择并使用小批量的样本梯度值进行迭代。
- 结合了 SG 的胆大和 FG 的心细,它的表现也正好居于 SG 和 FG 二者之间
- 目前使用最多,正是因为它避开了 FG 运算效率低成本大和 SG 收敛效果不稳定的缺点
随机平均梯度下降算法 SAG
每次迭代时, 随机选择一个样本的梯度值和以往样本的梯度值的均值
- 训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0, 而 SAG 每轮梯度更新都结合了上一轮梯度值
随机梯度下降算法 SGD
- 简单,高效,不稳定。SG每次只使用一个样本迭代,若遇上噪声则容易陷入局部最优
1.3.4 梯度下降API
- sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='constant', eta0=0.01)
- loss: 损失函数类型,eg:loss=”squared_loss”
- fit_intercept:(是否计算偏置)
- learning_rate (学习率策略):string, optional ,可以配置学习率随着迭代次数不断减小
- 比如:学习率不断变小策略: ‘invscaling’: eta = eta0 / pow(t, power_t=0.25)
- eta0=0.01 (学习率的值)
- 属性:
- SGDRegressor.coef_ (回归系数)
- SGDRegressor.intercept_ (偏置)
1.4 线性回归模型评估
对于线性回归模型,我们希望衡量预测值和真实值之间的差距,可以用到MAE、MSE、RMSE多种测评函数进行评价。
1.4.1 均方误差 Mean Squared Error MSE
n为样本个数,y为实际值,为预测值。MSE 越小模型预测越精准。
1.4.2 平均绝对误差 Mean Absolute Error MAE
n为样本个数,y为实际值,为预测值。MSE 越小模型预测越精准。
1.4.3 均方根误差 Root Mean Squared Error (RMSE)
n为样本个数,y为实际值,为预测值。MSE 越小模型预测越精准。RMSE 是 MSE 的平方根,某些情况下比MES更有用。
1.4.4 波士顿房价预测案例(梯度下降和正规方程)
- MAE反应的是“真实”的平均误差,RMSE会将误差大的数据点放大
- MAE 不能体现出误差大的数据点,RMSE放大大误差的数据点对指标的影响, 但是对异常数据比较敏感
- 通常情况结合MAE和RMSE查看模型的拟合情况
数据源:
1.5 线性回归中的欠(过)拟合问题 — 正则化
- 欠拟合:模型在训练集上表现不好,在测试集上也表现不好。模型过于简单
- 欠拟合在训练集和测试集上的误差都较大
- 过拟合:模型在训练集上表现好,在测试集上表现不好。模型过于复杂
- 过拟合在训练集上误差较小,而测试集上误差较大
1.5.1 问题引入
如上图所示,对于样本中的数据集,用直线来模拟训练模型显示是不恰当,会造成欠拟合情况的产生。显然,数据是一元二次方程抛物线形状的,给模型送入的数据,增加项特征,再用线性模型去拟合即可。
欠拟合解决办法 — 从数据、模型、算法的角度去想解决方案
- 添加其他特征
- 有时出现欠拟合是因为特征项不够导致的,可以添加其他特征项来解决
- “组合”、“泛化”、“相关性”三类特征是特征添加的重要手段
- 添加多项式特征项
- 模型过于简单时的常用套路,例如将线性模型通过添加二次项或三次项使模型泛化能力更强
模拟复杂模型情况(数据添加高次项)
过拟合解决办法
- 存在原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
- 解决办法:
- 重新清洗数据
- 对于过多异常点数据、数据不纯的地方再处理
- 增大数据的训练量
- 对原来的数据训练的太过了,增加数据量的情况下,会缓解
- 正则化
- 解决模型过拟合的方法,在机器学习、深度学习中大量使用
- 减少特征维度,防止维灾难
- 由于特征多,样本数量少,导致学习不充分,泛化能力差
1.5.2 解决过拟合办法 — 正则化
在模型训练时,数据中有些特征影响模型复杂度、或者某个特征的异常值较多,所以要尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化。
正则化如何消除异常点带来的w值过大过小的影响?—— 在损失函数中增加正则化项
- L1正则化
- L2正则化
1.5.3 L1正则化
在损失函数中添加L1正则项(权值向量的绝对值之和),构成新的损失函数:
- 为惩罚系数,该值越大则权重调整的幅度就越大,即:表示对特征权重惩罚力度就越大
- 为均方差,即没有添加正则项的原损失函数
- L1 正则化会使得部分特征的权重趋向于 0,甚至等于 0,使得权重失效,达到特征稀疏的作用
1.5.4 L2正则化
L2正则化,在损失函数中添加L2正则化项(权值向量的平方和),构成新的损失函数:
- L2 正则化会使得权重趋向于 0,一般不等于 0,使权重平滑.
1.5.5 案例—优化过拟合
在上面1.5.1的案例中过拟合中,通过正则化模型来消除过拟合影响。
2. 逻辑回归(对数几率回归)
2.1 原理
上面讲解了如何用线性模型进行回归学习,但是若用作分类问题该如何处理呢?
- 只需找到一个单调可微函数将分类任务的真实标记与线性回归模型的预测值联系起来。
对于二分类问题,样本的输出标记为:,线性回归模型产生的预测值:是真实值,我们需要一种映射关系将真实值转换为值。最简单的方法就是引入阈值:
这个方法看似解决了问题,实则带来了问题,在线性回归模型中,无论是解析方法还是梯度先讲,都需要以梯度为基础。而上述方法在阈值处出现跳跃不可导,在阈值外倒数为0。故上述方法难以训练。
换个角度思考二分类问题,如果把样本的类别看作是有0和1两种取值的随机变量,那么只需要判断之间大小关系,将归为概率大的类别即可。在此我们解决了连续函数拟合离散分类和阶跃函数不可导的问题。我们需要将的取值范围映射到概率分布即可,在实践中,我们通常采用逻辑逻辑斯谛函数(logistic function):
该函数图像:
综上所述,我们只需用逻辑斯谛函数对进行变化,就可以得到符合要求的映射。虽然这一映射不再是线性的,但它依然是以线性函数为基础的,再经过某种变化得到,这样的模型属于广义线性模型。
2. 优化过程-极大似然估计
3. 分类问题评
混淆矩阵
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive) 、假正例 (false positive) 、真反倒(true negative)假反例 (false negative) 四种情形,令 TP FP TN FN 分别表示其对应的样例数,则显然有 TP+FP+TN+FN=样例总数。分类结果的"混淆矩阵" (co usion matrix),如下表所示:
- 真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,叫做真正例(TP,True Positive)
- 真实值是 正例 的样本中,被分类为 假例 的样本数量有多少,叫做伪反例(FN,False Negative)
- 真实值是 假例 的样本中,被分类为 正例 的样本数量有多少,叫做伪正例(FP,False Positive)
- 真实值是 假例 的样本中,被分类为 假例 的样本数量有多少,叫做真反例(TN,True Negative)
注:斜对角线为预测对的正样本数和反样本数
API
准确率(accuracy)
- 又称精度,判断正确的样本数占总样本数的比例
- 计算方法:
- 一般用在样本分布均衡情况下
精准率(Precision)
- 又称查准率:对预测的正例样本的预测准确率
- 若恶性肿瘤当做正例样本,则在预测为恶性肿瘤的样本中,真实为恶性肿瘤样本的比重。
- 计算方法:
召回率(Recall)
- 也叫查全率,指的是预测为真正例样本占所有真实正例样本的比。
- 若恶性肿瘤当做正例样本,则在真实为恶性肿瘤的样本中,被真实预测出来的比重。
- 计算方法:
F1-score
- 对模型在精准度和召回率上的综合预测能力
- 计算方法:
精准率、召回率、f1参数案例:
样本集10样本,有 6 个恶性肿瘤样本,4 个良性肿瘤样本,我们假设恶性肿瘤为正例
- 模型A:预测对了 3 个恶性肿瘤样本,4 个良性肿瘤样本
- 真正例 TP 为:3
- 伪反例 FN 为:3
- 伪正例 FP 为:0
- 真反例 TN:4
- 精度:100%
- 召回率:50%
- F1-score 67%
ㅤ | (预测)正例 | (预测)反例 |
(真实)正例 | 3 | 3 |
(真实)反例 | 0 | 4 |
- 模型B:预测对了 6 个恶性肿瘤样本,1个良性肿瘤样本
- 真正例 TP 为:6
- 伪反例 FN 为:0
- 伪正例 FP 为:3
- 真反例 TN:1
- 精度: 67%
- 召回率: 100
- F1-score:80%
ㅤ | (预测)正例 | (预测)反例 |
(真实)正例 | 6 | 0 |
(真实)反例 | 3 | 1 |
注:虽然召回率、精准率、f1指标依托于混淆矩阵理论而来,但是计算这些指标不需要导入sklearn.metrics.confusion_matrix混淆矩阵类对象
ROC曲线和AUC指标
ROC曲线(Receiver Operating Characteristic curve)
是一种常用于评估分类模型性能的可视化工具。ROC曲线以模型的真正率TPR为纵轴,假正率FPR为横轴,它将模型在不同阈值下的表现以曲线的形式展现出来。
- 正样本中被预测为正样本的概率TPR (True Positive Rate)
- 负样本中被预测为正样本的概率FPR (False Positive Rate
- 曲线中点为(FPR , TPR)
ROC曲线特殊点
- 点(0, 0) :所有的负样本都预测正确,所有的正样本都预测为错误 。相当于点的(FPR值0, TPR值0)
- 点(1, 0) :所有的负样本都预测错误,所有的正样本都预测错误。相当于点的(FPR值1, TPR值0) - 最不好的效果
- 点(1, 1):所有的负样本都预测错误,表示所有的正样本都预测正确。相当于点的(FPR值1,TPR值1)
- 所有的负样本都预测正确,表示所有的正样本都预测正确 。相当于点的(FPR值0,TPR值1) - 最好的效果
AUC指标 (Area Under the ROC Curve)
ROC曲线的优劣可以通过曲线下的面积(AUC)来衡量,AUC越大表示分类器性能越好。
- 当AUC=0.5时,表示分类器的性能等同于随机猜测,效果最差
- 当AUC=1时,表示分类器的性能完美,能够完全正确地将正负例分类。
AUC的API
案例:ROC 曲线的绘制
- 已知:在网页某个位置有一个广告图片,该广告共被展示了 6 次; 有 2 次被浏览者点击了。每次点击的概率见图1。其中正样本{1, 3} 负样本为{2, 4, 5, 6}
- 要求画出:在不同阈值下的ROC曲线
图一:每次点击的概率图
样本 | 是否被点击 | 预计点击概率 |
1 | 1 | 0.9 |
2 | 0 | 0.7 |
3 | 1 | 0.8 |
4 | 0 | 0.6 |
5 | 0 | 0.5 |
6 | 0 | 0.4 |
图二:根据预测点击概率排序之后的图
样本 | 是否被点击 | 预计点击概率 |
1 | 1 | 0.9 |
3 | 1 | 0.8 |
2 | 0 | 0.7 |
4 | 0 | 0.6 |
5 | 0 | 0.5 |
6 | 0 | 0.4 |
阈值 | 取点 | 不同阈值下的点坐标 |
0.9 | 原本为正例的 1、3 号的样本中 3 号样本被分类错误,则 TPR = 1/2 = 0.5
原本为负例的 2、4、5、6 号样本没有一个被分为正例,则 FPR = 0 | (0.5,0) |
0.8 | 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
原本为负例的 2、4、5、6 号样本没有一个被分为正例,则 FPR = 0 | (0, 1) |
0.7 | 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
原本为负类的 2、4、5、6 号样本中 2 号样本被分类错误,则 FPR = 0/4 = 0 | (0.25, 1) |
0.6 | 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
原本为负类的 2、4、5、6 号样本中 2、4 号样本被分类错误,则 FPR = 1/4 = 0.25 | (0.5, 1) |
0.5 | 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
原本为负类的 2、4、5、6 号样本中 2、4、5 号样本被分类错误,则 FPR = 2/4 = 0.5 | (0.75, 1) |
0.4 | 原本为正例的 1、3 号样本被分类正确,则 TPR = 2/2 = 1
原本为负类的 2、4、5、6 号样本全部被分类错误,则 FPR = 3/4 = 0.75 | (1, 1) |
逻辑回归案例 - 电信客户流失预测
1、案例需求
- 已知:用户个人,通话,上网等信息数据
- 需求:通过分析特征属性确定用户流失的原因,以及哪些因素可能导致用户流失。建立预测模型来判断用户是否流失,并提出用户流失预警策略。
2、数据集介绍
3、案例分析步骤
- 数据基本处理
- 主要是查看数据行/列数量
- 对类别数据数据进行one-hot处理
- 查看标签分布情况
- 特征筛选
- 分析哪些特征对标签值影响大
- 对标签进行分组统计,对比0/1标签分组后的均值等
- 初步筛选出对标签影响比较大的特征,形成x、y
- 模型训练
- 样本均衡情况下模型训练
- 样本不平衡情况下模型训练
- 交叉验证网格搜素等方式模型训练
- 模型评估
- 精确率
- Roc_AUC指标计算