欢迎光临
我们一直在努力

机器学习模型--逻辑回归

逻辑回归是机器学习中最经典的二分类算法,虽名字带 “回归”,但核心作用是 “判断类别”(比如是否患病、是否是垃圾邮件)。它原理简单、训练快、可解释性强,是解决二分类问题的 “首选 baseline”,工作中能应对 80% 的分类场景(如风控、营销、医疗诊断)。

一、核心逻辑:逻辑回归到底在做什么?

逻辑回归的本质是用 “S 型曲线(sigmoid 函数)将线性回归结果映射到 [0,1] 区间,输出类别概率,再根据阈值(默认 0.5)判断类别。

  • 简单理解:先通过线性公式(如 “得分 = β₀ + β₁× 特征 1 + β₂× 特征 2”)计算样本得分,再用 sigmoid 函数把得分转换成 “属于正类的概率”(比如概率 0.8→判断为正类,0.3→判断为负类)。
  • 核心目标:最小化 “预测概率与真实标签的差距”,让模型准确区分两类样本。

       

二、必懂概念:工作中常提的关键术语

  • sigmoid 函数:核心映射工具,公式σ(x)=1+e−x1​,输入任意实数,输出始终在 [0,1] 之间(完美适配概率定义)。
  • 正类 / 负类:二分类中,我们关注的类别为正类(比如 “患病”“欺诈交易”),另一类为负类(“未患病”“正常交易”)。
  • 阈值:判断概率的临界值(默认 0.5),可根据业务调整(比如怕漏诊,阈值调至 0.3;怕误诊,阈值调至 0.7)。
  • 损失函数:工作中唯一常用对数损失(Log Loss) —— 惩罚预测概率与真实标签偏差大的样本(比如真实是正类,模型预测概率 0.1,损失会很大)。
  • 三、工作中必用的核心功能与场景

    1. 核心功能:二分类(基础)+ 多分类(扩展)

    • 二分类:最常用场景,比如 “垃圾邮件检测”“用户 churn 预测(是否流失)”“疾病诊断”。
    • 多分类:通过 “一对多(OVR)” 或 “Softmax 回归” 扩展,比如 “手写数字识别(0-9 分类)”“用户兴趣标签分类”。

    2. 高频应用场景

    场景正类定义核心诉求
    信用风控(是否违约) 违约客户 平衡误判(冤枉好人)和漏判(放过坏人)
    广告点击预测 点击广告的用户 精准预测点击概率,优化投放效率
    垃圾邮件检测 垃圾邮件 降低正常邮件误判率(精确率优先)
    罕见病诊断 患病患者 降低漏诊率(召回率优先)

    四、工作实战:关键步骤 + Python 代码

    逻辑回归实战核心是 “数据预处理→模型训练→阈值调整→评估优化”,以下是可直接复用的流程:

    1. 数据预处理(必做步骤)

    • 处理缺失值 / 异常值:用均值 / 中位数填充数值型特征,众数填充分类型特征;剔除极端异常值(比如收入 1 亿远超正常范围)。
    • 特征编码:分类型特征需编码(比如 “性别” 用 One-Hot 编码,“学历等级” 用标签编码)。
    • 特征缩放:线性模型对尺度敏感,必须标准化 / 归一化(比如用 StandardScaler),否则系数无意义。

    2. 模型训练与预测(二分类示例)

    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler, OneHotEncoder
    from sklearn.compose import ColumnTransformer
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

    # 1. 加载数据(以心脏病预测为例)
    data = pd.read_csv("heart_disease.csv")
    X = data.drop("是否患有心脏病", axis=1)
    y = data["是否患有心脏病"] # 0=未患病(负类),1=患病(正类)

    # 2. 特征预处理(数值型标准化,分类型独热编码)
    numerical_cols = ["年龄", "静息血压", "胆固醇", "最大心率"]
    categorical_cols = ["胸痛类型", "静息心电图结果"]

    preprocessor = ColumnTransformer(
    transformers=[
    ("num", StandardScaler(), numerical_cols),
    ("cat", OneHotEncoder(drop="first"), categorical_cols) # drop避免多重共线性
    ]
    )

    # 3. 划分训练集/测试集(7:3)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    X_train_processed = preprocessor.fit_transform(X_train)
    X_test_processed = preprocessor.transform(X_test)

    # 4. 训练逻辑回归模型(默认L2正则化,防止过拟合)
    model = LogisticRegression(max_iter=500) # max_iter增大避免收敛警告
    model.fit(X_train_processed, y_train)

    # 5. 预测(输出类别和概率)
    y_pred = model.predict(X_test_processed) # 类别预测(0/1)
    y_pred_proba = model.predict_proba(X_test_processed)[:, 1] # 正类概率预测

    # 6. 模型评估(核心4个指标)
    print(f"准确率:{accuracy_score(y_test, y_pred):.2f}")
    print(f"精确率:{precision_score(y_test, y_pred):.2f}") # 避免误诊
    print(f"召回率:{recall_score(y_test, y_pred):.2f}") # 避免漏诊
    print(f"F1分数:{f1_score(y_test, y_pred):.2f}") # 综合平衡

    3. 多分类示例(手写数字识别)

    from sklearn.datasets import load_digits

    # 加载数据(0-9数字分类)
    digits = load_digits()
    X, y = digits.data, digits.target

    # 训练模型(自动用Softmax回归做多分类)
    model = LogisticRegression(max_iter=1000)
    model.fit(X, y)

    # 预测
    y_pred = model.predict(X[:5])
    print("预测结果:", y_pred) # 输出:[0 1 2 3 4](正确识别前5个数字)

    五、工作避坑 + 优化技巧

  • 类别不平衡处理:

    • 问题:比如 1000 个样本中,正类仅 10 个,模型会偏向预测负类,准确率高但无用。
    • 解决:用class_weight="balanced"自动调整类别权重,或通过过采样(增加正类样本)/ 欠采样(减少负类样本)平衡数据。

    model = LogisticRegression(class_weight="balanced") # 平衡类别权重

  • 正则化防止过拟合:

    • 逻辑回归默认带 L2 正则化(岭回归),惩罚过大的系数,避免模型 “死记硬背” 训练数据。
    • 关键参数C:C 越小,正则化越强(适合过拟合);C 越大,正则化越弱(适合欠拟合)。
  • 阈值调整适配业务:

    • 默认阈值 0.5 不是万能的:
      • 怕漏诊(如疾病筛查):降低阈值(比如 0.3),提升召回率;
      • 怕误诊(如优质客户筛选):提高阈值(比如 0.7),提升精确率。
  • 系数解读(业务价值核心):

    • 逻辑回归的系数model.coef_可解释特征重要性:
      • 系数为正:特征值越大,正类概率越高(比如 “胆固醇” 系数正,数值越高,患病概率越大);
      • 系数绝对值越大:特征对分类的影响越显著。
  • 六、适用场景速记

    • 适合:二分类 / 简单多分类、需要解释特征影响(比如 “哪些因素导致用户违约”)、数据量中等 / 小、追求训练速度和稳定性。
    • 不适合:特征间是非线性关系(比如 “收入超过 50 万后,购买意愿突降”)、高维稀疏数据(比如文本分类,优先用朴素贝叶斯)。

    总结

    逻辑回归的核心是 “线性得分 + 概率映射”,工作中记住 3 点:① 预处理必须做特征缩放和编码;② 用精确率 / 召回率 / F1 评估(别只看准确率);③ 类别不平衡用class_weight调整。它是入门分类算法的 “基石”,也是面试和业务落地中最常被问到、用到的算法之一,一定要吃透!

    赞(0)
    未经允许不得转载:171主机测评 » 机器学习模型--逻辑回归
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址