Matlab建立SVM,KNN和樸素貝葉斯模型分類繪製ROC曲線|附代碼數據

2023-03-16     tecdat拓端

原標題:Matlab建立SVM,KNN和樸素貝葉斯模型分類繪製ROC曲線|附代碼數據

原文連結:http://tecdat.cn/?p=15508

最近我們被客戶要求撰寫關於SVM,KNN和樸素貝葉斯模型的研究報告,包括一些圖形和統計輸出。

繪製ROC曲線通過Logistic回歸進行分類

加載樣本數據。

load fisheriris

通過使用與versicolor和virginica物種相對應的度量來定義二元分類問題。

pred = meas(51:end,1:2);

定義二進位響應變量。

resp = (1:100)'>50; % Versicolor = 0, virginica = 1

擬合邏輯回歸模型。

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

計算ROC曲線。使用邏輯回歸模型中的機率估計值作為得分。

perfcurve 將閾值存儲在數組中。

顯示曲線下的面積。

AUC

AUC = 0.7918

曲線下的面積為0.7918。最大AUC為1,對應於理想分類器。較大的AUC值表示更好的分類器性能。

繪製ROC曲線

plot(X,Y)

xlabel('False positive rate')

ylabel('True positive rate')

title('ROC for Classification by Logistic Regression')

使用ROC曲線比較分類方法

加載樣本數據

load ionosphere

X 是351x34預測變量的矩陣。 Y 是類別標籤的字符數組: 'b' 不良雷達回波和 'g' 良好雷達回波。

重新格式化因變量以適合邏輯回歸。

擬合一個邏輯回歸模型來估計雷達返回的後驗機率是一個不好的機率。

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

score_log = mdl.Fitted.Probability; % Probability estimates

使用得分的機率計算標準ROC曲線。

在相同的樣本數據上訓練SVM分類器標準化數據。

mdlSVM = fitcsvm(pred,resp,'Standardize',true);

計算後驗機率。

第二列 score_svm 包含不良雷達收益的後驗機率。

使用SVM模型的分數計算標準ROC曲線。

在同一樣本數據上擬合樸素貝葉斯分類器。

計算後驗機率(分數)

[~,score_nb] = resubPredict(mdlNB);

使用樸素貝葉斯分類的分數計算標準ROC曲線。

將ROC曲線繪製在同一張圖上。

點擊標題查閱往期內容

數據分享|R語言邏輯回歸、線性判別分析LDA、GAM、MARS、KNN、QDA、決策樹、隨機森林、SVM分類葡萄酒交叉驗證ROC

左右滑動查看更多

01

02

03

04

儘管對於較高的閾值,SVM可以產生更好的ROC值,但邏輯回歸通常更擅長區分不良雷達收益與良好雷達。樸素貝葉斯的ROC曲線通常低於其他兩個ROC曲線,這表明樣本內性能比其他兩個分類器方法差。

比較所有三個分類器的曲線下面積。

AUClog

AUClog = 0.9659

AUCsvm

AUCsvm = 0.9489

AUCnb

AUCnb = 0.9393

Logistic回歸的AUC度量最高,而樸素的貝葉斯則最低。該結果表明,邏輯回歸對此樣本數據具有更好的樣本內平均性能。

確定自定義內核功能的參數值

本示例說明如何使用ROC曲線為分類器中的自定義內核函數確定更好的參數值。

在單位圓內生成隨機的一組點。

定義預測變量。將第一象限和第三象限中的點標記為屬於正類別,而將第二象限和第二象限中的點標記為負類。

pred = [X1; X2];

resp = ones(4*n,1);

resp(2*n + 1:end) = -1; % Labels

創建函數mysigmoid.m ,該函數 接受要素空間中的兩個矩陣作為輸入,並使用S形內核將其轉換為Gram矩陣。

使用Sigmoid內核函數訓練SVM分類器。使用標準化數據。

設置 gamma = 0.5 ,使用調整後的S形核訓練SVM分類器。

SVMModel2 = fitPosterior(SVMModel2);

[~,scores2] = resubPredict(SVMModel2);

計算兩個模型的ROC曲線和曲線下面積(AUC)。

繪製ROC曲線。

plot(x1,y1)

hold on

plot(x2,y2)

hold off

title('ROC for classification by SVM');

將gamma參數設置為0.5的內核函數可提供更好的樣本內結果。

比較AUC度量。

auc1

auc2

auc1 =

0.9518

auc2 =

0.9985

伽瑪設置為0.5時曲線下的面積大於伽瑪設置為1時曲線下的面積。這也證實了伽瑪參數值為0.5會產生更好的結果。為了直觀比較這兩個伽瑪參數值的分類性能。

繪製分類樹的ROC曲線

加載樣本數據。

load fisheriris

列向量 species由三種不同物種的鳶尾花組成。雙矩陣 meas 包含對花朵的四種測量類型:萼片長度,萼片寬度,花瓣長度和花瓣寬度。所有度量單位均為厘米。

使用萼片的長度和寬度作為預測變量訓練分類樹。

根據樹預測物種的分類標籤和分數 。

[~,score] = resubPredict(Model);

分數是觀察值(數據矩陣中的一行)所屬類別的後驗機率。列 score 對應於所指定的類 'ClassNames'。

由於這是一個多類問題,因此不能僅將其 score(:,2) 作為輸入。這樣做將無法提供 perfcurve 有關兩個陰性類別(setosa和virginica)分數的足夠信息。此問題與二元分類問題不同,在二元分類問題中,知道一個類別的分數就足以確定另一個類別的分數。因此,必須提供 perfcurve 將兩個否定類的得分納入考慮範圍的函數。一種函數是score(:,2)-max(score(:,1),score(:,3))。

X,默認為假陽性率, Y,默認為真陽性率(召回率或敏感性)。正類標籤為 versicolor。由於未定義否定類別,因此 perfcurve 假設不屬於肯定類別的觀測值屬於一個類別。該函數將其接受為否定類。

suby = 12×2

0 0

0.1800 0.1800

0.4800 0.4800

0.5800 0.5800

0.6200 0.6200

0.8000 0.8000

0.8800 0.8800

0.9200 0.9200

0.9600 0.9600

0.9800 0.9800

subnames = 1x2 cell

{'setosa'} {'virginica'}

在ROC曲線上繪製ROC曲線和最佳工作點。

找到與最佳工作點相對應的閾值。

T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))

ans = 0.2857

指定 virginica 為否定類,並計算和繪製ROC曲線 versicolor。

同樣,必須提供 perfcurve 將否定類分數納入考量的函數。要使用的函數的一個示例是score(:,2)-score(:,3)。

計算ROC曲線的逐點置信區間

加載樣本數據。

load fisheriris

僅將前兩個變量用作預測變量,來定義二元問題。

pred = meas(51:end,1:2);

定義二進位因變量。

resp = (1:100)'>50; % Versicolor = 0, virginica = 1

擬合邏輯回歸模型。

通過垂直平均(VA)和使用bootstrap進行採樣,計算真實正率(TPR)上的逐點置信區間。

'NBoot',1000 將引導樣本的數量設置為1000。 'XVals','All' 提示 perfcurve 返回 X, Y和 T 所有分數的Y 值,並X 使用垂直平均將所有值的值(真陽性率) 平均 (假陽性率)。 默認情況下將使用閾值平均來計算置信範圍。

繪製逐點置信區間。

errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1));

不一定總是可以控制誤報率(FPR,X 此示例中的 值)。因此,可能希望通過閾值平均來計算真實正利率(TPR)的逐點置信區間。

繪製置信區間。

figure()

errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));

指定閾值計算ROC曲線。然後繪製曲線。

figure()

errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));

點擊文末 「閱讀原文」

獲取全文完整代碼數據資料。

本文選自《Matlab建立SVM,KNN和樸素貝葉斯模型分類繪製ROC曲線》。

點擊標題查閱往期內容

R語言貝葉斯廣義線性混合(多層次/水平/嵌套)模型GLMM、邏輯回歸分析教育留級影響因素數據

邏輯回歸Logistic模型原理R語言分類預測冠心病風險實例

數據分享|用加性多元線性回歸、隨機森林、彈性網絡模型預測鮑魚年齡和可視化

R語言高維數據懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網絡elastic net分析基因數據(含練習題)

Python中LARS和Lasso回歸之最小角算法Lars分析波士頓住房數據實例

R語言Bootstrap的嶺回歸和自適應LASSO回歸可視化

R語言Lasso回歸模型變量選擇和糖尿病發展預測模型R語言實現貝葉斯分位數回歸、lasso和自適應lasso貝葉斯分位數回歸分析

基於R語言實現LASSO回歸分析

R語言用LASSO,adaptive LASSO預測通貨膨脹時間序列

R語言自適應LASSO 多項式回歸、二元邏輯回歸和嶺回歸應用分析

R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例

Python中的Lasso回歸之最小角算法LARS

r語言中對LASSO回歸,Ridge嶺回歸和彈性網絡Elastic Net模型實現

r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現

R語言實現LASSO回歸——自己編寫LASSO回歸算法

R使用LASSO回歸預測股票收益

python使用LASSO回歸預測股票收益

文章來源: https://twgreatdaily.com/zh-hk/0363c95971c848cfc71c82abc4da9765.html