matlab中轮廓检测算法(matlab分类识别算法)(1)

wine.mat

原始数据

matlab中轮廓检测算法(matlab分类识别算法)(2)

在SVM程序算法中做分类可视化

目前可以选取两个

输入特征

且为做二分类的

问题

才能可视化

例如选取标签为

1、2

的前两列特征作为

输入特征

%% clc clear all load('C:\Users\Administrator\Desktop\wine1.mat') data1 = wine(1:59,:); data2 = wine(60:130,:); %选择两维进行分类可视化 p = 2; q = p 1; %合并样本数据 data0=[data1;data2]; train_data=data0(:,p:q); train_label=data0(:,1); %原始样本分布图灰度均值与灰度方差 figure('NumberTitle', 'on', 'Name','灰度均值与灰度方差'); hold on; grid on; plot(data1(:,p),data1(:,q),'*'), plot(data2(:,p),data2(:,q),' '), title('训练样本数据');

原始数据散点图

分布可视化

matlab中轮廓检测算法(matlab分类识别算法)(3)

在SVM中

径向基核函数宽度

以及惩罚因子

需要迭代寻优

可采用交叉验证的方式

找到一个较优的组合

%交叉验证部分代码略去 %cmd中参量为待优化选取参量 cmd = ['-c ',num2str( bestc ),' -g ',num2str( bestg )]; model=libsvmtrain(train_label,train_data,cmd); %径向基函数 test_label=train_label; test_data=train_data; [predict_label,accuracy,dec_values] = svmpredict(test_label,test_data, model);

训练和预测结束以后

对结果进行可视化呈现

程序设计

%% demension1 = 1; demension2 = 2; minX = min(test_data(:, demension1)); maxX = max(test_data(:, demension1)); minY = min(test_data(:, demension2)); maxY = max(test_data(:, demension2)); gridX = (maxX - minX) ./ 100; gridY = (maxY - minY) ./ 100; minX = minX - 10 * gridX; maxX = maxX 10 * gridX; minY = minY - 10 * gridY; maxY = maxY 10 * gridY; [denseX, denseY] = meshgrid(minX:gridX:maxX, minY:gridY:maxY); %% model.Parameters(1) = 3; [m,n]=size(denseX); dense_data=[reshape(denseX,m*n, 1), reshape(denseY,m*n,1)]; dense_label = ones(m*n,1); %密集点分类 model.Parameters(1) = 3; [lab] =svmpredict(dense_label,dense_data, model); dense_pre_lab = reshape(lab, m,n); %% %画分类后的点及SV figure('NumberTitle', 'on', 'Name','分类结果可视化'); hold on; grid on; m=length(predict_label); for i=1:m if (predict_label(i)==1) %标签为1 a= plot(test_data(i, 1), test_data(i, 2), 'r '); end if (predict_label(i)==2) %标签为2 b= plot(test_data(i, 1), test_data(i, 2), 'k*'); end end c= plot( model.SVs(:,1),model.SVs(:,2),'o' ); %支持向量 legend([a,b,c],'class1','class2','Support Vectors'); [C,h] = contour(denseX, denseY, dense_pre_lab,-1:1); clabel(C,h,'Color','r'); %类似等温曲线图 %曲线参数调整 xlabel('灰度均值','FontSize',12); ylabel('灰度方差','FontSize',12); title('The visualization of classification','FontSize',12);

执行程序代码

输出可视化图像

分类准率在

95%以上

matlab中轮廓检测算法(matlab分类识别算法)(4)

值得思考的问题是

有支持向量

并未在曲线上

显示PSO算法优化后

准确率随迭代寻优

的变化情况

matlab中轮廓检测算法(matlab分类识别算法)(5)

历经20次迭代寻优

结果达到最优

记录此时返回优化参数即可

同理

可以查看其它特征输入下

可视化情况

matlab中轮廓检测算法(matlab分类识别算法)(6)

matlab中轮廓检测算法(matlab分类识别算法)(7)

THE

END

matlab中轮廓检测算法(matlab分类识别算法)(8)

,