Matplotlib 绘制逻辑回归分类的决策边界
在机器学习领域,分类问题是非常常见的,而逻辑回归则是其中最为基础的算法之一。对于二元分类问题,逻辑回归在预测时会输出一些数值,然后通过一个阈值来进行分类。
但是,仅仅有着预测结果是远远不够的,我们还需要知道该分类器是如何做出这样的预测的,即需要了解该分类器的决策边界。因此,在本文中,我们将会讲述如何使用Matplotlib来画出逻辑回归分类的决策边界。
阅读更多:Matplotlib 教程
逻辑回归的背景知识
逻辑回归是一种广义线性模型,通常用于处理二元分类问题。它的基本原理是将输入特征向量线性组合后,再通过一个激活函数进行非线性映射,输出的结果就可以作为预测结果。
逻辑回归的激活函数是Sigmoid函数,数学表达式如下:
\sigma(z) = \frac{1}{1+e^{-z}}
其中,z = \theta^Tx,\theta是参数向量,x是输入特征向量。
逻辑回归模型的训练过程就是通过一些优化算法对参数向量\theta进行求解的过程。求出\theta后,分类器就可以通过以下公式进行预测:
h_{\theta}(x) = \sigma(\theta^Tx)
其中,h_{\theta}(x)表示对于输入x,逻辑回归分类器输出的预测值。
绘制决策边界的思路
通过上述的概念知识,我们可以得知逻辑回归的模型是向量x到输出预测值y的映射,即可以将逻辑回归看作对平面上的点进行了一个二元分类。
于是,我们可以通过以下流程来绘制逻辑回归的决策边界:
- 首先,对于训练集中的所有数据点,求出其在逻辑回归预测函数中的预测值。
- 然后,将这些点按照预测值的大小进行分类,将大于等于0.5的预测值归到类别1,小于0.5的预测值归到类别0。
- 最后,将这些数据点在平面上进行绘制,并划分出两类数据点的区域。这个区域的边界,即是逻辑回归分类器的决策边界。
使用Matplotlib进行绘制
下面我们将使用Python中的Matplotlib库来实现上述的思路。
首先,我们需要生成一些随机的训练数据点,并将这些点绘制在平面上。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机的训练数据点
np.random.seed(0)
X = np.random.randn(50, 2)
y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
# 绘制数据点
plt.scatter(X[y == 0, 0], X[y == 0, 1], color='blue')
plt.scatter(X[y == 1, 0], X[y == 1, 1], color='red')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
我们可以看到,上述代码生成了一个包含50个点的随机数据集,并将其绘制在平面上。其中,蓝色的点表示类别0,红色的点表示类别1。
接下来,我们需要使用逻辑回归模型进行训练,并根据模型输出的预测值绘制出决策边界。
为了方便绘制,我们定义了一个名为plot_decision_boundary()
的函数,该函数接收训练数据X
、训练标签y
以及训练好的逻辑回归模型作为输入参数,然后根据上述流程绘制出决策边界。
下面是完整的代码:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LogisticRegression
def plot_decision_boundary(X, y, model):
# 绘制数据点
plt.scatter(X[y == 0, 0], X[y == 0, 1], color='blue')
plt.scatter(X[y == 1, 0], X[y == 1, 1], color='red')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
# 绘制决策边界
x_min, x_max = X[:, 0].min() - 0.1, X[:, 0].max() + 0.1
y_min, y_max = X[:, 1].min() - 0.1, X[:, 1].max() + 0.1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),
np.linspace(y_min, y_max, 100))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, levels=[0.5], linestyles='dashed')
plt.show()
# 生成随机的训练数据点
np.random.seed(0)
X = np.random.randn(50, 2)
y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
# 训练逻辑回归模型
clf = LogisticRegression()
clf.fit(X, y)
# 绘制决策边界
plot_decision_boundary(X, y, clf)
我们可以看到,图像中黑色虚线所表示的边界即是逻辑回归分类器的决策边界,将平面分为类别0(蓝色)和类别1(红色)两个部分。同时,我们也可以看到,逻辑回归分类器对于这个问题的分类效果还是比较好的。
总结
本文通过介绍逻辑回归的基本原理,提出了通过设定阈值来进行二元分类的方法,并通过实例详细介绍了如何利用Python中的Matplotlib库来绘制逻辑回归分类器的决策边界。通过本文的学习,读者不仅可以掌握逻辑回归的基本知识,还可以了解到如何使用Matplotlib对机器学习模型的结果进行可视化分析。