当前位置: 首页 > backend >正文

机器学习实战:逻辑回归算法深度解析与案例应用

机器学习实战:逻辑回归算法深度解析与案例应用

作者:lyx331366759 | 发布时间:2025年9月3日

前言

逻辑回归(Logistic Regression)是机器学习中最经典的分类算法之一,广泛应用于医疗诊断、客户流失预测、金融风控等领域。本文将通过多个实战案例,带你深入理解逻辑回归的核心原理、评估方法以及高级应用技巧。

目录

  • 一、逻辑回归算法原理
  • 二、案例1:癌症概率预测
  • 三、案例2:混淆矩阵与评估指标详解
  • 四、案例3:电信客户流失预测
  • 五、高级特征工程实战
  • 六、总结与展望

一、逻辑回归算法原理

1.1 什么是逻辑回归?

逻辑回归是一种用于解决二分类问题的统计学习方法。尽管名字中带有"回归",但它实际上是一种分类算法。其核心思想是:通过sigmoid函数将线性回归的结果映射到(0,1)区间,表示样本属于正类的概率。

1.2 数学原理

Sigmoid函数:

σ(z) = 1 / (1 + e^(-z))

预测函数:

P(y=1|x) = σ(w·x + b)

其中w是权重向量,b是偏置项。

1.3 损失函数

逻辑回归使用对数损失函数(Log Loss):

L = -[y·log(p) + (1-y)·log(1-p)]

二、案例1:癌症概率预测

2.1 数据准备

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 1.读取数据
data = pd.read_csv("../data/breast-cancer-wisconsin.csv")# 2.数据预处理
data = data.replace('?', np.nan)  # 处理缺失值
data.dropna(axis=0, inplace=True)  # 删除缺失行# 3.特征工程
X = data.iloc[:, 1:-1]  # 特征
y = data['Class']       # 标签# 4.数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=22
)# 5.特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

2.2 模型训练与预测

# 创建逻辑回归模型
model = LogisticRegression()
model.fit(X_train_scaled, y_train)# 模型预测
y_pred = model.predict(X_test_scaled)# 模型评估
accuracy = model.score(X_test_scaled, y_test)
print(f"模型准确率: {accuracy:.4f}")

三、案例2:混淆矩阵与评估指标详解

3.1 混淆矩阵基础

混淆矩阵是评估分类模型性能的核心工具:

from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score# 定义真实标签和预测标签
y_true = ['恶性', '恶性', '恶性', '恶性', '恶性', '恶性', '良性', '良性', '良性', '良性']
y_pred_A = ['恶性', '恶性', '恶性', '良性', '良性', '良性', '良性', '良性', '良性', '良性']# 生成混淆矩阵
cm = confusion_matrix(y_true, y_pred_A, labels=['恶性', '良性'])
print("混淆矩阵:")
print(cm)# 使用DataFrame美化输出
import pandas as pd
df_cm = pd.DataFrame(cm, index=['恶性(正例)', '良性(反例)'], columns=['恶性(正例)', '良性(反例)'])
print(df_cm)

3.2 核心评估指标

精确率(Precision)
precision = precision_score(y_true, y_pred_A, pos_label='恶性')
print(f"精确率: {precision:.4f}")
召回率(Recall)
recall = recall_score(y_true, y_pred_A, pos_label='恶性')
print(f"召回率: {recall:.4f}")
F1值
f1 = f1_score(y_true, y_pred_A, pos_label='恶性')
print(f"F1值: {f1:.4f}")

3.3 精确率 vs 召回率的权衡

  • 精确率:在预测为正类的样本中,真正为正类的比例
  • 召回率:在真实为正类的样本中,被正确预测的比例
  • F1值:精确率和召回率的调和平均值

四、案例3:电信客户流失预测

4.1 数据探索

# 读取数据
data = pd.read_csv('../data/churn.csv')# 数据基本信息
print(f"数据集形状: {data.shape}")
print(f"数据类型:\n{data.dtypes}")# 标签分布
print("客户流失分布:")
print(data['Churn'].value_counts(normalize=True))

4.2 完整建模流程

from sklearn.metrics import classification_report, roc_auc_score# 1. 数据预处理
data.dropna(axis=0, inplace=True)  # 处理缺失值# 2. 特征和标签分离
X = data.iloc[:, 1:-1]  # 特征(去除ID列)
y = data['Churn']       # 标签# 3. 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=18
)# 4. 特征编码(独热编码)
X_train_encoded = pd.get_dummies(X_train)
X_test_encoded = pd.get_dummies(X_test)# 5. 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_encoded)
X_test_scaled = scaler.transform(X_test_encoded)# 6. 模型训练
model = LogisticRegression()
model.fit(X_train_scaled, y_train)# 7. 模型预测
y_pred = model.predict(X_test_scaled)
y_proba = model.predict_proba(X_test_scaled)[:, 1]# 8. 模型评估
print("=== 模型评估结果 ===")
print(f"准确率: {model.score(X_test_scaled, y_test):.4f}")
print(f"AUC值: {roc_auc_score(y_test, y_proba):.4f}")# 详细分类报告
print("\n分类报告:")
print(classification_report(y_test, y_pred))

4.3 混淆矩阵可视化

from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt# 生成混淆矩阵
cm = confusion_matrix(y_test, y_pred, labels=['Yes', 'No'])# 可视化
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['流失(Yes)', '未流失(No)'],yticklabels=['流失(Yes)', '未流失(No)'])
plt.title('电信客户流失预测 - 混淆矩阵')
plt.ylabel('真实标签')
plt.xlabel('预测标签')
plt.show()

五、高级特征工程实战

5.1 特征工程策略

def advanced_feature_engineering(data):"""高级特征工程"""df = data.copy()# 1. 处理数值型特征df['TotalCharges'] = pd.to_numeric(df['TotalCharges'], errors='coerce')df['TotalCharges'].fillna(df['TotalCharges'].median(), inplace=True)# 2. 创建费用相关特征df['Charges_Ratio'] = df['MonthlyCharges'] / (df['TotalCharges'] + 1)df['High_Monthly_Charges'] = (df['MonthlyCharges'] > df['MonthlyCharges'].quantile(0.75)).astype(int)# 3. 创建服务聚合特征service_cols = ['landline', 'internet_att', 'internet_other', 'StreamingTV', 'StreamingMovies']df['Total_Services'] = df[service_cols].sum(axis=1)df['Has_Internet'] = (df['internet_att'] + df['internet_other'] > 0).astype(int)df['Has_Streaming'] = (df['StreamingTV'] + df['StreamingMovies'] > 0).astype(int)# 4. 创建人口统计特征df['Family_Size'] = df['Partner_att'] + df['Dependents_att']df['Senior_Family'] = ((df['Dependents_att'] == 1) & (df['Partner_att'] == 1)).astype(int)# 5. 创建交互特征df['Internet_Streaming'] = df['Has_Internet'] * df['Has_Streaming']df['Monthly_Services_Interaction'] = df['MonthlyCharges'] * df['Total_Services']return df

5.2 集成学习方法

from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV# 随机森林模型
rf_model = RandomForestClassifier(n_estimators=200,max_depth=10,random_state=42
)# 梯度提升模型
gb_model = GradientBoostingClassifier(n_estimators=200,learning_rate=0.1,max_depth=6,random_state=42
)# 超参数调优
param_grid = {'n_estimators': [100, 200, 300],'max_depth': [10, 15, 20],'min_samples_split': [2, 5, 10]
}grid_search = GridSearchCV(rf_model, param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)print(f"最佳参数: {grid_search.best_params_}")
print(f"最佳分数: {grid_search.best_score_:.4f}")

5.3 模型融合

from sklearn.ensemble import VotingClassifier# 创建模型集合
ensemble_model = VotingClassifier(estimators=[('rf', RandomForestClassifier(n_estimators=200, random_state=42)),('gb', GradientBoostingClassifier(n_estimators=200, random_state=42)),('lr', LogisticRegression(random_state=42))],voting='soft'  # 使用概率投票
)# 训练融合模型
ensemble_model.fit(X_train, y_train)
ensemble_pred = ensemble_model.predict(X_test)print(f"模型融合准确率: {ensemble_model.score(X_test, y_test):.4f}")

六、总结与展望

6.1 核心要点总结

  1. 逻辑回归基础:理解sigmoid函数和概率预测原理
  2. 评估方法:掌握混淆矩阵、精确率、召回率、F1值等指标
  3. 数据预处理:特征编码、标准化、处理缺失值
  4. 特征工程:创建有意义的特征提升模型性能
  5. 模型优化:集成学习、超参数调优

6.2 实际应用建议

  1. 医疗诊断:癌症预测、疾病风险评估
  2. 金融风控:信用评分、欺诈检测
  3. 客户分析:流失预测、推荐系统
  4. 市场营销:客户响应预测、精准营销

6.3 进阶学习方向

  1. 深度学习:神经网络在分类问题中的应用
  2. 特征选择:LASSO回归、互信息等方法
  3. 模型解释:SHAP、LIME等可解释性工具
  4. 生产部署:模型服务化、A/B测试

代码仓库:本文所有代码均可在GitHub上获取完整版本。

建议收藏:这是一篇从理论到实践的完整指南,适合机器学习初学者和从业者参考。

欢迎交流:如果您在实践中遇到问题或有更好的优化建议,欢迎在评论区分享!

点赞关注:不迷路,持续学习机器学习新知识!🚀


标签:机器学习、逻辑回归、分类算法、特征工程、Python、scikit-learn

声明:本文为原创文章,转载请注明出处。

http://www.xdnf.cn/news/19863.html

相关文章:

  • Win64OpenSSL-3_5_2.exe【安装步骤】
  • ABAP BAPI_CONTRACT_CREATE 报错 06 658
  • 【FastDDS】Layer DDS之Core (详解)
  • pytorch gpu版本安装(最新保姆级安装教程)
  • Masonry
  • 从全栈开发到微服务架构:一位Java工程师的实战经验分享
  • el-dialog 打开dialog弹框,鼠标点击事件无法执行
  • [TryHackMe]Oh My WebServer(nday漏洞+容器逃逸)
  • Teacher Forcing技术解析
  • 解构复杂财务逆向业务:如何优雅地生成与管理负数单?
  • c++ zint二维码、条形码开发库
  • k8s初始化常见问题
  • 笔记:深层卷积神经网络(CNN)中的有效感受野简单推导
  • 行业分享丨基于SimSolid的大型汽车连续冲压模具刚度分析
  • vue3前端开发的基础教程——快速上手
  • flutter 中间组件自适应宽度
  • 硬件:51单片机的按键、中断、定时器、PWM及蜂鸣器
  • 深入解析MongoDB内部架构设计
  • 深度学习-----简单入门卷积神经网络CNN的全流程
  • 做 DevOps 还在被动救火?这篇让你把监控玩成 “运维加速器”!
  • 【CV】OpenCV基本操作④——算术操作
  • OpenGL视图变换矩阵详解:从理论推导到实战应用
  • 《四川棒球知识百科》球速最快的运动之一·棒球1号位
  • Grok-4 :AI 基准测试霸主,速度与智能并存——但代价几何?
  • 学习 Android (十九) 学习 OpenCV (四)
  • sql项目总结
  • 无人机报警器8G信号技术解析
  • npm install 报错问题解决 npm install --ignore-scripts
  • 嵌入式学习---(单片机)
  • 【Kubernetes知识点】监控升级,备份及Kustomize管理