逻辑回归以及分类评估方法

 一、逻辑回归简介

        逻辑回归是基于线性回归的基础上的,线性回归的输出会作为逻辑回归的输入,通过sigmoid函数将输入的值转化为(0~1)之间的概率,然后设置一个阈值,大于这个阈值的概率将分成类,小于这个阈值的就分为类。

        

逻辑回归概念 Logistic Regression

• 一种分类模型,把线性回归的输出,作为逻辑回归的输入。

• 输出是(0, 1)之间的值

• 基本思想

  1. 利用线性模型 f(x) = wx + b 根据特征的重要性计算出一个值

  2. 再使用 sigmoid 函数将 f(x) 的输出值映射为概率值

    1. 设置阈值(eg:0.5),输出概率值大于 0.5,则将未知样本输出为 1 类

    2. 否则输出为 0 类

3.逻辑回归的假设函数 h(w) = sigmoid(wx + b )

线性回归的输出,作为逻辑回归的输入

        

二、逻辑回归的损失函数

        首先逻辑函数的假设函数是 :  h(w) = sigmoid(wx + b ),那么怎么衡量预测值和真实值的损失呢,这里需要用到一个数学知识 : 极大似然估计

极大似然估计:

设模型中含有待估参数w,可以取很多值。已经知道了样本观测值,从w的一切可能值中(选出一个使该观察值出现的概率为最大的值,作为w参数的估计值,这就是极大似然估计。(顾名思义:就是看上去那个是最大可能的意思)

        将极大似然估计转化为极大似然损失就成为了逻辑回归的损失函数

同时预测n个样本的类别,全部预测正确的概率的最大值 这就是极大似然估计 将其转化成对数和取负号就得到损失函数,这时求损失函数的最小值就可以得到最好的w和b这是逻辑回归的损失函数  逻辑回归的损失函数是由极大似然估计而来的

 

三、逻辑回归的API

        • sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0)

        • solver 损失函数优化方法: 1: liblinear(正规方程法) 对小数据集场景训练速度更快,sag (随机梯度下降算法)和saga(平均随机梯度下降算法) 对大数据集更快一些。

        2 正则化:1: sag、saga 支持L2 正则化或者没有正则化

                         2 :liblinear 和 saga 支持 L1 正则化

        • penalty:正则化的种类,l1 或者l2 • C:正则化力度

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

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(solver='saga',penalty='L1',C=0.2)
lr.fit(x_train, y_train)
pred=lr.predict(x_test)
print(pred)

 四、分类评估方法(都是在测试集上进行评估的)

1. 混淆矩阵

        

API: 

from sklearn.metrics import confusion_matrix
result1 = confusion_matrix(y_ture, y_pred1,labels=labels)

混淆矩阵作用在测试集样本集中:

  1. 真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做真正例(TP,True Positive)

  2. 真实值是 正例 的样本中,被分类为 假例 的样本数量有多少,这部分样本叫做伪反例(FN,False Negative)

  3. 真实值是 假例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做伪正例(FP,False Positive)

  4. 真实值是 假例 的样本中,被分类为 假例 的样本数量有多少,这部分样本叫做真反例(TN,True Negative)

        接下来的 精确率(Precision),召回率(Recall),和f1_score等评估方法都是在混淆矩阵的基础上的。

2. 精确率

        精确率也叫做查准率,指的是对正例样本的预测准确率。即在所有预测为正例的样本中真正为正例的比例有多少,所以精确率主要是求预测的准确率。

下面介绍一下API:pos_lables参数表示只报告正例的结果,这个参数只在二分类中使用

from sklearn.metrics import precision_score
print(precision_score(y_ture,y_pred1,pos_lables='正例'))

3. 召回率

        召回率也叫做查全率,指的是预测为真正例样本占所有真实正例样本的比重。即真实为正例的样本有多少被预测为正例了。

下面介绍一下API:pos_lables参数表示只报告正例的结果,这个参数只在二分类中使用

from sklearn.metrics import recall_score
print(recall_score(y_ture,y_pred1,pos_label='正例'))

4. fi_score

        如果我们对模型的精度、召回率都有要求,希望知道模型在这两个评估方向的综合预测能力如何?则可以使用 F1-score 指标,或者不确定使用精确率还是召回率,那么可以考虑使用fi_score。

下面介绍一下API:pos_lables参数表示只报告正例的结果,这个参数只在二分类中使用

from sklearn.metrics import f1_score
print(f1_score(y_ture,y_pred1,pos_label='正例'))

5.  ROC曲线和AUC指标

        ROC曲线和AUC指标其实和混淆矩阵关系不是很大 

        ROC 曲线:我们分别考虑正负样本的情况:

  1. 正样本中被预测为正样本的概率,即:TPR (True Positive Rate)

  2. 负样本中被预测为正样本的概率,即:FPR (False Positive Rate)

         如图我们可以发现,当曲线越往左上拟合,模型的效果就越好,这个时候FPR最小,即测试集中真实为正例而被预测为假例的样本最少,这个时候TPR最大,即测试集中真实为正例而被预测为正例的样本最多。

        而AUC表示的就是曲线下面积,由图我们可知,当面积越大,模型效果就越好。

        ROC 曲线图像中,4 个特殊点的含义:

  1. (0, 0) 表示所有的正样本都预测为错误,所有的负样本都预测正确

  2. (1, 0) 表示所有的正样本都预测错误,所有的负样本都预测错误

  3. (1, 1) 表示所有的正样本都预测正确,所有的负样本都预测错误

  4. (0, 1) 表示所有的正样本都预测正确,所有的负样本都预测正确

        注意ROC曲线的绘制是在逻辑回归的阈值取不同值下得到的结果所绘制而成,阈值就是sigmoid算出来的一系列概率要分类的阈值。 

        计算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_pred:预测得分,可以是正例的估计概率、置信值或者分类器方法的返回值

5. classification_report 逻辑回归评估报告

        这个API输出的结果包括了 精确率、召回率、fi_score等等,

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

  • 37
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值