首页 > 编程语言 >4.4 分类算法-逻辑回归与二分类以及分类的评估方法

4.4 分类算法-逻辑回归与二分类以及分类的评估方法

时间:2023-06-11 23:56:35浏览次数:70  
标签:4.4 AUC 样本 预测 回归 分类 test 算法 类别

1 逻辑回归的简介

1.1 简介

逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。

1.2 应用场景

  • 广告点击率(是否会被点击)
  • 是否为垃圾邮件
  • 是否患病
  • 金融诈骗
  • 虚假账号
    我们发现这些其实都是个二分类(正面/反面)

2 逻辑回归的原理

总的步骤就是
激活函数
   sigmoid函数[0,1]
   1/(1+e^(-x))
假设函数/线性模型
   1/(1+e^(-(w1x1+w2x2+----+b)))
损失函数
优化损失

2.1 输入

image
逻辑回归的输入就是一个线性回归的输出。

2.2 激活函数

  • sigmoid函数
    image
    1/(1+e^(-x)),上面公式中的x前面的数就是一个矩阵,就是代表全部的输出
  • 分析
    回归的结果输入到sigmoid函数当中
    输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值

其中1/(1+e^(-x))函数图像为下面的,就是把每一个xi带入到这个函数中都会映射到[0,1]之间,然后我们在算概率
image

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

总的步骤就是
激活函数
   sigmoid函数[0,1]
   1/(1+e^(-x))
假设函数/线性模型
   1/(1+e^(-(w1x1+w2x2+----+b)))
损失函数

优化损失

输出结果解释(重要):假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有一个样本的输入到逻辑回归输出结果0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如果得出结果为0.3那么,训练或者预测结果就为B(0)类别。
所以接下来我们回忆之前的线性回归预测结果我们用均方误差衡量,那如果对于逻辑回归,我们预测的结果不对该怎么去衡量这个损失呢?我们来看这样一张图

image
那么如何去衡量逻辑回归的预测结果与真实结果的差异呢?

2.3 损失函数以及损失优化

损失函数:在前面的回归模型中我们通常情况下算损失函数为(y_predict-y_true)^2平方和/总是,但是这个最后的结果是一个类别,属于那个类别,所以上面的方法不行,所以我们引入了对数似然损失

2.3.1 损失函数

逻辑回归的损失,称之为对数似然损失,公式如下:
分开类别
image
怎么理解单个的式子呢?这个要根据log的函数图像来理解
image

面的图像中我们可以看出来,如果真实值是1的话,我们预测的越接近于1,h(x)就越接近于0,我们预测的越接近于0的话,h(x)越接近于无穷大

image
综合完整损失函数
image
看到这个式子,其实跟我们讲的信息熵类似。
接下来我们呢就带入上面那个例子来计算一遍,就能理解意义了。
image

我们已经知道,log(P), P值越大,结果越小,所以我们可以对着这个损失的式子去分析

2.3.2 优化损失

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

3.逻辑回归的API

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

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

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

4.癌症分类预测-良/恶性乳腺癌肿瘤预测

流程分析
1)获取数据
读取的时候加上names
2)数据的处理
处理缺失值
3)数据集的划分
4)特征工程:
无量纲化处理-标准化
5)逻辑回归预估器
6)模型预估

  • 获取数据
import pandas as pd
import numpy as np
column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
                   'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
                   'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
                       names=column_name)
data.head()

image

  • 数据的处理(缺失值处理)
# 2缺失值处理
#替换成->np.nan
data=data.replace(to_replace="?",value=np.nan)
#2)删除缺失样本
data.dropna(inplace=True)
data.isnull().any()#不存在缺失值

image

  • 数据集的划分
# 数据集划分
from sklearn.model_selection import train_test_split
data.head()
# 筛选特征值和目标值
x=data.iloc[:,1:-1]#列全要
y=data["Class"]#最后一个是类别2是良性,4是恶性
x.head()
y.head()
x_train, x_test, y_train, y_test = train_test_split(x, y)
x_train.head()

image
image

  • 特征工程:无量纲化处理-标准化
# 4、标准化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
x_train

image

  • 逻辑回归预估器(今天的知识)
from sklearn.linear_model import LogisticRegression
# 5、预估器流程
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 逻辑回归的模型参数:回归系数和偏置
estimator.coef_
estimator.intercept_

image

  • 模型评估
# 6、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)

# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)

image
image

5.分类的评估方法

在很多分类场景当中我们不一定只关注预测的准确率!!!!!
比如以这个癌症举例子!!!我们并不关注预测的准确率,而是关注在所有的样本当中,癌症患者有没有被全部预测(检测)出来。

5.1 精确率与召回率

5.1.1混淆矩阵

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

5.1.2 精确率(Precision)与召回率(Recall)

  • 精确率:预测结果为正例样本中真实为正例的比例(了解)

image
TP/(TP+FP)

  • 召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
    image
    TP/(TP+FN)

想上面的那个例子召回率就是真实患有癌症并且被检测出来的

还有其他的评估标准,F1-score,反映了模型的稳健型
image

5.2 分类评估报告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, lr.predict(x_test), labels=[2, 4], target_names=['良性', '恶性']))

image
这个主要应用的是这个召回率:我们发现这个recall,这个召回率为0.96,也就是又100个人换肿瘤的话,我们能检测出来的之后96个

假如说我们共有100个人,如果99个样本癌症,一个非样本癌症
不管怎样我全都预测正例(默认癌症为正例)
准确率:99%
召回率:99/99=100%
精确率:99%
F1-score: 299%100%/199%=99.497%
这个模型是不管怎样都预测为样本癌症,这样是很不负责任的模型,我们应该避免
问题:如何衡量样本不均衡下的评估?

5.2 ROC曲线与AUC指标

5.2.1 知道TPR与FPR

知道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
image
AUC指标就是曲线和x轴,x=1围城的曲线的面积
当TPR==FPR也就是那条红色虚线此时AUC指标=0.5,也就是瞎猜
然后当TPR越接近于1,FPR越接近于0是,AUC指标最大等于1

5.2.3 AUC指标

  • AUC指标就是曲线和x轴,x=1围城的曲线的面积
  • AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率
  • AUC的最小值为0.5,最大值为1,取值越高越好
  • AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

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

5.3.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:每个样本预测的概率值

这里注意y_true这个要求每个样本的真实类别必须得是0或者1,
也就是这个良性为0,恶性为1

用AUC来预测上面那个例子:

# y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
# 将y_test 转换成 0 1
y_true = np.where(y_test > 3, 1, 0)
from sklearn.metrics import roc_auc_score
roc_auc_score(y_true, y_predict)

image

5.2.5 总结

AUC只能用来评价二分类
AUC非常适合评价样本不平衡中的分类器性能

标签:4.4,AUC,样本,预测,回归,分类,test,算法,类别
From: https://www.cnblogs.com/lipu123/p/17473507.html

相关文章

  • 算法题:球反弹高度问题
    一个球从100米高度自由落下,每次落地反弹回原高度一半。求它在第10次落地时候,共经过多少米? 第十次反弹高度是多少?//设经过路程为sum每次反弹高度为F$f=100;$sum=100;for($i=1;$i<=10;$i++){$f=$f/2;$sum=$sum+$f;}echo"共经过".$sum."米,第10次反......
  • 【LeetCode.384打乱数组】Knuth洗牌算法详解
    前两天看网易面筋得知网易云的随机歌曲播放使用了这个算法,遂找题来做做学习一下打乱数组https://leetcode.cn/problems/shuffle-an-array/给你一个整数数组nums,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是等可能的。实现Solutionclass:Solution......
  • 算法题:百钱买鸡问题
    公鸡5文钱一只母鸡3文钱一只小鸡一文钱3只 问100文钱,要买100只鸡,每种鸡不少于一只 那么100只鸡中,公鸡母鸡小鸡各有多少只//设公鸡数g母鸡数m小鸡数x//那么g*5+m*3+x/3=100文for($g=1;$g<=100;$g++){for($m=1;$m<=100;$m++){for($x=1;$x<=1......
  • 神经网络反向传播算法(BP)
    前面讲了神经网络的前向传播算法,下面再对反向传播算法进行总结。反向传播算法也称为误差逆传播(errorBackPropagation),是指基于梯度下降对神经网络的损失函数进行迭代优化求极小值的过程,它不仅可应用于前馈神经网络,还可以用于其他类型的神经网络。需要注意的是,大家提及到的“BP网......
  • 算法题:找出阿姆斯壮数
    Armstrong(阿姆斯壮)数是等于其数字的立方数之和的数字, 如153可以满足1*1*1+5*5*5+3*3*3=153,试写出一程序找出所有的三位数Armstrong数。采用穷举法,把数分成三位,遍历从100到999,如果三个数立方数之和等于它自己,则输出。//找出所有三位数的Armstrong数function......
  • 深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类
    深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制1.时间偏移模块(TSM)视频流的爆炸性增长为以高精度和低成本执行视频理解任务带来了挑战。传统的2DCNN计算成本低,但无法捕捉视频特有的时间信息;3DCNN可以得到良好的性能,但计算量......
  • 图像增强算法受环境影响几种校正方式
    图像增强环境影响几种校正方式由于受到环境,光线、噪音、不同设备拍摄的清晰度和对比度等也会影响到图像最终的采集效果,不能够直接采取图像中的重点部分。以下几种校正方式可以单独应用或者结合使用,以根据图像的特征和需求来提高图像的质量和视觉效果。根据不同的应用场景和目标,选择......
  • 深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类
    深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制1.时间偏移模块(TSM)视频流的爆炸性增长为以高精度和低成本执行视频理解任务带来了挑战。传统的2DCNN计算成本低,但无法捕捉视频特有的时间信息;3DCNN可以得到良好的性能,但计算......
  • 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题
    二、假设我们将球投入到b个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?文心一言:这是一个典型的鸽巢原理(PigeonholePrinciple)问题。假设每次投球时,每个箱子有1/b的概率被选中。我们设投球次数为x。我们首先考虑......
  • 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题
    二、假设我们将球投入到b个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?文心一言:这是一个典型的鸽巢原理(PigeonholePrinciple)问题。假设每次投球时,每个箱子有1/b的概率被选中。我们设投球次数为x。我们首先......