一、逻辑回归简介
逻辑回归是基于线性回归的基础上的,线性回归的输出会作为逻辑回归的输入,通过sigmoid函数将输入的值转化为(0~1)之间的概率,然后设置一个阈值,大于这个阈值的概率将分成 1 类,小于这个阈值的就分为 0 类。
逻辑回归概念 Logistic Regression
• 一种分类模型,把线性回归的输出,作为逻辑回归的输入。
• 输出是(0, 1)之间的值
• 基本思想
利用线性模型 f(x) = wx + b 根据特征的重要性计算出一个值
再使用 sigmoid 函数将 f(x) 的输出值映射为概率值
设置阈值(eg:0.5),输出概率值大于 0.5,则将未知样本输出为 1 类
否则输出为 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)
混淆矩阵作用在测试集样本集中:
真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做真正例(TP,True Positive)
真实值是 正例 的样本中,被分类为 假例 的样本数量有多少,这部分样本叫做伪反例(FN,False Negative)
真实值是 假例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做伪正例(FP,False Positive)
真实值是 假例 的样本中,被分类为 假例 的样本数量有多少,这部分样本叫做真反例(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 曲线:我们分别考虑正负样本的情况:
正样本中被预测为正样本的概率,即:TPR (True Positive Rate)
负样本中被预测为正样本的概率,即:FPR (False Positive Rate)
如图我们可以发现,当曲线越往左上拟合,模型的效果就越好,这个时候FPR最小,即测试集中真实为正例而被预测为假例的样本最少,这个时候TPR最大,即测试集中真实为正例而被预测为正例的样本最多。
而AUC表示的就是曲线下面积,由图我们可知,当面积越大,模型效果就越好。
ROC 曲线图像中,4 个特殊点的含义:
(0, 0) 表示所有的正样本都预测为错误,所有的负样本都预测正确
(1, 0) 表示所有的正样本都预测错误,所有的负样本都预测错误
(1, 1) 表示所有的正样本都预测正确,所有的负样本都预测错误
(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:每个类别精确率与召回率
'''