这篇文章主要介绍“Java如何实现一类支持向量机”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何实现一类支持向量机”文章能帮助大家解决问题。
通常一类问题出现在需要对训练样本进行一定比例的筛选,或者已知的训练样本都是正样本,而负样本却很少的情况。
这种情况下,往往需要训练一个对于训练样本紧凑的分类边界,就可以通过负样本实验。一个简单的实际例子是:一个工厂对于产品的合格性进行检查时,往往所知道是合格产品的参数,而不合格的产品的参数要么空间比较大,要么知道的很少。这种情况下就可以通过已知的合格产品参数来训练一个一类分类器,得到一个紧凑的分类边界,超出这个边界就认为是不合格产品。
%% 加载“鸢尾花”数据集
% 删除花瓣的长度和宽度
% 将所有的鸢尾花视为同一类
load fisheriris
X = meas(:,1:2);
y = ones(size(X,1),1);
%% 使用处理后的数据集训练SVM分类器
% 假设5%的观测值是异常值
rng(1);
SVMModel = fitcsvm(X,y,'KernelScale','auto','Standardize',true,...
'OutlierFraction',0.05);
% SVMModel模型是一个训练好的分类器
% 默认情况下,软件使用高斯内核的一类学习
%% 绘制观测和检测边界,标记支持向量和可能离群值
svInd = SVMModel.IsSupportVector;
h = 0.02; % 网格步长
[X1,X2] = meshgrid(min(X(:,1)):h:max(X(:,1)),...
min(X(:,2)):h:max(X(:,2)));
[~,score] = predict(SVMModel,[X1(:),X2(:)]);
scoreGrid = reshape(score,size(X1,1),size(X2,2));
figure
plot(X(:,1),X(:,2),'k.')
hold on
plot(X(svInd,1),X(svInd,2),'ro','MarkerSize',10)
contour(X1,X2,scoreGrid)
colorbar;
title('{\bf Iris Outlier Detection via One-Class SVM}')
xlabel('Sepal Length (cm)')
ylabel('Sepal Width (cm)')
legend('Observation','Support Vector')
hold off
% 图中离群值和其他数据以0为分界线
%% 交叉验证数据中负分数的观测值比例接近5%
CVSVMModel = crossval(SVMModel);
[~,scorePred] = kfoldPredict(CVSVMModel);
outlierRate = mean(scorePred<0);
disp(outlierRate)
关于“Java如何实现一类支持向量机”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。