在机器学习的广阔领域中,逻辑回归(Logistic Regression)虽名为 “回归”,实则是一种用于解决二分类(0 或 1)问题的有监督学习算法。它凭借简单易懂的原理、高效的计算性能以及出色的解释性,在数据科学、医学诊断、金融风控等诸多领域中得到了广泛应用。接下来,我们将从多个维度深入剖析逻辑回归,带你揭开它的神秘面纱。
一、逻辑回归的基本概念
在回归分析中,线性回归是通过构建线性方程来预测连续值,例如根据房屋面积、房间数量等特征预测房价。而逻辑回归面对的是分类问题,比如判断一封邮件是垃圾邮件(1)还是正常邮件(0) 。
逻辑回归基于线性回归模型,但引入了一个关键的转换函数 ——Sigmoid 函数,将线性回归模型的输出值映射到 [0, 1] 区间,使其能够表示某一事件发生的概率。假设线性回归模型的输出为,其中是参数向量,是特征向量。Sigmoid 函数的表达式为:
g(z)=1+e−z1
Sigmoid 函数的图像呈现出 “S” 型曲线,当
z
趋近于正无穷时,
g(z)
趋近于 1;当
z
趋近于负无穷时,
g(z)
趋近于 0 。将线性回归的输出
z
代入 Sigmoid 函数,得到逻辑回归模型的预测函数:
hθ(x)=g(θTx)=1+e−θTx1
hθ(x)
表示给定特征
x
时,样本属于正类(类别 1)的概率。例如,
hθ(x)=0.8
,则意味着该样本有 80% 的概率属于正类。
二、逻辑回归的数学推导
(一)损失函数
对于线性回归,我们使用均方误差(MSE)作为损失函数来衡量预测值与真实值之间的差异。但在逻辑回归中,由于预测的是概率值,均方误差不再适用,而是采用对数损失函数(Log Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。
假设样本数据集,其中是第个样本的特征向量,是第个样本的真实标签。单个样本的对数损失函数为:
L(hθ(x),y)=−[ylog(hθ(x))+(1−y)log(1−hθ(x))]
当
y=1
时,损失函数简化为
−log(hθ(x))
,此时
hθ(x)
越接近 1,损失越小;当
y=0
时,损失函数变为
−log(1−hθ(x))
,
hθ(x)
越接近 0,损失越小。
整个数据集的对数损失函数(成本函数)为:
J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
(二)参数优化
逻辑回归的目标是找到一组最优的参数,使得成本函数最小化。通常使用梯度下降法(Gradient Descent)来更新参数。
首先,计算成本函数关于参数的梯度:
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
然后,使用梯度下降的更新公式来迭代更新参数
θj
:
θj:=θj−α∂θj∂J(θ)
其中,
α
是学习率,控制每次参数更新的步长。不断重复上述过程,直到成本函数
J(θ)
收敛到最小值或达到预设的迭代次数,此时得到的参数
θ
即为逻辑回归模型的最优参数。
三、逻辑回归的实现步骤
(一)数据预处理
x′=xmax−xminx−xmin
;标准化将特征值转换为均值为 0,标准差为 1 的分布,公式为x′=σx−μ
,其中μ
是均值,σ
是标准差。(二)模型训练
在 Python 中,可以使用 Scikit-learn 库方便地实现逻辑回归模型的训练。以下是一个简单的示例代码:
TypeScript
取消自动换行复制
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import numpy as np
# 加载数据集(这里以鸢尾花数据集为例)
iris = load_iris()
X = iris.data[:, :2] # 选取前两个特征
y = (iris.target == 0).astype(int) # 将类别0作为正类,其他作为负类
# 划分训练集和测试集
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)
(三)模型评估
训练好模型后,需要对其性能进行评估。常用的评估指标有:
Accuracy=TP+TN+FP+FNTP+TN
,其中TP
(真正例)是被正确预测为正类的样本数,TN
(真负例)是被正确预测为负类的样本数,FP
(假正例)是被错误预测为正类的样本数,FN
(假负例)是被错误预测为负类的样本数。Precision=TP+FPTP
。Recall=TP+FNTP
。F1=Precision+Recall2×Precision×Recall
。可以使用 Scikit-learn 库中的相关函数计算这些评估指标,示例代码如下:
TypeScript
取消自动换行复制
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, roc_curve
import matplotlib.pyplot as plt
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
# 计算精确率
precision = precision_score(y_test, y_pred)
print("精确率:", precision)
# 计算召回率
recall = recall_score(y_test, y_pred)
print("召回率:", recall)
# 计算F1值
f1 = f1_score(y_test, y_pred)
print("F1值:", f1)
# 计算ROC曲线和AUC
y_scores = model.predict_proba(X_test)[:, 1] # 得到正类的预测概率
fpr, tpr, thresholds = roc_curve(y_test, y_scores)
auc = roc_auc_score(y_test, y_scores)
# 绘制ROC曲线
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
四、逻辑回归的优缺点
(一)优点
θ
的大小和正负来判断每个特征对预测结果的影响方向和程度 。例如,θj>0
表示特征xj
增大时,样本属于正类的概率增加;θj<0
则表示特征xj
增大时,样本属于正类的概率减小。(二)缺点
五、逻辑回归的扩展与应用
(一)多分类问题
逻辑回归不仅可以处理二分类问题,还可以通过扩展应用于多分类问题,常见的方法有 “一对多(One-vs-Rest,OvR)” 和 “多对多(One-vs-One,OvO)” 。
K
个类别,训练K
个逻辑回归模型,每个模型将其中一个类别作为正类,其余类别作为负类。预测时,将样本输入到K
个模型中,选择概率最大的类别作为预测结果。K
个类别,两两组合构建2K(K−1)
个二分类模型。预测时,根据各个模型的预测结果进行投票,得票最多的类别为最终预测结果。(二)实际应用场景
逻辑回归作为机器学习领域的经典算法,以其简洁高效、可解释性强的特点,在众多领域发挥着重要作用。通过深入理解其原理、掌握实现方法,并结合实际应用场景进行灵活运用,能够为数据分析和决策提供有力支持。随着机器学习技术的不断发展,逻辑回归也在与其他算法结合,衍生出更多强大的模型和应用。希望本文能帮助你对逻辑回归有更全面、深入的认识,为进一步探索机器学习的奥秘奠定基础。
以上详细介绍了逻辑回归的方方面面。若你对某个部分还想深入了解,或是有特定的应用场景需求,欢迎随时和我说。