逻辑回归模型实战:从数据预处理到结果分析的完整实验指南

1次阅读
没有评论

共计 2959 个字符,预计需要花费 8 分钟才能阅读完成。

image.webp

为什么选择逻辑回归作为第一个机器学习模型?

逻辑回归是机器学习领域最经典的算法之一,特别适合作为初学者的第一个实战模型。主要原因有三点:

逻辑回归模型实战:从数据预处理到结果分析的完整实验指南

  • 原理直观 :虽然名字里有 ” 回归 ”,但它实际上是解决分类问题的,通过 sigmoid 函数将线性结果映射到[0,1] 区间,这个转换过程非常容易理解
  • 实现简单:scikit-learn 等库已经提供了高度封装的实现,几行代码就能完成训练和预测
  • 功能强大:在很多二分类问题上都能取得不错的效果,比如垃圾邮件识别、疾病预测等

数据预处理:模型成功的基础

  1. 处理缺失值
  2. 对于少量缺失可以采用均值 / 中位数填充
  3. 缺失较多的特征建议直接删除
  4. 代码示例:

    from sklearn.impute import SimpleImputer
    imp = SimpleImputer(strategy='mean')
    X_train = imp.fit_transform(X_train)

  5. 特征缩放

  6. 逻辑回归虽然不需要严格的归一化,但特征缩放可以加速收敛
  7. 常用 StandardScaler 进行标准化
  8. 代码示例:

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)  # 注意测试集用相同的 scaler

  9. 类别特征处理

  10. 使用 OneHotEncoder 处理名义型类别特征
  11. 使用 OrdinalEncoder 处理有序型类别特征

模型训练与调参

核心参数解析

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(
    penalty='l2',        # 正则化类型,l1 或 l2
    C=1.0,              # 正则化强度,越小正则化越强
    solver='lbfgs',     # 优化算法,小数据集用 lbfgs
    max_iter=100,       # 最大迭代次数
    random_state=42     # 随机种子
)
model.fit(X_train, y_train)

重要参数说明:

  • penalty:正则化类型,l1 正则化可以产生稀疏解(部分系数为 0),适合特征选择;l2 正则化更常用
  • C:正则化强度的倒数,C 越小正则化越强,默认 1.0
  • solver:优化算法选择,liblinear 适合小数据集,sag/saga 适合大数据集

模型评估:不只是看准确率

  1. 基础指标

    from sklearn.metrics import accuracy_score, precision_score, recall_score
    
    y_pred = model.predict(X_test)
    print(f"准确率: {accuracy_score(y_test, y_pred):.4f}")
    print(f"精确率: {precision_score(y_test, y_pred):.4f}")
    print(f"召回率: {recall_score(y_test, y_pred):.4f}")

  2. ROC 曲线与 AUC

    from sklearn.metrics import roc_curve, roc_auc_score
    import matplotlib.pyplot as plt
    
    y_scores = model.predict_proba(X_test)[:, 1]
    fpr, tpr, thresholds = roc_curve(y_test, y_scores)
    
    plt.plot(fpr, tpr)
    plt.plot([0, 1], [0, 1], 'k--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title(f'ROC Curve (AUC = {roc_auc_score(y_test, y_scores):.2f})')
    plt.show()

五大常见错误及解决方案

  1. 类别不平衡问题
  2. 现象:准确率很高但召回率极低
  3. 解决:使用 class_weight 参数或对少数类过采样

  4. 特征相关性过高

  5. 现象:系数不稳定
  6. 解决:检查特征相关性矩阵,删除高相关特征

  7. 过拟合问题

  8. 现象:训练集表现很好但测试集差
  9. 解决:增加正则化强度(C 调小),或获取更多数据

  10. 未做特征缩放

  11. 现象:收敛速度很慢
  12. 解决:使用 StandardScaler 标准化特征

  13. 错误理解概率输出

  14. 注意:predict_proba 输出的是类别概率,不是确定的 0 /1
  15. 需要设置合适的阈值(默认 0.5)

实验报告撰写建议

  1. 问题描述:明确要解决的分类问题
  2. 数据探索:展示数据分布、特征相关性等
  3. 方法描述:说明选择的模型和参数
  4. 结果分析:用表格对比不同参数 / 方法的性能
  5. 讨论:分析模型局限性和改进方向

完整代码示例

# 导入库
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

# 数据加载与预处理
data = pd.read_csv('dataset.csv')
X = data.drop('target', axis=1)
y = data['target']

# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 模型训练
model = LogisticRegression(penalty='l2', C=1.0, solver='lbfgs', max_iter=100)
model.fit(X_train, y_train)

# 模型评估
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

# 系数分析
coef_df = pd.DataFrame({
    'feature': X.columns,
    'coefficient': model.coef_[0]
})
print(coef_df.sort_values('coefficient', ascending=False))

延伸思考

  1. 如何处理多分类问题?LogisticRegression 本身支持 multi_class 参数
  2. 当特征数量远大于样本数量时,应该选择什么正则化方式?
  3. 如何解释逻辑回归模型的系数?系数大小是否直接代表特征重要性?

通过这个完整的实战流程,相信你已经掌握了逻辑回归的核心实现要点。记住,在机器学习中,数据质量往往比模型选择更重要,所以一定要重视数据预处理环节。接下来可以尝试在不同的数据集上应用这个流程,观察模型表现的变化。

正文完
 0
评论(没有评论)