当前位置:首页 > 技术 > 正文内容

逻辑回归详解与实战

访客 技术 2026年5月23日 3

逻辑回归是机器学习中一个重要的二分类算法。尽管名字中有"回归"二字,但它的主要用途是解决分类问题。本文将深入探讨逻辑回归的原理,并通过实际案例展示其应用。

逻辑回归的核心概念

逻辑回归主要用于处理二分类问题,例如判断邮件是否为垃圾邮件或预测用户是否会购买商品。它通过结合线性模型和Sigmoid函数来实现分类任务。

逻辑回归与线性回归的区别

对比维度 线性回归 逻辑回归
任务类型 预测连续值 预测离散类别
输出范围 任意实数 0-1之间的概率
核心目标 最小化误差平方和 最小化交叉熵损失

为什么不能用线性回归做分类?

  1. 输出范围不合适:线性回归可能产生超出[0,1]范围的值,这在分类问题中没有意义。
  2. 对异常值敏感:异常值可能导致线性回归拟合效果变差。

逻辑回归通过Sigmoid函数解决了这些问题,将线性输出映射到[0,1]区间。

逻辑回归的工作原理

逻辑回归分为三个步骤:

  1. 线性组合计算得分
  2. 使用Sigmoid函数转换得分
  3. 定义损失函数优化模型

线性组合计算得分

公式为: z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b

其中:

  • x₁~xₙ:输入特征。
  • w₁~wₙ:特征权重。
  • b:偏置项。
  • z:线性得分。

Sigmoid函数

Sigmoid函数将线性得分压缩到[0,1]之间,表示样本属于正类的概率。

Sigmoid函数的数学表达式

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

绘制Sigmoid函数曲线
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y, label='Sigmoid Function', color='blue')
plt.axhline(y=0.5, color='red', linestyle='--', label='Probability = 0.5')
plt.xlabel('Input')
plt.ylabel('Output Probability')
plt.title('Sigmoid Function Visualization')
plt.legend()
plt.grid(True)
plt.show()

损失函数

逻辑回归采用交叉熵损失函数来衡量预测值与真实值之间的差距。

交叉熵损失函数公式

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

实战演练:乳腺癌诊断

我们将使用Scikit-learn中的乳腺癌数据集进行逻辑回归的实战演练。

数据准备

from sklearn.datasets import load_breast_cancer
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, precision_score, recall_score, f1_score

data = load_breast_cancer()
X = data.data
y = data.target

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, test_size=0.3, random_state=42, stratify=y
)

模型训练

model = LogisticRegression(max_iter=2000, random_state=42)
model.fit(X_train, y_train)

参数解读

weights = model.coef_[0]
bias = model.intercept_[0]

feature_names = data.feature_names
weight_df = pd.DataFrame({'Feature': feature_names, 'Weight': weights})
print(weight_df.sort_values(by='Weight', ascending=False).head(10))

模型评估

y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)[:, 1]

accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print(f'Accuracy: {accuracy:.4f}')
print(f'Precision: {precision:.4f}')
print(f'Recall: {recall:.4f}')
print(f'F1 Score: {f1:.4f}')

常见问题及解决方案

  1. 模型不收敛:增加迭代次数或调整正则化参数。
  2. 类别不平衡:调整分类阈值或使用过采样/欠采样技术。
  3. 参数解读错误:确保特征已标准化。

总结

逻辑回归因其简单性和高效性,在工业界得到了广泛应用。通过本文的学习,你应该能够理解逻辑回归的基本原理并将其应用于实际问题中。

标签: 机器学习

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。