返回

机器学习实战三:揭开逻辑回归二分类与多分类的神秘面纱

人工智能

逻辑回归:二分类和多分类的利器

在机器学习的旅程中,我们遇到的第一个分类算法是逻辑回归。它是一种广义线性模型,用于预测离散值,特别是在二分类和多分类任务中表现出色。

什么是逻辑回归?

逻辑回归通过线性方程将输入变量与输出变量(类别)联系起来。但是,与线性回归不同,它预测的不是连续值,而是介于 0 到 1 之间的概率值。这些概率值表示输入变量属于特定类别的可能性。

二分类:从理论到实践

二分类是最简单的分类任务,只有两种可能的输出类别。逻辑回归使用 Sigmoid 函数将线性方程的输出映射到 0 到 1 之间的概率值,表示输入属于特定类别的概率。

代码示例:

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression

# 加载数据
data = pd.read_csv('data.csv')

# 特征和目标
X = data.drop('target', axis=1)
y = data['target']

# 训练模型
model = LogisticRegression()
model.fit(X, y)

# 预测
predictions = model.predict(X)

多分类:拓展视野

当输出类别超过两个时,逻辑回归可以扩展到多分类。它使用 One-vs-All 或 One-vs-One 策略,将多分类问题转换为多个二分类问题。

代码示例:

from sklearn.multiclass import OneVsRestClassifier

# One-vs-All 策略
ovr_model = OneVsRestClassifier(LogisticRegression())
ovr_model.fit(X, y)

# One-vs-One 策略
ovo_model = OneVsOneClassifier(LogisticRegression())
ovo_model.fit(X, y)

实例探究:信用卡欺诈检测

让我们用逻辑回归来解决一个现实世界的分类问题——信用卡欺诈检测。目标是根据交易数据预测交易是否为欺诈行为。

代码示例:

# 导入必要的库
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# 加载数据
data = pd.read_csv('creditcard.csv')

# 特征和目标
X = data.drop('Class', axis=1)
y = data['Class']

# 数据集拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)

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

常见问题解答

  1. 逻辑回归和线性回归有什么区别?
    答:逻辑回归用于分类任务,而线性回归用于回归任务(预测连续值)。逻辑回归预测的是概率值,而线性回归预测的是连续值。

  2. Sigmoid 函数在逻辑回归中起什么作用?
    答:Sigmoid 函数将线性方程的输出映射到 0 到 1 之间的概率值,表示输入变量属于特定类别的可能性。

  3. 如何处理不平衡的数据集?
    答:可以对少数类别的实例进行过采样或对多数类别的实例进行欠采样,以平衡数据集。

  4. 如何防止逻辑回归过拟合?
    答:可以通过正则化(例如 L1 或 L2 正则化)来防止逻辑回归过拟合,这会惩罚模型的复杂度。

  5. 逻辑回归适用于哪些类型的数据?
    答:逻辑回归适用于具有离散输出(类别)的数据,并且特征可以是数值的、分类的或二进制的。