机器学习实战:逻辑回归算法深度解析与案例应用
机器学习实战:逻辑回归算法深度解析与案例应用
作者: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 核心要点总结
- 逻辑回归基础:理解sigmoid函数和概率预测原理
- 评估方法:掌握混淆矩阵、精确率、召回率、F1值等指标
- 数据预处理:特征编码、标准化、处理缺失值
- 特征工程:创建有意义的特征提升模型性能
- 模型优化:集成学习、超参数调优
6.2 实际应用建议
- 医疗诊断:癌症预测、疾病风险评估
- 金融风控:信用评分、欺诈检测
- 客户分析:流失预测、推荐系统
- 市场营销:客户响应预测、精准营销
6.3 进阶学习方向
- 深度学习:神经网络在分类问题中的应用
- 特征选择:LASSO回归、互信息等方法
- 模型解释:SHAP、LIME等可解释性工具
- 生产部署:模型服务化、A/B测试
代码仓库:本文所有代码均可在GitHub上获取完整版本。
建议收藏:这是一篇从理论到实践的完整指南,适合机器学习初学者和从业者参考。
欢迎交流:如果您在实践中遇到问题或有更好的优化建议,欢迎在评论区分享!
点赞关注:不迷路,持续学习机器学习新知识!🚀
标签:机器学习、逻辑回归、分类算法、特征工程、Python、scikit-learn
声明:本文为原创文章,转载请注明出处。