一、逻辑回归介绍
逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。
1.逻辑回归的应用场景
- 广告点击率
- 是否为垃圾邮件
- 是否患病
- 金融诈骗
- 虚假账号
这些例子都是属于两个类别之间的判断。简单来说,逻辑回归就是解决二分类问题的利器。
2.逻辑回归的原理
-
定义逻辑函数:逻辑回归使用逻辑函数(sigmoid函数)将线性回归模型的输出转换为一个概率值。逻辑函数的定义如下:
s i g m o i d ( z ) = 1 / ( 1 + e x p ( − z ) ) sigmoid(z) = 1 / (1 + exp(-z)) sigmoid(z)=1/(1+exp(−z))
其中,z是线性回归模型的输出,exp()是自然指数函数。 -
构建线性回归模型:假设有一个包含n个特征的样本x,对应的特征权重为w,截距项为b。线性回归模型的输出为:
z = w 0 x 0 + w 1 x 1 + . . . + w n x n + b z = w₀x₀ + w₁x₁ + ... + wₙxₙ + b z=w0x0+w1x1+...+wnxn+b
其中,x₀为常数项,取值为1。 -
应用逻辑函数:将线性回归模型的输出z带入逻辑函数中,得到样本属于某个类别的概率p。p的取值范围在0到1之间。
p = s i g m o i d ( z ) = 1 / ( 1 + e x p ( − z ) ) p = sigmoid(z) = 1 / (1 + exp(-z)) p=sigmoid(z)=1/(1+exp(−z)) -
设置阈值:为了进行分类,需要将概率值p转化为二分类的结果。通常,可以设置一个阈值,如0.5。当p大于等于0.5时,将样本预测为正类(1),否则预测为负类(0)。
-
模型训练与参数估计:使用训练数据集,通过最大似然估计或梯度下降等优化方法,估计模型的参数w和b,使得模型对训练数据的预测与实际标签尽可能一致。
二、逻辑回归的损失及优化
1.损失
在逻辑回归中,常用的损失函数是二元交叉熵损失函数(Binary Cross-Entropy Loss),也称为对数损失函数(Log Loss)。
对于二元分类问题,给定一个样本的真实标签y(0或1)和逻辑回归模型的预测概率p,二元交叉熵损失函数可以定义为:
L ( y , p ) = − [ y ∗ l o g ( p ) + ( 1 − y ) ∗ l o g ( 1 − p ) ] L(y, p) = -[y * log(p) + (1 - y) * log(1 - p)] L(y,p)=−[y∗log(p)+(1−y)∗log(1−p)]
其中,y是样本的真实标签,p是逻辑回归模型预测样本属于正例(类别1)的概率。
无论何时,我们都希望损失函数值,越小越好
- 当y=1时,我们希望p值越大越好
- 当y=0时,我们希望p值越小越好
对于逻辑回归问题,完整的损失函数是将所有训练样本的二元交叉熵损失函数的平均值或总和。
假设有m个训练样本,每个样本的真实标签为yᵢ(0或1),逻辑回归模型的预测概率为pᵢ。那么完整的损失函数可以定义为:
L ( w , b ) = ( 1 / m ) ∗ Σ [ − y i ∗ l o g ( p i ) − ( 1 − y i ) ∗ l o g ( 1 − p i ) ] L(w, b) = (1/m) * Σ[-yᵢ * log(pᵢ) - (1 - yᵢ) * log(1 - pᵢ)] L(w,b)=(1/m)∗Σ[−yi∗log(pi)−(1−yi)∗log(1−pi)]
其中,w是特征权重向量,b是截距项。
2.优化
同样使用梯度下降算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。
三、逻辑回归API
-
sklearn.linear_model.LogisticRegression(solver=“liblinear”,penalty=“l2”,C=1.0)
- solver可选参数:(“liblinear”,“sag”,“saga”,“newton-cg”,“lbfgs”)
- 默认:”liblinear“;用于优化问题的算法。
- 对于小数据集来说,"liblinear"是个不错的选择,而”sag“和”saga“对于大型数据集会更快。
- 对于多分类问题,只有”newton-cg“,”sag“,”saga“和”lbfgs“可以处理多项损失;”liblinear“仅限于二分类问题。
- penalty:正则化种类
- C:正则化力度
默认将类别数量少的当作正例。
LogisticRegression方法相当于SGDClassifier(loss=“log”,penalty""),SGDClassifier实现了一个普通的随机梯度下降算法(SG),而使用LogisticRegression(实现了SAG)
- solver可选参数:(“liblinear”,“sag”,“saga”,“newton-cg”,“lbfgs”)
四、逻辑回归的评估指标
- 准确率(Accuracy):准确率是最常见的评估指标,表示模型预测正确的样本数与总样本数之比。
- 精确率(Precision):精确率衡量模型在所有预测为正例的样本中,真正例的比例。
- 召回率(Recall):召回率衡量模型在所有真实正例中,正确预测为正例的比例。
- F1分数(F1 Score):F1分数是精确率和召回率的调和平均值,综合考虑了两者的性能。
这些评估指标可以帮助我们全面评估逻辑回归模型的性能。准确率衡量了整体预测的准确性,精确率和召回率则关注了模型在正例预测和真实正例之间的匹配情况。F1分数综合考虑了精确率和召回率,适用于平衡精确率和召回率的情况。
除了上述指标,还可以考虑使用混淆矩阵、ROC曲线和AUC(Area Under the Curve)等指标来评估逻辑回归模型的性能,具体选择哪种指标取决于具体问题和需求。
五、混淆矩阵
1.混淆矩阵
在分类任务下,预测结果与真实结果之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
由上图可以看出,当预测结果与真实结果一样时,才是真的;预测结果与真实结果不一致时,是伪
2.精确率(Precision)与召回率(Recall)
-
精确率(Precision):精确率衡量模型在所有预测为正例的样本中,真正例的比例。 精确率可以计算为:
P r e c i s i o n = T P / ( T P + F P ) Precision = TP / (TP + FP) Precision=TP/(TP+FP) -
召回率(Recall):召回率衡量模型在所有真实正例中,正确预测为正例的比例。召回率可以计算为:
R e c a l l = T P / ( T P + F N ) Recall = TP / (TP + FN) Recall=TP/(TP+FN)
3.其他分类评估方法
- F1分数(F1 Score):F1分数是精确率和召回率的调和平均值,综合考虑了两者的性能。F1分数可以计算为:
F 1 S c o r e = 2 ∗ ( P r e c i s i o n ∗ R e c a l l ) / ( P r e c i s i o n + R e c a l l ) F1 Score = 2 * (Precision * Recall) / (Precision + Recall) F1Score=2∗(Precision∗Recall)/(Precision+Recall)
4.分类评估API
-
sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None)
- y_true:真实目标值
- y_pred:预测的目标值
- labels:指定类别对应的数字
- target_names:目标类别名称
- return:每个类别精确率与召回率
# 5.精确率\召回率指标评价
ret = classification_report(y_true=y_test,y_pred=y_pre,labels=(2,4),target_names=("良性","恶性"))
print(ret)
5.如何衡量样本不均衡下的评估?
假设这样一个情况,如果有99个样本癌症,1个样本非癌症,不管怎样我全都预测正例(默认癌症为正例),准确率就为99%。但是这样效果并不好,会有一个误诊的,这属于很严重的医学事故。这就是样本不均衡下的评估问题。
-
怎样判断样本是否均衡?
在二分类问题中,若两个分类的比例大于4:1,则认为这个样本不均衡。
在样本不均衡的情况下,就需要ROC曲线和AUC指标来进行评估
六、ROC曲线与AUC指标
1.TPR与FPR
- TPR=TP/(TP+FN)
- 所有真实类别为1的样本中,预测类别为1的比例
- FPR=FP/(FP+TN)
- 所有真实类别为0的样本中,预测类别为1的比例
2.ROC曲线
-
ROC(Receiver Operating Characteristic)曲线是用于评估二分类模型性能的一种常用工具。它通过绘制分类器在不同阈值下的真正例率(True Positive Rate,TPR)与假正例率(False Positive Rate,FPR)之间的关系来展示模型在正例和反例之间的权衡。
-
ROC曲线的横轴是FPR,纵轴是TPR。在绘制ROC曲线时,我们通过改变分类器的阈值来计算不同情况下的TPR和FPR。
-
理想情况下,一个性能良好的分类器的ROC曲线应该尽可能地靠近左上角,即TPR接近1且FPR接近0。这表示分类器在最小化假正例的同时,能够最大化真正例的分类。对角线上的点(FPR = TPR)代表了随机猜测的分类器。
3.AUC指标
- AUC(Area Under the Curve)是ROC曲线下的面积,是一种常用的评估指标,用于度量二分类模型的性能。AUC值的范围在0到1之间,值越接近1表示分类器的性能越好,值越接近0.5表示分类器的性能越接近于随机猜测。
- 当AUC值接近1时,说明模型能够很好地将正样本排在负样本之前;当AUC值接近0.5时,说明模型的性能等同于随机猜测;当AUC值小于0.5时,说明模型的性能较差,甚至比随机猜测还要差。
- AUC作为一种综合评估指标,相对于简单的准确率或精确率等指标,能够更全面地反映分类器的性能,尤其在类别不平衡的情况下更为有效。它不受分类阈值的影响,能够对分类器在不同阈值下的性能进行比较和评估。
4.AUC计算API
-
from sklearn.metrics import roc_auc_score
- sklearn.metrics.roc_auc_score(y_true,y_score)
- 计算ROC曲线面积,即AUC值
- y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
- y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值
- sklearn.metrics.roc_auc_score(y_true,y_score)
-
AUC只能用来评价二分类
-
AUC非常适合评价样本不均衡中的分类器性能