机器学习之逻辑回归

发布于:2025-07-09 ⋅ 阅读:(23) ⋅ 点赞:(0)

我们知道,机器学习有三大任务,回归、分类和聚类,之前学过的线性回归就是用来解决回归问题的,而本文要讲解的逻辑回归是用来解决分类任务的基础方法,下面我们一起认识下什么是逻辑回归。

什么是逻辑回归

逻辑回归(Logistic Regression)是一种用于解决分类问题的统计学习方法,尽管名称中带有 “回归”,但它本质上是一种分类算法,尤其适用于二分类问题(即结果只有两种可能,如 “是 / 否”“正 / 负”)。

核心思想

逻辑回归的核心是通过Sigmoid 函数(也称为 Logistic 函数)将线性回归的输出(连续值)映射到 [0,1] 区间,从而表示 “属于某一类别的概率”。

与线性回归的区别

适用场景

  1. 二分类问题:如垃圾邮件识别(是 / 否)、疾病诊断(患病 / 健康)、用户流失预测(流失 / 留存)等。

  2. 多分类问题:通过 “一对多”(One-vs-Rest)等策略扩展,可处理多类别场景(如手写数字识别)。

  3. 概率预测:输出的概率值可用于评估预测的置信度(如 “有 80% 的概率患病”)。

优缺点

  • 优点:

    • 模型简单、训练速度快,适合大规模数据。

    • 输出结果是概率,可解释性强(系数可表示特征对分类的影响方向和程度)。

    • 对噪声不敏感,泛化能力较强。

  • 缺点:

    • 只能处理线性可分问题(若特征与标签是非线性关系,需手动添加多项式特征)。

    • 对多分类问题的处理不如专门的多分类算法(如 Softmax 回归)直接。

简单示例 

示例:用 sklearn 实现逻辑回归

以下是一个简单的二分类示例(预测肿瘤是否为恶性):

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix

# 1. 加载数据(乳腺癌数据集,二分类)
data = load_breast_cancer()
X = data.data  # 特征(如肿瘤大小、纹理等)
y = data.target  # 标签(0=恶性,1=良性)

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

# 3. 创建并训练逻辑回归模型
model = LogisticRegression(max_iter=10000)  # 增加迭代次数确保收敛
model.fit(X_train, y_train)

# 4. 预测与评估
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"测试集准确率:{accuracy:.4f}")  # 通常可达95%以上

# 5. 查看特征系数(反映特征对分类的影响)
print("\n部分特征系数(正值表示倾向良性,负值倾向恶性):")
for i, (feature, coef) in enumerate(zip(data.feature_names[:5], model.coef_[0][:5])):
    print(f"{feature}: {coef:.4f}")

结果如下:

再比如垃圾邮件检测示例:

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix

# 1. 模拟数据(邮件特征和标签)
# 特征:[是否包含"优惠", 是否包含"点击", 是否包含"免费", 是否包含"紧急"]
X = np.array([
    [1, 1, 1, 0],  # 垃圾邮件特征
    [0, 0, 0, 1],  # 正常邮件特征
    [1, 0, 1, 0],  # 垃圾邮件特征
    [0, 0, 0, 0],  # 正常邮件特征
    [1, 1, 0, 1],  # 垃圾邮件特征
    [0, 0, 0, 0],  # 正常邮件特征
    [1, 1, 1, 1],  # 垃圾邮件特征
    [0, 0, 0, 0]   # 正常邮件特征
])

# 标签:1=垃圾邮件,0=正常邮件
y = np.array([1, 0, 1, 0, 1, 0, 1, 0])

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

# 3. 创建并训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 4. 在测试集上进行预测
y_pred = model.predict(X_test)

# 5. 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)

print("模型准确率:", accuracy)
print("混淆矩阵:")
print(conf_matrix)

# 6. 预测新邮件示例
new_email = np.array([[1, 1, 0, 0]])  # 包含"优惠"和"点击",不包含"免费"和"紧急"
prediction = model.predict(new_email)
probability = model.predict_proba(new_email)

print("\n新邮件预测结果:")
print("预测类别:", "垃圾邮件" if prediction[0] == 1 else "正常邮件")
print("预测概率:", probability)  # [正常邮件概率, 垃圾邮件概率]

# 7. 查看模型系数(特征重要性)
feature_names = ["优惠", "点击", "免费", "紧急"]
coefficients = model.coef_[0]

print("\n特征重要性(系数):")
for feature, coef in zip(feature_names, coefficients):
    print(f"{feature}: {coef:.4f}")

结果如下:

这个简化示例展示了逻辑回归在垃圾邮件分类中的基本应用,实际场景中可能需要更多特征和更复杂的预处理。

总结

逻辑回归是分类任务中的基础算法,因其简单、高效和可解释性强,在工业界和学术界被广泛使用。它通过 Sigmoid 函数将线性模型转化为概率预测,是理解分类问题的重要起点。


网站公告

今日签到

点亮在社区的每一天
去签到