目录
第一章:逻辑回归的应用场景
- 广告点击率
- 是否为垃圾邮件
- 是否患病
- 金融诈骗
- 虚假账号
看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器。
注意:逻辑回归虽然名字中有回归二字,但是它不是回归算法,而是分类算法。
第二章:逻辑回归的原理
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
将上面两个式子进行整合,得到:
3.损失函数
为求出好的逻辑回归,引出损失函数 :
①损失函数是体现”预测值”和”真实值”,相似程度的函数
②损失函数越小,模型越好
逻辑回归的损失,称之为对数似然损失,公式如下:
这个式子也不陌生,将上面整合的式子,取对数,原先是相乘,取对数之后会相加,指数也可以移到前面。
假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积,再将公式对数化,便可得到如下公式:
4.优化损失
采用梯度下降:
理解:α为学习速率,需要手动指定,α旁边的整体表示方向
沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值
使用:面对训练数据规模十分庞大的任务 ,能够找到较好的结果
图像表示如下:
就是不断的缩小自身的值,最后找到最低点。
第三章 逻辑回归应用案例
1.数据集
原始数据集下载
打开之后,下载红色标注的两个。
其中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:299%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
Original: https://blog.csdn.net/qq_39031009/article/details/125305196
Author: 探索者up
Title: 逻辑回归(Logistic Regression)原理及其应用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/638303/
转载文章受原作者版权保护。转载请注明原作者出处!