授课语音

使用 MLP 实现非线性分类

多层感知器(MLP, Multi-Layer Perceptron) 是一种非常有效的工具来解决非线性分类问题。由于其包含至少一个隐藏层,MLP 能够通过非线性激活函数对输入数据进行复杂的映射,进而能够拟合和分类复杂的非线性关系。下面我们将通过一个实际的例子,演示如何使用 MLP 实现非线性分类。


1. 问题背景

在许多实际问题中,数据的分布往往是非线性的。比如,数据点之间的类别不能用直线或平面分开,这种情况就需要模型具有非线性决策边界。多层感知器(MLP)正是通过多个隐藏层和激活函数来应对这一挑战。

2. 使用 MLP 进行非线性分类

我们可以通过一个常见的非线性数据集——XOR(异或)数据集,来演示 MLP 如何进行非线性分类。

XOR 问题描述:

XOR(异或)是一个经典的非线性分类问题,输入由两个二进制数(0或1)组成,输出为这两个数的异或结果。其真值表如下:

输入1 输入2 输出 (Y)
0 0 0
0 1 1
1 0 1
1 1 0

XOR 问题的数据集具有高度的非线性,无法通过一条直线(线性分类器)来进行划分,因此需要通过多层感知器来学习一个非线性决策边界。

3. Python 实现 MLP 进行非线性分类

我们使用 scikit-learn 中的 MLPClassifier 来构建和训练 MLP 模型。以下是完整的 Python 代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# 创建XOR数据集
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 0])  # XOR的标签

# 创建并训练MLP分类器
mlp = MLPClassifier(hidden_layer_sizes=(2,), activation='relu', max_iter=1000, random_state=42)
mlp.fit(X, y)

# 预测数据
y_pred = mlp.predict(X)

# 打印预测结果
print("Predictions:", y_pred)

# 可视化决策边界
xx, yy = np.meshgrid(np.linspace(-0.1, 1.1, 100), np.linspace(-0.1, 1.1, 100))
Z = mlp.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', s=100)
plt.title("MLP Classifier for XOR Problem")
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

4. 代码解析

  • 数据集生成:我们手动构建了一个 XOR 数据集,X 是输入特征,y 是对应的标签。
  • 创建 MLP 模型:我们通过 MLPClassifier 创建一个具有 1 个隐藏层、2 个神经元的 MLP 模型。选择 ReLU 作为激活函数。
  • 训练模型:通过 mlp.fit(X, y),使用 XOR 数据集来训练 MLP 模型。
  • 预测结果:使用训练好的模型对数据进行预测,并打印出预测结果。
  • 可视化决策边界:通过 matplotlib 可视化 MLP 分类器学习到的决策边界。

5. 结果解释

在运行上述代码后,你会看到如下内容:

  1. 预测结果:输出的预测结果将与真实标签匹配([0, 1, 1, 0]),证明 MLP 成功学习了 XOR 问题。
  2. 决策边界可视化:图中显示了 MLP 学到的非线性决策边界。由于 XOR 问题本身是非线性的,因此决策边界不是直线,而是呈现弯曲形状。数据点(0, 0)、(1, 1)被划分到一个类,数据点(0, 1)、(1, 0)被划分到另一个类。

6. 总结

  • MLP 适用于非线性分类:通过多层隐藏层和非线性激活函数(如 ReLU 或 Sigmoid),MLP 能够拟合非线性的数据,并能学习到复杂的决策边界。
  • 非线性问题的解决:在 XOR 问题中,MLP 通过训练能够成功划分两个非线性类别,表现出了强大的建模能力。
  • 可扩展性:尽管我们使用的是简单的 2 特征 XOR 数据集,但 MLP 也能够处理更复杂、高维的数据问题,只需调整网络结构(如增加隐藏层数或神经元数)。

通过这个例子,你可以看到 MLP 在处理非线性分类任务中的优势,特别是在决策边界复杂的情况下,它能够提供优越的性能。

去1:1私密咨询

系列课程: