SVM的二分類問題(fitcsvm)

2021-10-10 07:38:06 字數 4036 閱讀 6699

非線性二分類

matlab2018及之後的版本取消了svmtrain和svmclassify函式,取而代之的更多的fitcsvm和predict函式。但是也使得決策邊界無法直接生成,需要根據fitcsvm中得到的引數畫出決策邊界。

問題1:編寫程式,用svm方法解決線性二分類問題

資料集:testset-linear.txt。

要求:給出**、資料集分布示意圖、支撐向量座標及圖示、決策邊界圖示

資料集為100*3,前兩列為資料的座標,第三列為資料標籤(1、-1)。儲存在文字檔案中。

close all

clear

clc%

% 資料部分

data=

load

('testset-linear.txt');

sd=data(:

,1:2

);y=data(:

,3);

y=nominal

(y);

%標籤%

% 原始資料影象

subplot(1

,2,1

)gscatter(sd

(:,1

),sd(

:,2)

,y,'rg'

,'+*');

%%svmsvmmodel=

fitcsvm

(sd,y,

'kernelfunction'

,'linear');

[lable,score]

=predict

(svmmodel,sd);%

% 畫圖

subplot(1

,2,2

)h =

nan(3,

1);h

(1:2

)=gscatter(sd

(:,1

),sd(

:,2)

,y,'rg'

,'+*');

hold onh(

3)=plot(sd

(svmmodel.issupportvector,1)

,sd(svmmodel.issupportvector,2)

,'ko');

%畫出支援向量

%畫出決策邊界

w=-svmmodel.

beta(1

,1)/svmmodel.

beta(2

,1);

%斜率b=

-svmmodel.bias/svmmodel.

beta(2

,1);

%截距x_ =0:

圖1 實驗原始資料分布圖       圖2 svm二分類結果

問題2:編寫程式,用svm方法解決非線性二分類問題

資料集:test_nonlinear_svm.csv

要求:給出**、資料集分布示意圖、決策邊界圖示。

資料集說明:資料集大小為600*3,前兩列為資料的座標,第三列為資料標籤(1、-1)。儲存在csv檔案中

close all

clear

clc%

% 資料部分

data=

csvread

('test_nonlinear_svm.csv');

sd=data(:

,1:2

);y=data(:

,3);

y=nominal

(y);

%% 原始資料影象

subplot(1

,2,1

)gscatter(sd

(:,1

),sd(

:,2)

,y,'rg'

,'+*');

%% svm

svmmodel=

fitcsvm

(sd,y,

'boxconstraint',10

,'kernelfunction'

,'rbf'

,'kernelscale',2

^0.5*2

);%使用高斯核函式

%%svmmodel=

fitcsvm

(sd,y,

'kernelfunction'

,'rbf'

,'optimizehyperparameters',,

'hyperparameteroptimizationoptions'

,struct

('showplots'

,false));

%使用超引數優化

%% 畫圖

subplot(1

,2,2

)h =

nan(3,

1);h

(1:2

)=gscatter(sd

(:,1

),sd(

:,2)

,y,'rg'

,'+*');

hold onh(

3)=plot(sd

(svmmodel.issupportvector,1)

,sd(svmmodel.issupportvector,2)

,'ko');

%畫出支援向量

%畫出決策邊界

h =0.2

;[x1,x2]

=meshgrid

(min(sd

(:,1

)):h:max(sd

(:,1

)),min(sd

(:,2

)):h:max(sd

(:,2

)));

%得到所有取點的矩陣

[lable,score]

=predict

(svmmodel,[x1

(:),

x2(:)

]);scoregrid =

reshape

(score(:

,2),

size

(x1,1)

,size

(x2,2)

);contour

(x1,x2,scoregrid,[0

0]);

%繪製等高線

hold on

legend

('-1'

,'+1'

,'support vectors'

,'分界線');

axis equal

hold off

實驗採用兩種方法進行svm訓練。一種是未使用超引數優化的高斯核函式,另一種使用超引數優化。

圖3  實驗原始資料分布圖     圖4 svm高斯核函式二分類結果

圖5  實驗原始資料分布圖     圖6 svm超引數優化二分類結果

svm超引數優化僅顯示了其中一種結果,得到支援向量支援向量個數為20時的資料點。優化得到boxconstraint(框約束)最優值為171.22,kernelscale值為24.418。

圖7 超引數優化結果

非線性二分類在繪製決策邊界時採用了繪製等高線的思想,通過設定引數,使得繪製出score值為0的點的的等高線,也就是分界線。

二分類問題

模型 帶有relu啟用的dense層堆疊 對於二分類問題,網路的最後一層應該是只有乙個單元並使用sigmoid啟用的dense層,網路的輸出應該是0 1的標量,表示概率值 對於二分類問題的sigmoid標量輸出,應該使用binary crossentroy 二元交叉熵 損失函式 實驗 1 嘗試增加或...

二分類問題

深度學習中的基本問題就是這個,上午我還達到90 85 的acc,現在只有76 臥槽,我動 了啊?有鬼。明明沒怎麼改引數,卻再也回不到過去,這個trick不小啊。既然回不到過去,不妨重新開始吧。我套了一下vgg,發現網路太深了,根本跑不動,效果也不好,減少網路後,acc反而有提高,之前我還以為驗證集有...

二分類 多分類

怎麼樣把兩類的分類的模型推廣到多類上?答 a.一對多法 one versus rest,簡稱ovr svms 訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個svm。分類時將未知樣本分類為具有最大分類函式值的那類。b.一對一法 one versus on...