1.算法運(yùn)行效果圖預(yù)覽
2.算法運(yùn)行軟件版本 matlab2022a 3.算法理論概述 支持向量機(jī)(SVM)和多層感知器(MLP)是兩種常用的機(jī)器學(xué)習(xí)算法,它們?cè)跀?shù)據(jù)預(yù)測(cè)和分類任務(wù)中都有廣泛的應(yīng)用。下面將詳細(xì)介紹這兩種算法的原理和數(shù)學(xué)公式。 一、支持向量機(jī)(SVM) 支持向量機(jī)是一種二分類算法,其基本思想是在特征空間中找到一個(gè)最優(yōu)超平面,使得該超平面能夠?qū)⒉煌悇e的數(shù)據(jù)點(diǎn)盡可能地分開(kāi)。具體來(lái)說(shuō),對(duì)于一個(gè)二分類問(wèn)題,假設(shè)數(shù)據(jù)集包含n個(gè)樣本{(x1, y1), (x2, y2), ..., (xn, yn)},其中xi是輸入特征向量,yi是對(duì)應(yīng)的類別標(biāo)簽(+1或-1)。SVM的目標(biāo)是找到一個(gè)最優(yōu)超平面wx+b=0,使得該超平面能夠?qū)⒉煌悇e的數(shù)據(jù)點(diǎn)盡可能地分開(kāi),同時(shí)使得超平面兩側(cè)的空白區(qū)域(即“間隔”)最大化。 在數(shù)學(xué)上,SVM的優(yōu)化問(wèn)題可以表示為以下形式: min 1/2 ||w||^2 + C ∑ ξ_i s.t. y_i (w^T x_i + b) ≥ 1 - ξ_i, i=1,2,...,n ξ_i ≥ 0, i=1,2,...,n 其中,w是超平面的法向量,b是超平面的截距,C是一個(gè)懲罰參數(shù),用于控制誤分類的懲罰力度,ξ_i是第i個(gè)樣本的松弛變量,用于容忍一些不可分的樣本。該優(yōu)化問(wèn)題的目標(biāo)是最小化超平面的法向量長(zhǎng)度(即||w||^2)和誤分類的懲罰項(xiàng)(即C ∑ ξ_i)。 對(duì)于非線性可分的情況,可以通過(guò)核函數(shù)將輸入特征映射到高維空間,使得在高維空間中數(shù)據(jù)變得線性可分。此時(shí),優(yōu)化問(wèn)題中的內(nèi)積運(yùn)算需要用核函數(shù)來(lái)替代。常見(jiàn)的核函數(shù)包括線性核、多項(xiàng)式核和高斯核等。 二、多層感知器(MLP) 多層感知器是一種前向傳播的神經(jīng)網(wǎng)絡(luò),其基本結(jié)構(gòu)包括輸入層、隱藏層和輸出層。在數(shù)據(jù)預(yù)測(cè)任務(wù)中,MLP通過(guò)學(xué)習(xí)輸入數(shù)據(jù)和輸出數(shù)據(jù)之間的非線性映射關(guān)系,來(lái)對(duì)新的輸入數(shù)據(jù)進(jìn)行預(yù)測(cè)。具體來(lái)說(shuō),對(duì)于一個(gè)回歸問(wèn)題,假設(shè)數(shù)據(jù)集包含n個(gè)樣本{(x1, y1), (x2, y2), ..., (xn, yn)},其中xi是輸入特征向量,yi是對(duì)應(yīng)的輸出值。MLP的目標(biāo)是找到一個(gè)最優(yōu)的網(wǎng)絡(luò)參數(shù)θ,使得對(duì)于任意一個(gè)新的輸入x,都能夠輸出一個(gè)盡可能接近真實(shí)值y的預(yù)測(cè)值。 在數(shù)學(xué)上,MLP的預(yù)測(cè)過(guò)程可以表示為以下形式: y_pred = f(x; θ) 其中,f(·)表示MLP的網(wǎng)絡(luò)結(jié)構(gòu),θ表示網(wǎng)絡(luò)參數(shù)。通常,MLP的網(wǎng)絡(luò)結(jié)構(gòu)包括多個(gè)隱藏層和非線性激活函數(shù),如ReLU、sigmoid或tanh等。網(wǎng)絡(luò)參數(shù)的優(yōu)化通常采用梯度下降算法及其變種,如批量梯度下降、隨機(jī)梯度下降和小批量梯度下降等。在訓(xùn)練過(guò)程中,通過(guò)反向傳播算法計(jì)算損失函數(shù)對(duì)網(wǎng)絡(luò)參數(shù)的梯度,并根據(jù)梯度更新網(wǎng)絡(luò)參數(shù),以最小化預(yù)測(cè)誤差。常見(jiàn)的損失函數(shù)包括均方誤差損失、交叉熵?fù)p失等。 需要注意的是,MLP的訓(xùn)練過(guò)程容易陷入局部最優(yōu)解和過(guò)擬合等問(wèn)題。為了避免這些問(wèn)題,可以采用一些正則化技術(shù),如L1正則化、L2正則化和dropout等。此外,還可以采用一些集成學(xué)習(xí)技術(shù),如bagging和boosting等,以提高模型的泛化能力和魯棒性。 4.部分核心程序 %SVM % 以下是關(guān)于SVM模型的設(shè)置。 % 并行計(jì)算設(shè)置,使用多核CPU進(jìn)行計(jì)算。 svm_opt = statset('UseParallel',true); tic% 開(kāi)始計(jì)時(shí),計(jì)算模型訓(xùn)練時(shí)間。 % 使用fitcsvm函數(shù)訓(xùn)練SVM模型,其中標(biāo)準(zhǔn)化設(shè)為真,核函數(shù)、多項(xiàng)式階數(shù)、盒子約束等參數(shù)進(jìn)行設(shè)置。結(jié)果為最優(yōu)的SVM模型svm_optimal。 svm_models = fitcsvm(xTrain,yTrain, 'Standardize', true,... 'KernelFunction',"polynomial",...% "polynomial"核函數(shù)是一個(gè)多項(xiàng)式核函數(shù),它對(duì)應(yīng)于無(wú)窮維特征空間中的點(diǎn)積。 'PolynomialOrder' ,2,...% "2"定義了多項(xiàng)式的階數(shù) 'BoxConstraint',0.8);%"0.8"定義了約束條件。 % 計(jì)算并存儲(chǔ)SVM模型訓(xùn)練時(shí)間。 Time_svm = toc; % 對(duì)測(cè)試集進(jìn)行預(yù)測(cè)和評(píng)價(jià)。 yr_svm = predict(svm_models, xTest); ........................................................................ %MLP % 以下是關(guān)于多層感知器(MLP)模型的設(shè)置。 % MLP的超參數(shù) mlp_models.divideFcn = 'dividerand'; %將數(shù)據(jù)隨機(jī)劃分 mlp_models.divideMode = 'sample'; %對(duì)每個(gè)樣本進(jìn)行劃分 mlp_models.divideParam.trainRatio = 0.85;% 訓(xùn)練集占85% mlp_models.divideParam.valRatio = 0.15;% 驗(yàn)證集占15% % 創(chuàng)建一個(gè)有35個(gè)隱藏層節(jié)點(diǎn)的模式識(shí)別神經(jīng)網(wǎng)絡(luò),訓(xùn)練函數(shù)為'trainrp'(反向傳播) mlp_models = patternnet(35, 'trainrp'); mlp_models.trainParam.lr = 0.004;% 設(shè)置學(xué)習(xí)率為0.004 mlp_models.trainParam.mc = 0.35;% 設(shè)置動(dòng)量系數(shù)為0.35 % 設(shè)置第一層的傳遞函數(shù)為'transig'(Sigmoid函數(shù)) mlp_models.trainParam.epochs=300;% 設(shè)置訓(xùn)練次數(shù)為300次 tic% 開(kāi)始計(jì)時(shí),計(jì)算模型訓(xùn)練時(shí)間。 % 使用訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練,結(jié)果存儲(chǔ)在net中,同時(shí)返回訓(xùn)練記錄tr,預(yù)測(cè)輸出y和誤差e。 .......................................................................... figure plot(xSVM,ySVM,'r') hold on plot(xMLP,yMLP,'b') legend('SVM','MLP') xlabel('FP'); ylabel('TP'); title('ROC曲線') grid on figure bar([aucSVM,aucMLP]); xlabel('模型類型'); ylabel('R auc'); xticklabels({'SVM','MLP'}); ylim([0.75,1]); |
|
來(lái)自: 簡(jiǎn)簡(jiǎn)單單做算法 > 《待分類》