您好,登錄后才能下訂單哦!
這篇文章主要介紹“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。