逻辑回归原理与应用(逻辑回归(Logistic Regression)原理及其应用)
目录
第一章:逻辑回归的应用场景
第二章:逻辑回归的原理
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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!