逻辑回归模型(logistic regression)

小程序云存储GPU

前言

逻辑回归(Logistic Regression)是一种用于处理分类问题的统计学习方法,尽管名字中包含“回归”一词,但它实际上是一种分类算法,通常用于解决二分类问题(也可扩展到多分类问题)。逻辑回归适用于预测一个二分类目标变量的概率,它的输出值是0到1之间的一个概率。

下面是逻辑回归的基本原理:

假设:逻辑回归基于线性回归的思想,但它使用了逻辑函数(也称为sigmoid函数)来将线性输出映射到概率。逻辑函数的数学表达式为:

是线性组合(权重乘以特征值的和)

模型:对于给定的输入特征 ,逻辑回归的模型表达式为:

其中, 是观测为类别1的概率, 是目标变量, , ,..., 是模型参数

训练:模型的参数 通过最大似然估计(Maximum Likelihood Estimation,MLE)来学习,最终的目标是使观测到的样本属于其真实类别的概率最大化

决策边界: 当概率 大于某个阈值时,模型将样本预测为类别1;否则,预测为类别0。通常,阈值被设置为0.5

逻辑回归的优点包括简单、易于理解和实现,适用于线性可分或近似线性可分的问题。然而,它也有一些局限性,例如对于非线性关系的建模能力较弱。在处理复杂的非线性问题时,可能需要考虑其他更复杂的模型。

代码实现


          
from ucimlrepo import fetch_ucirepo 
          
  
          
# fetch dataset 
          
heart_failure_clinical_records = fetch_ucirepo(id=519) 
          
  
          
# data (as pandas dataframes) 
          
X = heart_failure_clinical_records.data.features 
          
y = heart_failure_clinical_records.data.targets 
          
  
          
# metadata 
          
print(heart_failure_clinical_records.metadata) 
          
# variable information 
          
print(heart_failure_clinical_records.variables)
      

访问UCI机器学习数据集为实验进行数据支撑。该数据集包含随访期间收集的29 9名心力衰竭患者的病历,其中每个患者档案有 13 个临床特征。目标为死亡事件:患者是否在随访期间死亡。


          
from sklearn import datasets
          
from sklearn.model_selection import train_test_split
          
from sklearn.preprocessing import StandardScaler
          
from sklearn.linear_model import LogisticRegression
          
from sklearn.metrics import accuracy_score,roc_curve, auc
          
# 将数据集划分为训练集和测试集
          
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
          

          
# 特征标准化
          
scaler = StandardScaler()
          
X_train = scaler.fit_transform(X_train)
          
X_test = scaler.transform(X_test)
          

          
# 创建逻辑回归模型
          
model = LogisticRegression()
          

          
# 训练模型
          
model.fit(X_train, y_train)
          

          
# 在测试集上进行预测
          
y_pred = model.predict(X_test)
          

          
# 计算准确度
          
accuracy = accuracy_score(y_test, y_pred)
          
print(f'Accuracy: {accuracy}')
          

          
# 预测并计算性能指标(如AUC)
          
y_pred_proba = model.predict_proba(X_test)[:, 1]
          
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
          
roc_auc_nb = auc(fpr,tpr)
      

使用 scikit-learn 实现逻辑回归模型,包括数据集划分、特征标准化、模型训练、准确度计算以及通过 ROC 曲线计算 AUC 等步骤,用于解决二分类问题。


          
from sklearn.metrics import classification_report, confusion_matrix
          
import seaborn as sns
          
import matplotlib.pyplot as plt
          
plt.rcParams['font.sans-serif'] = 'SimHei'
          
plt.rcParams['axes.unicode_minus'] = False
          
# 输出混淆矩阵
          
confusion_matrix = confusion_matrix(y_test, y_pred)
          
plt.figure(figsize = (6, 6), dpi = 300)
          
sns.heatmap(confusion_matrix, annot = True, annot_kws = {'size':15}, fmt = 'd', cmap = 'YlGnBu_r')
          
# 绘制热力图 annot = True热力图上显示数值,annot_kws设置单元格数值标签的其他属性,fmt指定单元格数据显示格式cmap用于热力图填色
          
plt.title('混淆矩阵热力图')
          
plt.xlabel('预测值')
          
plt.ylabel('真实值')
          
plt.show()
      

picture.image

使用scikit-learn库评估分类模型的性能。它根据预测值( y_pred )和真实标签( y_test )生成混淆矩阵。通过seaborn和matplotlib,将混淆矩阵可视化为热力图,直观展示模型在预测不同类别方面的表现。


          
# 绘制ROC曲线
          
plt.figure()
          
lw = 2
          
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc_nb)
          
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
          
plt.xlim([0.0, 1.0])
          
plt.ylim([0.0, 1.05])
          
plt.xlabel('False Positive Rate')
          
plt.ylabel('True Positive Rate')
          
plt.title('ROC曲线')
          
plt.legend(loc="lower right")
          
plt.show()
      

picture.image

绘制二分类模型的ROC曲线(Receiver Operating Characteristic)。ROC曲线是一种用于评估分类模型性能的图形工具,它以真正例率(True Positive Rate,又称为灵敏度或召回率)为纵轴,假正例率(False Positive Rate)为横轴,展示了在模型的性能,ROC曲线越靠近左上角,模型性能越好。


          
# 输出模型报告, 查看评价指标
          
print(classification_report(y_test, y_pred))
      

picture.image

逻辑回归分类模型的性能报告,报告中包含了针对每个类别(在这里是0和1)的精确度(precision)、召回率(recall)、F1分数(f1-score)以及支持数量(support)。下面是对这些指标的简要解释:

  • Precision(精确度):对于预测为正类别的样本,有多少确实属于正类别。对于类别0,精确度是0.76,对于类别1,精确度是0.93。这意味着对于模型预测为0的样本,有76%确实是0;对于预测为1的样本,有93%确实是1。
  • Recall(召回率):对于实际为正类别的样本,有多少被正确地预测为正类别。对于类别0,召回率是0.97,对于类别1,召回率是0.56。这表示对于实际为0的样本,有97%被成功预测为0;对于实际为1的样本,只有56%被成功预测为1。
  • F1-Score(F1分数):精确度和召回率的调和平均值,是一个综合指标。对于类别0,F1分数是0.85,对于类别1,F1分数是0.70。
  • Support(支持数量):在测试集中属于每个类别的样本数量。对于类别0,有35个样本;对于类别1,有25个样本。
  • Accuracy(准确度):整个模型的正确分类比例,是一个综合指标。在这里,准确度为0.80,表示模型正确分类了80%的样本。
  • Macro Avg和Weighted Avg:这是宏平均和加权平均,分别是所有类别的平均值。Macro Avg计算了每个类别指标的简单平均,而Weighted Avg考虑了每个类别的样本数量,进行了加权平均。在这里,Macro Avg和Weighted Avg给出了模型整体性能的平均指标。

总体而言,这个模型对类别0的性能较好(高精确度和高召回率),但对类别1的性能稍显下降。

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
VikingDB:大规模云原生向量数据库的前沿实践与应用
本次演讲将重点介绍 VikingDB 解决各类应用中极限性能、规模、精度问题上的探索实践,并通过落地的案例向听众介绍如何在多模态信息检索、RAG 与知识库等领域进行合理的技术选型和规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论