【SVM分類】基于遺傳算法優(yōu)化支持向量機實現葡萄酒分類附matlab代碼
1 簡介
支持向量機是一種建立在統(tǒng)計學習理論上的機?器學習方法,?它追求結構化風險最小而不是經驗風?險最小,?具有很強的推廣能力. SVM?是從線性可分?的二分類問題發(fā)展而來的,?其基本思想是尋找兩類?樣本的最優(yōu)分類面,?使得兩類樣本的分類間隔?( margin)?最大.?以圖?1?所示為例.?圖中:?實心點和空?心點分別代表兩類樣本;?H?為分類線, H1?和?H2?分?別為各類中離分類線最近的樣本且平行于分類線的?直線,?它們之間的距離稱為分類間隔.?所謂最優(yōu)分類?線就是要求分類線不但能將兩類正確分開,?而且使?分類間隔最大.?







2 部分代碼
%% SVM神經網絡中的參數優(yōu)化---如何更好的提升分類器的性能
%% 清空環(huán)境變量
close all;
clear;
clc;
format compact;
%% 數據提取
% 載入測試數據wine,其中包含的數據為classnumber = 3,wine:178*13的矩陣,wine_labes:178*1的列向量
load chapter13_wine.mat;
% 畫出測試數據的box可視化圖
figure;
boxplot(wine,'orientation','horizontal','labels',categories);
title('wine數據的box可視化圖','FontSize',12);
xlabel('屬性值','FontSize',12);
grid on;
% 畫出測試數據的分維可視化圖
figure
subplot(3,5,1);
hold on
for run = 1:178
? ?plot(run,wine_labels(run),'*');
end
xlabel('樣本','FontSize',10);
ylabel('類別標簽','FontSize',10);
title('class','FontSize',10);
for run = 2:14
? ?subplot(3,5,run);
? ?hold on;
? ?str = ['attrib ',num2str(run-1)];
? ?for i = 1:178
? ? ? ?plot(i,wine(i,run-1),'*');
? ?end
? ?xlabel('樣本','FontSize',10);
? ?ylabel('屬性值','FontSize',10);
? ?title(str,'FontSize',10);
end
% 選定訓練集和測試集
% 將第一類的1-30,第二類的60-95,第三類的131-153做為訓練集
train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
% 相應的訓練集的標簽也要分離出來
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
% 將第一類的31-59,第二類的96-130,第三類的154-178做為測試集
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
% 相應的測試集的標簽也要分離出來
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
%% 數據預處理
% 數據預處理,將訓練集和測試集歸一化到[0,1]區(qū)間
[mtrain,ntrain] = size(train_wine);
[mtest,ntest] = size(test_wine);
dataset = [train_wine;test_wine];
% mapminmax為MATLAB自帶的歸一化函數
[dataset_scale,ps] = mapminmax(dataset',0,1);
dataset_scale = dataset_scale';
% 打印測試集分類準確率
total = length(test_wine_labels);
right = sum(predict_label == test_wine_labels);
disp('打印測試集分類準確率');
str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);
disp(str);
%% 結果分析
% 測試集的實際分類和預測分類圖
figure;
hold on;
plot(test_wine_labels,'o');
plot(predict_label,'r*');
xlabel('測試集樣本','FontSize',12);
ylabel('類別標簽','FontSize',12);
legend('實際測試集分類','預測測試集分類');
title('測試集的實際分類和預測分類圖','FontSize',12);
grid on;
snapnow;
3 仿真結果



4 參考文獻
[1]陳果. 基于遺傳算法的支持向量機分類器模型參數優(yōu)化[J]. 機械科學與技術, 2007, 26(3):347-350.
博主簡介:擅長智能優(yōu)化算法、神經網絡預測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。
部分理論引用網絡文獻,若有侵權聯(lián)系博主刪除。
