【實踐】數據挖掘DM課程課業打卡實驗3 分類器性能度量


叮嘟!這裏是小啊嗚的學習課程資料整理。好記性不如爛筆頭,今天也是努力進步的一天。一起加油進階吧!
在這裏插入圖片描述

一、實驗目的

(1)理解分類器性能度量的方法。
(2)編程ROC曲線繪製。

二、實驗內容

1、編程實現ROC曲線繪製的函數roc_plot。

其中,分類概率使用matlab自帶的樸素貝葉斯函數得到。

測試代碼如下:


load('testingData.mat')
load('trainingData.mat')
nb = NaiveBayes.fit(trAttr, trLabels);
p=posterior (nb,tstAttr);
y1=p(:,2);
[auc1 ,FPR1 ,TPR1 ]  = roc_plot(y1,tstLabels);

(將執行正確的roc_plot函數代碼粘貼在此處,核心代碼要求有註釋)

% load('testingData.mat')
% load('trainingData.mat')
% nb = NaiveBayes.fit(trAttr, trLabels);
% p=posterior (nb,tstAttr);
% y1=p(:,2);
% [auc1 ,FPR1 ,TPR1 ]  = roc_plot(y1,tstLabels);
 
function [AUC,FPR,TPR]  = roc_plot(deci,label_y)
[val,ind]=sort(deci);
roc_y=label_y(ind);
Num=length(roc_y);
FPR=zeros(Num,1);
TPR=zeros(Num,1);
for i=1:Num
    TP=sum(roc_y(i:end)==1);
    FP=sum(roc_y(i:end)==0);
    P=sum(roc_y(:)==1);
    N=sum(roc_y(:)==0);
    TPR(i)=TP/P;
    FPR(i)=FP/N;
end
TPR=[TPR;0];
FPR=[FPR;0];
AUC=0;
 
for i=2:Num+1
    AUC=AUC+TPR(i)*(FPR(i-1)-FPR(i));
end
figure,plot(FPR,TPR);
 
xlabel('False Positive Rate');
ylabel('True Positive Rate');
title(['ROC curve (AUC = ' num2str(AUC) ')']);
end

在這裏插入圖片描述

2、(難度2)編程實現ROC曲線繪製的函數roc_plot。

其中,分類概率使用自己編寫的樸素貝葉斯函數bys_post1得到。

測試代碼如下:

load('testingData.mat')
load('trainingData.mat')
[post4all]=bys_post1(trAttr, trLabels,tstAttr);
y2=post4all(:,1);
[auc2 ,FPR2 ,TPR2 ]  = roc_plot(y2,tstLabels);

(將執行正確的bys_post1函數代碼粘貼在此處,核心代碼要求有註釋)

function [Params,prior,AllLabels] = NaiveBayesTrain1(trAttr, trLabels)
%NaiveBayesTrain只處理連續分類,不處理分類屬性;

AllLabels = unique(trLabels);
numClass = length(AllLabels);    %取得所有類標號的種類個數;

for i =1:numClass
    ind=find(trLabels==AllLabels(i));
    Ind4Class{i,1}=ind;
    prior(i)=length(ind)/length(trLabels);
end

numAttr=size(trAttr,2);
Params{numClass,numAttr}=[];%初始化參數cell;

for AttrInd =1:numAttr
    AttrVals=trAttr(:,AttrInd);
    for i=1:numClass
        Params{i,AttrInd}=GetParams4ContiAttr(AttrVals,Ind4Class{i,1});
    end
end
end

function Params1=GetParams4ContiAttr(AttrVals,ind)
AttrVals4ThisClass=AttrVals(ind);
Params1(1)=mean(AttrVals4ThisClass);   %求得均值;
Params1(2)=var(AttrVals4ThisClass);    %求得方差;
end

function post=NaiveBayesPredict1(Params,prior,tstAttr)%%分類
numClass=length(prior);    %取得類標號種類個數
numAttr=length(tstAttr);
post=[];
for i=1;numClass
    p_AttrCond=1;
    for AttrInd=1;numAttr
        AttrVals=tstAttr(AttrInd);
            mean=Params{i,AttrInd}(1);
            varriance=Params{i,AttrInd}(2);
            sig=sqrt(varriance);
            
            p=(1/(sqrt(2*pi)*sig))*exp(-(AttrVals-mean)^2/(2*sig^2));
            p_AttrCond=p_AttrCond*p;
    end
    post(i)=p_AttrCond*prior(i);
end
end
 

在這裏插入圖片描述

Ending!
更多課程知識學習記錄隨後再來吧!

就醬,嘎啦!

在這裏插入圖片描述

注:
人生在勤,不索何獲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章