逻辑回归(Logistic Regression)是统计学和机器学习中常用的一种分类算法,主要用于解决二分类问题。尽管名字中带有“回归”,但逻辑回归实际上是一种用于分类的模型。它的核心思想是利用逻辑函数(sigmoid函数)将线性组合的特征映射到[0,1]区间,从而便于进行分类。
1. 逻辑回归的基本原理
逻辑回归旨在通过将输入特征的线性组合与一个阈值进行比较来预测目标类别。假设我们有一个特征向量 (X),则预测的概率通过逻辑函数表示为:
[ P(Y=1|X) = \sigma(W^T X + b) ]
其中,(W) 是模型的权重向量,(b) 是偏置项,(\sigma(z)) 是sigmoid函数,定义为:
[ \sigma(z) = \frac{1}{1 + e^{-z}} ]
通过设置一个阈值(通常是0.5),我们可以将预测概率转化为类别标签:
- 如果 (P(Y=1|X) \geq 0.5),则预测 (Y=1)
- 如果 (P(Y=1|X) < 0.5),则预测 (Y=0)
2. 逻辑回归的损失函数
逻辑回归使用交叉熵损失函数来评估模型的表现,损失函数定义如下:
[ L(W, b) = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)})\right] ]
其中,(m) 是样本总数,(y^{(i)}) 是真实标签,(\hat{y}^{(i)}) 是预测的概率。
3. Python实现逻辑回归
接下来,我们将使用Python实现一个简单的逻辑回归模型。我们将用sklearn
库来构建和训练模型,同时使用numpy
处理数据。以下是实现代码:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 加载数据集
data = load_iris()
X = data.data
y = (data.target == 2).astype(int) # 以是否为"setosa"作为二分类问题
# 划分训练集和测试集
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)
# 模型评估
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)
print(f'模型准确率: {accuracy:.2f}')
print('混淆矩阵:\n', conf_matrix)
print('分类报告:\n', class_report)
4. 代码解释
在上面的代码中,我们先导入必要的库并加载鸢尾花数据集(Iris dataset)。接着,将数据集划分为训练集和测试集。我们以“是否为setosa”作为目标变量进行二分类,然后创建一个逻辑回归模型,调用fit
方法进行训练,最后利用测试集进行预测并评估模型的性能。
5. 总结
逻辑回归是一种简单但有效的分类算法,适用于线性可分的二分类问题。通过适当的数据预处理和特征工程,逻辑回归可以在许多实际应用中表现良好。尽管它的表达能力有限(无法处理复杂的非线性关系),但由于其易于解释和实现,逻辑回归仍然是机器学习中的一个重要工具。