题目
利用 SVM 将图中给定 5 类数据分为 3 类,并在原图中画出 3 类别分类曲线,然后再计算分类器精度。 其中分类器
按照 85-15%总体数据进行学习和测试,用模糊矩阵表示分类结论并对分类结果进行说明。
第一题: 提取数据+绘图
查找资料解决如何读取 fig 文件中数据,并按照自己的理解方式重新制 作 MATLAB 图形。
重新绘制图形如下:
从fig文件提取数据代码如下:
% 打开.fig文件并获取图形句柄
figure_handle = open('Fig_DataSetM.fig');
% 获取当前轴上的所有子图形对象
children = get(gca, 'Children');
% 初始化一个新的图形窗口
figure;
% 设置颜色映射和符号
colors = lines(length(children)); % 使用 lines 而不是 jet
markers = ['o', 'x', '+', '*', 's', 'd', 'v', 'p', 'h', '.'];
% 初始化空数组用于存储数据
data = [];
% 遍历所有子图形对象
for i = 1:length(children)
% 获取子图形对象的句柄
child = children(i);
% 为每个类别选择一个符号
marker = markers(mod(i-1, length(markers)) + 1);
% 检查子图形对象是否为一个组
if strcmp(get(child, 'Type'), 'hggroup')
% 获取组内的所有子图形对象
grand_children = get(child, 'Children');
% 遍历组内的所有子图形对象
for j = 1:length(grand_children)
grand_child = grand_children(j);
% 获取数据并画散点图,为每个类别设置一种颜色和一个符号
x_data = get(grand_child, 'XData');
y_data = get(grand_child, 'YData');
scatter(x_data, y_data, [], colors(i,:), marker);
hold on; % 保持当前图形
% 将数据添加到数组中
data = [data; [x_data(:), y_data(:), repmat(i, length(x_data), 1)]];
end
else
% 获取数据并画散点图,为每个类别设置一种颜色和一个符号
x_data = get(child, 'XData');
y_data = get(child, 'YData');
scatter(x_data, y_data, 'MarkerEdgeColor', colors(i,:), 'Marker', marker); % 不使用 'filled',而是指定边缘颜色
hold on; % 保持当前图形
% 将数据添加到数组中
data = [data; [x_data(:), y_data(:), repmat(i, length(x_data), 1