首页IT科技逻辑回归原理与应用(逻辑回归(Logistic Regression)原理及其应用)

逻辑回归原理与应用(逻辑回归(Logistic Regression)原理及其应用)

时间2025-09-17 00:46:21分类IT科技浏览5685
导读:目录...

目录

第一章:逻辑回归的应用场景

第二章:逻辑回归的原理

1.输入

2.Sigmoid函数

3.损失函数

4.优化损失

采用梯度下降:

第三章 逻辑回归应用案例

1.数据集

 2.具体流程

1.读取数据

 2.缺失值处理

3.划分数据集

4.标准化

5.预估器流程

6.模型评估

7.结果展示

第四章 分类评估算法

 1.分类的评估方法------精确率与召回率

精确率:

召回率:

F1-score

2.分类的评估方法------ROC曲线和AUC指标

第一章:逻辑回归的应用场景

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

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

注意:逻辑回归虽然名字中有回归二字        ,但是它不是回归算法        ,而是分类算法        。

第二章:逻辑回归的原理

1.输入

这是线性回归输出的结果                        ,我们一般可以写成矩阵形式        。如下:

权重和偏置分别用矩阵表示之后                ,将上面的式子可以写成下面的:

 重点:逻辑回归的输入就是一个线性回归的结果                        。

2.Sigmoid函数

图像为:

观察该图像        ,自变量取值范围是(-∞                        ,+∞)                ,因变量取值范围为(0,1),意思是无论自变量取值多少                        ,都可以通过sigmoid函数映射到(0,1)之间                。

总结:sigmoid函数                        ,会把线性回归的结果映射到【0,1】之间,假设0.5为阈值                ,默认会把小于0.5的为0                        ,大于0.5的为1        ,这样就可以分类了 

假设:预测函数为:

其中

 以上两式的意思是                ,先把线性回归的结果用矩阵表示                        ,在将表示的结果放到sigmoid函数当中        。

分类任务:

理解:以丢硬币的概率举例        ,假如正面的概率是0.7        ,那么反面的概率是1-0.7=0.3

将上面两个式子进行整合                        ,得到:

这个式子的特点                ,当y=0的时候        ,整体会等于右边这个式子                        ,当y=1的时候                ,整体会等于左边这个式子                        。 

3.损失函数

为求出好的逻辑回归,引出损失函数 :

①损失函数是体现“预测值                ”和“真实值                        ”                        ,相似程度的函数

②损失函数越小                        ,模型越好

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

这个式子也不陌生                        ,将上面整合的式子        ,取对数                ,原先是相乘                        ,取对数之后会相加        ,指数也可以移到前面                。

假定样本与样本之间相互独立        ,那么整个样本集生成的概率即为所有样本生成概率的乘积                        ,再将公式对数化                ,便可得到如下公式:

 举例:求损失

其中        ,y代表真实结果                        ,h(x)或者1-h(x)表示的是逻辑回归结果(也是预测值)                ,将值带入即可得到。

4.优化损失

采用梯度下降:

理解:α为学习速率,需要手动指定                        ,α旁边的整体表示方向

沿着这个函数下降的方向找                        ,最后就能找到山谷的最低点,然后更新W值

使用:面对训练数据规模十分庞大的任务                 ,能够找到较好的结果 

图像表示如下:

就是不断的缩小自身的值                        ,最后找到最低点                        。

第三章 逻辑回归应用案例

1.数据集

原始数据集下载

网址:Index of /ml/machine-learning-databases/breast-cancer-wisconsinhttps://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

 打开之后        ,下载红色标注的两个                        。

 其中data里面是数据                ,共699条样本                        ,共11列数据        ,第一列用语检 索的id        ,后9列分别是与肿瘤相关的医学 特征                        ,最后一列表示肿瘤类型的数值。包含16个缺失值                ,用        ”?        ”标出                。

 names里面是对data文件的描述        ,主要是对data里面每列的说明                        ,最后一列是类别                        。

 2.具体流程

1.读取数据

需要注意的是数据和列明分开了                ,因此在进行读取的时候,要一块读取        。

import pandas as pd import numpy as np # 1.读取数据 path = "breast-cancer-wisconsin.data" 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(path, names=column_name) # print(data)

 2.缺失值处理

# 2                、缺失值处理 # 1)替换-》np.nan data = data.replace(to_replace="?", value=np.nan) # 2)删除缺失样本 data.dropna(inplace=True)

3.划分数据集

# 3                        、划分数据集 from sklearn.model_selection import train_test_split # 筛选特征值和目标值 x = data.iloc[:, 1:-1] y = data["Class"] x_train, x_test, y_train, y_test = train_test_split(x, y)

4.标准化

把原始数据转化到均值为0                        ,标准差为1的范围内

# 4        、标准化 from sklearn.preprocessing import StandardScaler transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test)

5.预估器流程

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

6.模型评估

# 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)

7.结果展示

代码还未结束                        ,后面还有评估代码

第四章 分类评估算法

 1.分类的评估方法------精确率与召回率

我们往往并不关注准确率,而是关注癌症患者中癌症患者有没有检测出来                ,于是就有了精确率与召回率                。

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

精确率:

预测结果为正例样本中真实结果为正例的比例                ,在混淆矩阵中展示情况为:

召回率:

真实结果为正例的样本中预测结果为正例的比例                        ,在混淆矩阵中展示情况为:

总结:

精确率是预测结果的正例中有多少是真正预测正确的

召回率是真实结果的正例有多少被预测对了

以上就是精确率和召回率        ,现在介绍F1-score

F1-score

反映了模型的稳健型        ,F1值大的话                        ,精确率和召回率也大

现在用代码实现精确率                、召回率和F1-score

# 查看精确率        、召回率                        、F1-score from sklearn.metrics import classification_report report = classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]) print(report)

 结果为:

在引入ROC曲线和AUC指标之前                ,举个样本不均衡的例子

思考?

假设这样一个情况        ,如果99个样本癌症                        ,1个样本非癌症                ,不管怎样我全都预测正例(默认癌症为正例)

将这写信息写入混淆矩阵中,如下:

分别计算:

准确率:99%

精确率:99/(99+1)=99%

召回率:99/(99+0)=100%

F1-score:2*99%*100%/99%+100%=99.497487% 

可以看出                        ,这是一个不负责的模型                        ,根本原因在于样本不均衡,正例太多                ,反例太少        。引入ROC曲线和AUC指标        。

2.分类的评估方法------ROC曲线和AUC指标

在引入ROC曲线和AUC指标之前                        ,还要了解TPR与FPR                        。

TPR = TP / (TP + FN)

所有真实类别为1的样本中        ,预测类别为1的比例

FPR = FP / (FP + TN)

所有真实类别为0的样本中                ,预测类别为1的比例

分类的评估方法------ROC曲线和AUC指标

 蓝色的线就是ROC曲线                        ,AUC指标是ROC曲线与纵轴和横轴的面积                。

现在介绍这张图:

ROC曲线的横轴就是FPRate        ,纵轴就是TPRate        ,当二者相等时                        ,表示的意义则是:对于不论真实类别是1还是0的样本                ,分类器预测为1的概率是相等的        ,此时AUC为0.5(即随机猜测)

AUC的最小值为0.5                        ,最大值为1                ,取值越高越好

AUC=1,完美分类器                        ,采用这个预测模型时                        ,不管设定什么阈值都能得出完美预测        。绝大多数预测的场合,不存在完美分类器                        。

0.5<AUC<1                ,优于随机猜测                。这个分类器(模型)妥善设定阈值的话                        ,能有预测价值

结论:

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

通过代码实现                ,计算ROC曲线面积                        ,即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 print("AUC指标:",roc_auc_score(y_true, y_predict))

其结果展示:

总结:

AUC只能用来评价二分类

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

现在知道了ROC曲线和AUC指标        ,再回到前面提到的样本不均衡的例子                        ,即思考那个地方                        。

TPR:99/99+0=100%

FPR:1/1+0=100%

TPR=FPR

AUC=0.5

对于这种样本不均衡的情况下                ,AUC指标是0.5        ,表明这个模型很差                        。

注:

说明                        ,以上内容来自于黑马程序员机器学习视频的学习。

以上内容也是机器学习课程老师留的作业                ,原先是PPT形式,觉得整体上比较完整                        ,因此将此发到博客上                        ,让以后的自己和他人学习                。2022.6.16

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
打码精灵是什么-养成游戏界的一股泥石流!日本人居然敢动你老婆了! vue路由重复(Vue–Router–解决多路由复用同一组件页面不刷新问题)