机器学习——逻辑回归

1、什么是逻辑回归?

虽然名字叫"逻辑回归",但是逻辑回归是一个分类算法 。只要用于进行二分类 ,即分类结果只有两种。例如:是否患病?是否为垃圾邮件?广告是否点击?

逻辑回归执行过程如下:

1、输入:线性回归的输出作为逻辑回归的输入,即输入为权重表达式

2、激活函数:回归的结果输入到 s i g m o i d sigmoid sigmoid函数中, s i g m o i d sigmoid sigmoid函数表达式为: 1 1 + e − x \frac1{1+e^{-x}} 1+e−x1,其输出结果是在 ( 0 , 1 ) (0,1) (0,1)之间,默认 0.5 0.5 0.5为阈值

3、假设函数/线性模型:即将线性回归的输出结果(权重表达式)代入到激活函数里面,得到
y = 1 1 + e w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . + w j x j + b y=\frac1{1+e^{w_1x_1+w_2x_2+w_3x_3+...+w_jx_j}}+b y=1+ew1x1+w2x2+w3x3+...+wjxj1+b 其中 b b b为偏置

4、损失函数:对数似然损失,公式为
L ( w , b ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( y ^ ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) ] \mathcal{L}(\mathbf{w},b)=-\frac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log(\hat{y}^{(i)})+(1-y^{(i)})\log(1-\hat{y}^{(i)})\right] L(w,b)=−m1i=1∑m[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
其中, m 是样本数量, y ^ ( i ) 是第 i 个样本的预测概率, y ( i ) 是第 i 个样本的真实 标签。 \begin{aligned}&\text{其中,}m\text{ 是样本数量,}\hat{y}^{(i)}\text{ 是第 }i\text{ 个样本的预测概率,}y^{(i)}\text{ 是第 }i\text{ 个样本的真实}\\&\text{标签。}\end{aligned} 其中,m 是样本数量,y^(i) 是第 i 个样本的预测概率,y(i) 是第 i 个样本的真实标签。

5、优化损失:梯度下降

python 复制代码
# 逻辑回归API调用
API:sklearn.linear_model.LogisticRegression(solver='liblinear',penalty='l2',C=1.0)
solver:优化求解方式(默认为开源的liblinear库实现
"""
penalty: 正则化类型。默认值:'l2'
solver: 优化算法。默认值:'lbfgs'
		可选值:'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'
		描述:用于优化问题的算法。不同的solver支持不同的正则化。
max_iter: 最大迭代次数。
		  默认值:100
		  描述:求解器收敛的最大迭代次数。
C: 正则化强度的倒数。
   默认值:1.0
   描述:必须为正数。较小的值指定更强的正则化。
"""

2、混淆矩阵

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

TP(真正例) ----真实结果为真,预测结果也为真

TN(真反例) ----真实结果为假,预测结果也为假

FP(伪正例) ----真实结果为假,预测结果为真

FN(伪反例) ----真实结果为真,预测结果为假

3、精确率和召回率

精确率 :预测结果为正例的结果中真实为正例的比例

精确率 = T P T P + F P =\frac{TP}{TP+FP} =TP+FPTP
召回率 :真实为正例的结果中预测结果为正例的比例,反映对正样本的区分能力

召回率 = T P T P + F N =\frac{TP}{TP+FN} =TP+FNTP
F1-score : 衡量模型的稳健性 F 1 − s c o r e = 2 T P 2 T P + F N + F P F1-score=\frac{2TP}{2TP+FN+FP} F1−score=2TP+FN+FP2TP

python 复制代码
sklearn.metrics.classification_report(y_true,y_predict,labels=[],target_names=none)
"""
y_true:真实值
y_predict:预估器的预测值
labels:指定类别对应的数字
target_names:目标类别名称
return:每个类别的精确率和召回率
"""

4、ROC曲线和AUC指标1、TPR和FPR

TPR: T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP 所有真实类别为1的样本中,预测类别为1的比例 ----召回率

FPR: F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP 所有真实类别为0的样本中,预测类别为1的比例

当TPR等于FPR时,预测效果为Random guess(瞎猜)

ROC曲线(Receiver Operating Characteristic Curve)是通过改变分类阈值绘制出的TPR(True Positive Rate)和FPR(False Positive Rate)之间的关系图。

AUC(Area Under the ROC Curve)是ROC曲线下的面积,反映模型区分正负样本的能力。AUC值在0.5到1之间,越接近1,模型效果越好。

4、逻辑回归案例------癌症预测(数据集点我)

python 复制代码
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
data = pd.read_csv(r"E:\Python_learning\py基础\machine_learning\breastCancer.csv")
# 缺失值处理,缺失值为?先替换为np.nan,再删除缺失值
# 1)替换成np.nan
data = data.replace(to_replace="?", value=np.nan)
# 2)删除确实值,以样本为单位
data.dropna(inplace=True)
# 特征集和目标集切分
x = data.iloc[:, 2:-1]
y = data['class']
# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(x, y)
# 归一化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 预估器预测
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
print(f"逻辑回归的偏置为{estimator.intercept_}")
print(f"逻辑回归的参数为{estimator.coef_}")
y_predict = estimator.predict(x_test)
print("预测结果如下", y_predict)
print("预测值与真实值比对:", y_predict == y_test)
print("该模型准确率为", estimator.score(x_test, y_test))
report = classification_report(y_test, y_predict, labels=[2, 4], target_names=['良性', '恶性'])
print(report)
# AUC和ROC计算,每个真是样本必须为0(正例)、1(反例)
# 将y_test 转换0,1
np.where(y_test > 3, 1, 0)
print(f"该模型AUC指标为{roc_auc_score(y_test, y_predict)}")

运行结果如下:

对于癌症检查,虽然正确率已经达到了 95.3 % 95.3\% 95.3%,但是对于这类较为严肃的问题,我们认为还是比较低,读者可以使用网格搜索和交叉验证(GridSearchcv)来找到最佳的超参数和最佳正确率。

相关推荐
DogDaoDao2 分钟前
【预备理论知识——2】深度学习:线性代数概述
人工智能·深度学习·线性代数
牛哥带你学代码4 分钟前
交叠型双重差分法
人工智能·深度学习·机器学习
学步_技术11 分钟前
自动驾驶系列—线控系统:驱动自动驾驶的核心技术解读与应用指南
人工智能·机器学习·自动驾驶·线控系统·转向系统
jmoych19 分钟前
AI正悄然地影响着企业数字化转型
人工智能
说私域22 分钟前
社群团购中的用户黏性价值:以开源小程序多商户AI智能名片商城源码为例
人工智能·小程序
quaer1 小时前
Open-Sora全面开源?
开发语言·算法·机器学习·matlab·矩阵
深度学习实战训练营1 小时前
基于keras的停车场车位识别
人工智能·深度学习·keras
乔代码嘚1 小时前
AI2.0时代,普通小白如何通过AI月入30万
人工智能·stable diffusion·aigc
墨@#≯1 小时前
机器学习系列篇章0 --- 人工智能&机器学习相关概念梳理
人工智能·经验分享·机器学习
Elastic 中国社区官方博客1 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索