You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中绘制类似示例图的感知机数据集

修正感知机实验数据集生成与可视化代码

你这段Matlab代码在数据集生成和分类逻辑上存在不少问题,没法正确输出符合要求的感知机实验数据。我帮你调整优化,完全贴合你需要的规则:

问题分析

原代码的核心问题:

  • 分类标签Y的生成逻辑完全错误,没有遵循sin(x₁) > x₂的判断规则
  • x₂的生成写法冗余混乱,分组逻辑和分类规则不匹配
  • 绘图时的点分组没有对应正确的分类结果

修正后的完整代码

clc; close all; clear all;

% 设置样本总数
I = 400;

% 生成符合范围要求的数据集
x1 = rand(I, 1) * 2*pi;  % x₁ ∈ [0, 2π]
x2 = rand(I, 1) * 2 - 1; % x₂ ∈ [-1, 1],通过缩放平移rand的[0,1]区间得到
X = [x1, x2];

% 按照规则生成分类标签:sin(x₁) > x₂时标记为1,否则标记为-1(可按需换成0/1)
Y = ones(I, 1);
Y(sin(x1) <= x2) = -1;

% 提取两类数据的索引,用于绘图
class1_points = Y == 1;  % 满足sin(x₁) > x₂的点
class2_points = Y == -1; % 不满足条件的点

% 可视化数据集与分类边界
figure;
plot(X(class1_points, 1), X(class1_points, 2), 'bx', 'DisplayName', 'sin(x₁) > x₂');
hold on;
plot(X(class2_points, 1), X(class2_points, 2), 'go', 'DisplayName', 'sin(x₁) ≤ x₂');
% 添加参考正弦曲线,清晰展示分类边界
x_ref = linspace(0, 2*pi, 1000);
plot(x_ref, sin(x_ref), 'r-', 'DisplayName', 'y = sin(x)');

% 完善图表标注
grid on;
xlabel('x₁');
ylabel('x₂');
title('感知机实验数据集可视化');
legend;

代码说明

  • 数据集生成:
    • x1直接通过rand(I,1)*2*pi生成[0,2π]区间的随机数,写法简洁准确
    • x2用rand(I,1)*2 -1将[0,1]区间的随机数缩放平移到[-1,1],比原代码逻辑更清晰
  • 分类标签:
    • 先初始化所有标签为1,再把不满足sin(x₁) > x₂的点标签设为-1,严格匹配你的分类规则
  • 可视化优化:
    • 按分类标签提取对应点,确保绘图点和分类结果完全对应
    • 添加了参考正弦曲线,直观展示两类点的划分边界
    • 补充了坐标轴标签、标题和图例,让图表可读性更强

运行这段代码后,你就能得到完全符合要求的数据集,清晰看到两类点被正弦曲线划分的效果,可以直接用于后续的感知机实验环节。

内容的提问来源于stack exchange,提问作者azor0707id

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:53