Matplotlib 绘制逻辑回归分类的决策边界

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对机器学习模型的结果进行可视化分析。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程