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