机器学习——逻辑回归

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}\lefty\^{(i)}\\log(\\hat{y}\^{(i)})+(1-y\^{(i)})\\log(1-\\hat{y}\^{(i)})\\right L(w,b)=−m1i=1∑my(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)来找到最佳的超参数和最佳正确率。

相关推荐
奔跑中的小象3 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南3 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang3 小时前
LangGraph 状态机实战
人工智能
刹那芳华19923 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作4 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门4 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜4 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟4 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦4 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生5 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能