请写一段SVM用高斯基核函数对两类数据训练集进行分类的matlab代码,并用测试集进行测试,得到识别率,并可视化
时间: 2024-04-30 22:22:30 浏览: 72
以下是使用高斯基核函数对两类数据训练集进行分类的matlab代码:
```matlab
% 加载数据集
load('data.mat');
% 将数据集分为训练集和测试集
train_data = [class1_data(1:80,:); class2_data(1:80,:)];
train_label = [ones(80,1); -ones(80,1)];
test_data = [class1_data(81:end,:); class2_data(81:end,:)];
test_label = [ones(20,1); -ones(20,1)];
% 训练SVM模型
model = fitcsvm(train_data, train_label, 'KernelFunction', 'rbf');
% 测试模型
[predict_label, score] = predict(model, test_data);
% 计算识别率
accuracy = sum(predict_label == test_label) / length(test_label)
% 可视化分类结果
figure;
hold on;
gscatter(test_data(:,1), test_data(:,2), predict_label, 'rb', 'xo');
svm_plot(model);
title('SVM classification using RBF kernel');
legend('Class 1', 'Class 2', 'SVM boundary');
hold off;
```
其中,`data.mat`是包含两类数据的mat文件,分别为`class1_data`和`class2_data`。
可视化分类结果的函数`svm_plot`如下:
```matlab
function svm_plot(model)
% 绘制SVM分类边界
% model: SVM模型
% 获取SVM分类边界的参数
w = model.Beta;
b = model.Bias;
x1 = linspace(min(model.X(:,1)), max(model.X(:,1)), 100);
x2 = linspace(min(model.X(:,2)), max(model.X(:,2)), 100);
[X1, X2] = meshgrid(x1, x2);
f = @(x1, x2) w(1)*x1 + w(2)*x2 + b;
Z = arrayfun(f, X1, X2);
% 绘制等高线图
contour(X1, X2, Z, [0,0], 'LineWidth', 2, 'Color', 'k');
end
```
运行以上代码,可以得到分类结果的可视化图像和识别率。
阅读全文