• 分类算法-逻辑回归与二分类


    1、逻辑回归的应用场景

    • 广告点击率
    • 是否为垃圾邮件
    • 是否患病
    • 金融诈骗
    • 虚假账号

    看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器。

    2、 逻辑回归的原理

    2.1 输入

    在这里插入图片描述
    逻辑回归的输入就是一个线性回归的结果。

    2.2 激活函数

    • sigmoid函数
      在这里插入图片描述
    • 分析
      • 回归的结果输入到sigmoid函数当中
      • 输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值

    逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。(方便损失计算)

    输出结果解释(重要):假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有一个样本的输入到逻辑回归输出结果0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如果得出结果为0.3那么,训练或者预测结果就为B(0)类别。

    所以接下来我们回忆之前的线性回归预测结果我们用均方误差衡量,那如果对于逻辑回归,我们预测的结果不对该怎么去衡量这个损失呢?我们来看这样一张图
    在这里插入图片描述
    那么如何去衡量逻辑回归的预测结果与真实结果的差异呢?

    2.3 损失以及优化

    逻辑回归的损失,称之为对数似然损失,公式如下:

    • 分段函数:

    在这里插入图片描述

    y 代表真实值,h(x)代表预测值

    怎么理解单个的式子呢?这个要根据log的函数图像来理解
    在这里插入图片描述

    由图像可以看出,当预测值h(x)等于1的时候,纵轴(损失值)就是0,即损失值最小,符合要求;

    在这里插入图片描述

    由图像可以看出,当预测值h(x)等于0的时候,纵轴(损失值)就是0,即损失值最小,符合要求;

    • 综合完整损失函数
      在这里插入图片描述
      接下来我们呢就带入上面那个例子来计算一遍,就能理解意义了。
      在这里插入图片描述

    2.4 优化

    同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。

    3、逻辑回归API

    • sklearn.linear_model.LogisticRegression(solver=‘liblinear’, penalty=‘l2’, C = 1.0)
      • solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)
        • sag:根据数据集自动选择,随机平均梯度下降
      • penalty:正则化的种类
      • C:正则化力度

    默认将类别数量少的当做正例

    LogisticRegression方法相当于 SGDClassifier(loss=“log”, penalty=" "),SGDClassifier实现了一个普通的随机梯度下降学习,也支持平均随机梯度下降法(ASGD),可以通过设置average=True。而使用LogisticRegression(实现了SAG)

    4、 案例:

    通过学习时间,预测考试是否通过

    5、分类的评估方法

    5.1 精确率与召回率

    5.1.1混淆矩阵

    在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
    在这里插入图片描述

    5.1.2 精确率(Precision)与召回率(Recall)
    • 精确率:预测结果为正例样本中真实为正例的比例(了解)
      在这里插入图片描述
    • 召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
      在这里插入图片描述
      那么怎么更好理解这个两个概念
      在这里插入图片描述
      还有其他的评估标准,F1-score,反映了模型的稳健型

    在这里插入图片描述

    5.1.3 分类评估报告API
    • sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
      • y_true:真实目标值
      • y_pred:估计器预测目标值
      • labels:指定类别对应的数字
      • target_names:目标类别名称
      • return:每个类别精确率与召回率

    根据前面案例,得到结果:

    print("精确率和召回率为:", classification_report(y_test, result, labels=[0, 1], target_names=['通过', '不及格']))
    
    • 1

    在这里插入图片描述

    假设这样一个情况,如果99个样本癌症,1个样本非癌症,不管怎样我全都预测正例(默认癌症为正例),准确率就为99%但是这样效果并不好,这就是样本不均衡下的评估问题
    问题:如何衡量样本不均衡下的评估?

    5.2 ROC曲线与AUC指标

    5.2.1 知道TPR与FPR
    • TPR = TP / (TP + FN)
      • 所有真实类别为1的样本中,预测类别为1的比例
    • FPR = FP / (FP + FN)
      • 所有真实类别为0的样本中,预测类别为1的比例
    5.2.2 ROC曲线
    • ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5

    在这里插入图片描述

    5.2.3AUC指标
    • AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率
    • AUC的最小值为0.5,最大值为1,取值越高越好
    • AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
    • 0.5

    最终AUC的范围在[0.5, 1]之间,并且越接近1越好

    5.2.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:每个样本预测的概率值
    print("AUC指标:", roc_auc_score(y_test, model.predict(X_test)))
    
    • 1

    在这里插入图片描述

    5.2.5、总结
    • AUC只能用来评价二分类
    • AUC非常适合评价样本不平衡中的分类器性能
  • 相关阅读:
    CRM项目记录(一)
    fastadmin完全自定义页面内容
    00后最关注程序员,超8成人接受灵活就业,视频UP主是最想从事的职业
    给C#新增一个时间类型: YearMonth
    『PyQt5-Qt Designer篇』| 11 控件之间的伙伴关系和Tab顺序如何设置?
    傅里叶级数与傅里叶变换
    rust多线程
    高质量SaaS客户支持如何开发?5步教你如何打造!!
    Linux 高级指令
    excel单元格多行文本的excel 提取 公式
  • 原文地址:https://blog.csdn.net/qq_42402817/article/details/133868961