逻辑回归算法
逻辑回归的基本概念
逻辑回归是一种用于解决二分类问题的统计学习方法,通过将线性回归的输出映射到[0,1]区间,表示概率。尽管名称中包含“回归”,但它实际是一种分类算法,常用于预测事件发生的概率(如用户点击广告的概率)。
核心思想是通过Sigmoid函数将线性组合的输入特征转换为概率值:
$$ P(y=1|x) = \frac{1}{1 + e^{-(w^Tx + b)}} $$
其中 $w$ 为权重向量,$b$ 为偏置项,$x$ 为输入特征。
逻辑回归的模型假设
- 因变量类型:适用于二分类或多分类问题(需扩展为Softmax回归)。
- 线性决策边界:假设特征与对数几率(log-odds)呈线性关系。
- 独立性假设:观测样本之间相互独立。
损失函数与优化
逻辑回归使用交叉熵损失函数(Log Loss)衡量预测概率与真实标签的差异:
$$ J(w) = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(p_i) + (1-y_i) \log(1-p_i) \right] $$
其中 $p_i$ 为样本 $i$ 的预测概率,$y_i$ 为真实标签(0或1)。
优化方法通常采用梯度下降法迭代更新权重:
$$ w := w - \alpha \cdot \nabla J(w) $$
$\alpha$ 为学习率,$\nabla J(w)$ 为损失函数对权重的梯度。
逻辑回归的优缺点
优点:
- 计算效率高,适合大规模数据集。
- 输出为概率,便于解释。
- 可通过正则化(L1/L2)防止过拟合。
缺点:
- 无法自动处理非线性关系(需引入多项式特征或核函数)。
- 对特征相关性敏感,需预处理多重共线性问题。
应用场景示例
- 医疗领域:预测患者患病的可能性。
- 金融风控:评估贷款违约概率。
- 营销分析:用户购买行为预测。
代码实现示例(Python)
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 假设X为特征矩阵,y为标签
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 训练模型
model = LogisticRegression(penalty='l2', C=1.0) # L2正则化
model.fit(X_train, y_train)# 预测并评估
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
逻辑回归实例:乳腺癌预测
使用Python的scikit-learn库实现逻辑回归模型,基于威斯康星州乳腺癌数据集进行恶性/良性肿瘤分类。
# 导入必要库
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# 加载数据集
data = load_breast_cancer()
X = data.data # 特征矩阵
y = data.target # 目标变量(0:恶性, 1:良性)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建并训练模型
model = LogisticRegression(max_iter=5000)
model.fit(X_train, y_train)# 预测并评估
y_pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))
关键参数说明
penalty
: 正则化类型(默认'l2')C
: 正则化强度的倒数(值越小正则化越强)solver
: 优化算法(如'liblinear'、'lbfgs')max_iter
: 最大迭代次数(默认100)
数学公式表达
逻辑回归使用sigmoid函数将线性组合映射到(0,1)概率区间:
$$ P(y=1|x) = \frac{1}{1 + e^{-(w^Tx + b)}} $$
其中$w$是权重向量,$b$是偏置项,通过最大似然估计求解参数:
$$ \ell(w,b) = \sum_{i=1}^n y_i \log P(y_i=1|x_i) + (1-y_i) \log (1 - P(y_i=1|x_i)) $$
多分类逻辑回归示例
使用IRIS数据集实现多分类逻辑回归(OvR策略):
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegressioniris = load_iris()
X, y = iris.data, iris.targetmodel = LogisticRegression(multi_class='ovr', solver='liblinear')
model.fit(X, y)# 查看预测概率
print("类别概率:\n", model.predict_proba(X[:5]))
实际应用注意事项
- 特征缩放:逻辑回归对特征尺度敏感,建议标准化处理
- 多重共线性:高相关特征可能导致系数估计不稳定
- 类别不平衡:可通过class_weight参数调整或使用过采样技术
- 正则化选择:L1正则化可用于特征选择,L2正则化防止过拟合
评估指标建议:
- 二分类:ROC-AUC、精确率-召回率曲线
- 多分类:宏平均F1分数、分类报告