目錄
經(jīng)典SVM
軟間隔SVM
核SVM
SVM分類器應(yīng)用于人臉識別
SVM優(yōu)點
SVM缺點?
經(jīng)典SVM
支持向量機(Support Vector Machine,SVM)是一種二分類模型,其基本思想是在特征空間中找到一個最優(yōu)的超平面,使得正負(fù)樣本點到該超平面的距離最大化,從而實現(xiàn)對樣本的分類。
軟間隔SVM
核SVM
SVM分類器應(yīng)用于人臉識別
經(jīng)典SVM為二分類模型,對于多分類模型,可以通過以下兩種方法實現(xiàn):
①One-vs-One(OVO):將每個類別之間的所有可能組合都訓(xùn)練一個二元分類器,然后通過投票或者加權(quán)投票來決定最終的分類結(jié)果。
②One-vs-All(OVA):將一個類別作為正例,其余所有類別作為負(fù)例,訓(xùn)練一個二元分類器,然后重復(fù)這個過程,直到每個類別都有一個分類器。最后通過投票或者加權(quán)投票來決定最終的分類結(jié)果。
對于人臉識別,SVM是用來分類的,我們可以使用像PCA、LDA、LPP、NPE等降維算法先進(jìn)行數(shù)據(jù)降維再分類。
?SVM二分類代碼,即文章開頭的圖片示例matlab代碼:
% 生成隨機數(shù)據(jù)
X = [randn(20,2)-2; randn(20,2)+2]; % 生成20個標(biāo)簽為-1的點和20個標(biāo)簽為1的點,分別在(-4,-4)和(4,4)的區(qū)域內(nèi)
Y = [-1*ones(20,1); ones(20,1)]; % 將標(biāo)簽存入列向量y中
% 擬合SVM模型
svmModel = fitcsvm(X,Y); % 擬合線性SVM模型
% 繪制決策邊界
w = svmModel.Beta; % 獲取模型的權(quán)重向量w
b = svmModel.Bias; % 獲取模型的偏置項b
a = -w(1)/w(2); % 計算決策邊界的斜率
xx = linspace(-5,5); % 生成x坐標(biāo)
yy = a*xx - b/w(2); % 計算決策邊界的y坐標(biāo)
margin = 1/sqrt(sum(w.^2)); % 計算間隔邊界的寬度
yy_down = yy - sqrt(1+a^2)*margin; % 計算下界的y坐標(biāo)
yy_up = yy + sqrt(1+a^2)*margin; % 計算上界的y坐標(biāo)
% 繪制數(shù)據(jù)點和支持向量
figure; % 創(chuàng)建新的圖形窗口
gscatter(X(:,1),X(:,2),Y,'br','x+'); % 繪制數(shù)據(jù)點,標(biāo)簽為-1的點用藍(lán)色表示,標(biāo)簽為1的點用紅色表示
hold on; % 將圖形保持在當(dāng)前狀態(tài),以便繪制其他圖形
plot(xx,yy,'k-'); % 繪制決策邊界
plot(xx,yy_down,'k--'); % 繪制間隔邊界下界
plot(xx,yy_up,'k--'); % 繪制間隔邊界上界
plot(svmModel.SupportVectors(:,1),svmModel.SupportVectors(:,2),'go','MarkerSize',10); % 繪制支持向量,用黑色圓點表示
axis([-5 5 -5 5]); % 設(shè)置坐標(biāo)軸范圍
legend('Class A','Class B','Decision boundary','Margin','Margin','Support vectors'); % 設(shè)置圖例
hold off; % 關(guān)閉當(dāng)前圖形的保持狀態(tài),以便繪制其他圖形
人臉識別多分類,使用OVO模式訓(xùn)練SVM模型,構(gòu)建標(biāo)簽矩陣后進(jìn)行模型訓(xùn)練,然后將數(shù)據(jù)寫入excel表格,我這里的代碼例子是先用PCA進(jìn)行降維的,所以寫入PCA.xlsx文件中。
halfDataNumber=pictureNumber/2;
Y=zeros(halfDataNumber,1);
for i=1:halfDataNumber
Y(i)=floor((i-1)/testNumber)+1;
end
for dimension=5:5:160
egienvector=egienvectors(:,1:dimension);
trainDataTemp=egienvector'*trainData;
testDataTemp=egienvector'*testData;
right=0;
model=fitcecoc(trainDataTemp',Y);
YPredicted=predict(model,testDataTemp');
for i=1:halfDataNumber
if Y(i)==YPredicted(i)
right=right+1;
end
end
rate=right/halfDataNumber;
SVMresult=[SVMresult,rate];
end
X=5:5:160;
plot(X,SVMresult);
writematrix(SVMresult,'PCA.xlsx');
SVM優(yōu)點
優(yōu)點:文章來源:http://www.zghlxwxcb.cn/news/detail-502461.html
- 高效性:SVM在處理高維度數(shù)據(jù)和樣本數(shù)量較少的情況下表現(xiàn)出色,因為它只關(guān)注支持向量,而不受非支持向量的影響。
- 可解釋性:SVM提供了對分類結(jié)果的良好解釋能力。支持向量可以幫助我們了解決策邊界及分類結(jié)果的原因。
- 魯棒性:SVM對于處理輸入空間中的噪音和異常值具有較好的魯棒性。由于它的決策函數(shù)只依賴于支持向量,所以局部的擾動并不會對整體模型產(chǎn)生很大影響。
- 泛化能力:SVM通過最大化間隔來選擇最優(yōu)決策邊界,從而提高了模型的泛化能力。這種特性使得SVM在處理未見過的數(shù)據(jù)時表現(xiàn)較好。
SVM缺點?
缺點:文章來源地址http://www.zghlxwxcb.cn/news/detail-502461.html
- 參數(shù)調(diào)優(yōu)困難:SVM中的核函數(shù)和正則化參數(shù)需要事先進(jìn)行合理設(shè)置,而且對于不同的問題,最優(yōu)的參數(shù)往往是不同的,因此調(diào)優(yōu)可能需要耗費大量的時間和計算資源。
- 計算復(fù)雜度高:當(dāng)樣本量很大時,SVM的計算復(fù)雜度會顯著增加,尤其是在使用非線性核函數(shù)時。這可能導(dǎo)致訓(xùn)練時間較長,并且在大規(guī)模數(shù)據(jù)集上的應(yīng)用受到限制。
- 對缺失數(shù)據(jù)敏感:SVM對于缺失數(shù)據(jù)較為敏感,因為它主要依賴于支持向量,如果包含缺失值的樣本成為支持向量,則可能會影響模型的性能。
- 難以處理多分類問題:原始的SVM算法是二分類算法,要將其擴(kuò)展到多類別問題,通常需要借助一些技巧,如一對多(One-vs-Rest)或一對一(One-vs-One)策略。
到了這里,關(guān)于機器學(xué)習(xí)之SVM支持向量機的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!