机器学习实战三:揭开逻辑回归二分类与多分类的神秘面纱
2023-10-25 18:27:52
逻辑回归:二分类和多分类的利器
在机器学习的旅程中,我们遇到的第一个分类算法是逻辑回归。它是一种广义线性模型,用于预测离散值,特别是在二分类和多分类任务中表现出色。
什么是逻辑回归?
逻辑回归通过线性方程将输入变量与输出变量(类别)联系起来。但是,与线性回归不同,它预测的不是连续值,而是介于 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))
常见问题解答
-
逻辑回归和线性回归有什么区别?
答:逻辑回归用于分类任务,而线性回归用于回归任务(预测连续值)。逻辑回归预测的是概率值,而线性回归预测的是连续值。 -
Sigmoid 函数在逻辑回归中起什么作用?
答:Sigmoid 函数将线性方程的输出映射到 0 到 1 之间的概率值,表示输入变量属于特定类别的可能性。 -
如何处理不平衡的数据集?
答:可以对少数类别的实例进行过采样或对多数类别的实例进行欠采样,以平衡数据集。 -
如何防止逻辑回归过拟合?
答:可以通过正则化(例如 L1 或 L2 正则化)来防止逻辑回归过拟合,这会惩罚模型的复杂度。 -
逻辑回归适用于哪些类型的数据?
答:逻辑回归适用于具有离散输出(类别)的数据,并且特征可以是数值的、分类的或二进制的。