逻辑回归

介绍

逻辑回归是一种广泛应用于分类问题的算法。与线性回归不同,逻辑回归可以处理离散输出变量,并且能够提供概率估计。

原理

Sigmoid函数

逻辑回归使用Sigmoid函数将线性组合转换为概率值。Sigmoid函数的公式如下:

罗辑回归小demo_数据集

其中,罗辑回归小demo_回归_02是输入的线性组合,罗辑回归小demo_回归_03是权重向量,罗辑回归小demo_数据集_04是输入特征向量,罗辑回归小demo_回归_05是偏置项。

Sigmoid函数的值域在罗辑回归小demo_损失函数_06之间,表示为样本属于正类的概率。

损失函数

逻辑回归使用交叉熵损失函数来衡量模型的性能。对于二元分类问题,交叉熵损失函数的公式如下:

罗辑回归小demo_回归_07

其中,罗辑回归小demo_损失函数_08是样本数,罗辑回归小demo_回归_09是第罗辑回归小demo_损失函数_10个样本的真实标签值(取0或1),罗辑回归小demo_逻辑回归_11是模型对第罗辑回归小demo_损失函数_10个样本的预测值(取0到1之间的概率值)。

梯度下降

逻辑回归使用梯度下降算法来最小化损失函数。梯度下降算法的公式如下:

罗辑回归小demo_逻辑回归_13

罗辑回归小demo_逻辑回归_14

其中,罗辑回归小demo_机器学习_15是学习率(learning rate),罗辑回归小demo_回归_16罗辑回归小demo_逻辑回归_17分别是损失函数对权重和偏置项的偏导数。

通过更新权重和偏置项,模型可以逐步优化并提高预测性能。

代码演示

下面是一个使用Python实现逻辑回归的例子。我们将使用sklearn库中的Iris数据集进行演示。

首先,我们需要导入所需的库和数据集:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

# 加载Iris数据集
iris = load_iris()
X = iris.data[:, :2]  # 只使用前两个特征
y = (iris.target != 0) * 1 # 将标签转换为二元变量

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

接下来,我们可以使用sklearn库中的LogisticRegression类创建模型并进行训练:

# 创建逻辑回归模型
lr = LogisticRegression()

# 训练模型
lr.fit(X_train, y_train)

训练完成后,我们可以使用测试集进行预测并计算模型的准确率:

# 预测测试集
y_pred = lr.predict(X_test)

# 计算准确率
accuracy = np.mean(y_pred == y_test)
print('Accuracy:', accuracy)

最后,我们可以绘制决策边界图来可视化模型的分类效果:

# 绘制决策边界
xx, yy = np.mgrid[4:8:.01, 2:4.5:.01]
grid = np.c_[xx.ravel(), yy.ravel().astype(np.float32))
probs = lr.predict_proba(grid)[:, 1].reshape(xx.shape)

f, ax = plt.subplots(figsize=(8, 6))
ax.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.6)
ax.scatter(X_test[:,0], X_test[:,1], c=y_test, s=50,
           cmap="RdBu", vmin=-.2, vmax=1.2,
           edgecolor="white", linewidth=1)

plt.show()

这段代码会生成一个包含决策边界的散点图,其中红色表示正类,蓝色表示负类。

总结

逻辑回归是一种常用的分类算法,可以对样本进行概率估计,并通过最小化交叉熵损失函数来优化模型。在实际应用中,我们需要根据数据集的特点和任务需求选择合适的逻辑回归模型,并通过调整超参数和优化算法来提高预测性能。