用matlab画出M1和M2的ROC曲线,ROC曲线及其matlab实现ROC曲线的绘画
ROC曲線(Receiver Operating Characteristic Curve)是利用Classification模型真正率(True Positive Rate)和假正率(False Positive Rate)作為坐標(biāo)軸,圖形化表示分類方法的準(zhǔn)確率的高低。
ROC圖的一些概念定義::真正(True Positive , TP)被模型預(yù)測為正的正樣本假負(fù)(False Negative , FN)被模型預(yù)測為負(fù)的正樣本假正(False Positive , FP)被模型預(yù)測為正的負(fù)樣本真負(fù)(True Negative , TN)被模型預(yù)測為負(fù)的負(fù)樣本
真正率(TPR)TPR = TP /(TP + FN)正樣本預(yù)測結(jié)果數(shù)/正樣本實際數(shù)。在ROC曲線中,TPR作為Y軸
假正率(FPR)FPR = FP /(FP + TN)被預(yù)測為正的負(fù)樣本結(jié)果數(shù)/負(fù)樣本實際數(shù)。在ROC曲線中,FPR作為X軸
關(guān)于ROC曲線的相關(guān)概念的解釋,請參閱cowboy_wz的博客ROC曲線:http://blog.csdn.net/chl033/article/details/4507544
我在此主要做的事情是畫出ROC曲線工程實現(xiàn)方面的一些解釋。我們設(shè)計一個函數(shù),此函數(shù)需要有一個模型預(yù)測值predict和數(shù)據(jù)標(biāo)簽值ground_truth作為輸入?yún)?shù)。分為幾步進(jìn)行實現(xiàn)。
(1)統(tǒng)計數(shù)據(jù)標(biāo)簽值ground_truth(及y)中分類為0和分類為1的數(shù)據(jù)數(shù)目:
pos_num=sum(ground_truth==1);neg_num=sum(ground_truth);
(2)對利用模型求出的預(yù)測值predict由低到高進(jìn)行排序;對應(yīng)數(shù)據(jù)原來所在位置進(jìn)行索引記錄,用于重新排序ground_truth.利用函數(shù)sort實現(xiàn),sort詳情請查看help文檔:
[pre,Index]=sort(predict); ground_truth=ground_truth(Index);
(3)對ground_truth和predict遍歷i=1:n,n是測試集數(shù)目。其目的是隨著predict中概率的增加,隨著增加判斷正負(fù)樣本的閾值;也就是說取遍歷到的predict值為閾值,大于閾值的假設(shè)預(yù)測為正樣本(閾值右邊),小于閾值的假設(shè)預(yù)測為負(fù)樣本(閾值左邊)。
所以同時我們可得到真正TP 和假正FP值:TP=sum(ground_truth(i:n)==1);FP=sum(ground_truth(i:n)==0);
這時我們就可以求取TPR 和FPR了:TPR=TP/pos_num; ?FPR=FP/neg_num; ? 把求取到的值保存起來(x(i),y(i)),因為這就是我們要在圖上畫的點。
(4)返回曲線與坐標(biāo)軸間的面積auc。我們的目的是測量數(shù)據(jù)的準(zhǔn)確率,這個面積就是一個量度,auc越大,準(zhǔn)確率越高。
auc=auc+(y(i)+y(i-1))*(x(i-1)-x(i))/2;
實現(xiàn)ROC曲線的代碼如下:
% ?predict ? ? ? - 分類器對測試集的分類結(jié)果
% ?ground_truth - 測試集的正確標(biāo)簽,這里只考慮二分類,即0和1
% ?auc ? ? ? ? ? ?- 返回ROC曲線的曲線下的面積
function auc = plot_roc( predict, ground_truth )
%初始點為(1.0, 1.0)
%計算出ground_truth中正樣本的數(shù)目pos_num和負(fù)樣本的數(shù)目neg_num
pos_num = sum(ground_truth==1);
neg_num = sum(ground_truth==0);
m=size(ground_truth,1);
[pre,Index]=sort(predict);
ground_truth=ground_truth(Index);
x=zeros(m+1,1);
y=zeros(m+1,1);
auc=0;
x(1)=1;y(1)=1;
for i=2:m
TP=sum(ground_truth(i:m)==1);FP=sum(ground_truth(i:m)==0);
x(i)=FP/neg_num;
y(i)=TP/pos_num;
auc=auc+(y(i)+y(i-1))*(x(i-1)-x(i))/2;
end;
x(m+1)=0;y(m+1)=0;
auc=auc+y(m)*x(m)/2;
plot(x,y);
end
具體實現(xiàn)結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的用matlab画出M1和M2的ROC曲线,ROC曲线及其matlab实现ROC曲线的绘画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django templates 和 u
- 下一篇: matlab叠加定理怎么输入,自动控制原