日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROC 曲线讲解 (Receiver Operarating Curve)

發(fā)布時(shí)間:2024/3/26 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROC 曲线讲解 (Receiver Operarating Curve) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概念

在信號檢測理論中,接收者操作特征曲線receiver operating characteristic curve,或者叫ROC曲線)是一種坐標(biāo)圖式的分析工具,在同一模型中設(shè)置最佳閾值。by Wikipedia

ROC曲線的畫法如下圖所示,每個(gè)點(diǎn)表示不同閾值下 TP(橫坐標(biāo)) FP(縱坐標(biāo))的值,

TP,FP的定義如下

  實(shí)際值
 ture 真的false 假的
預(yù)測值ture 真的TP (true positive)FP (false positive)
false 假的FN (false negative)TN (true negative)

TP rate = TP/(TP+FN),分母就是實(shí)際上是真的那一類,這個(gè)算出來的是預(yù)測的真的占真正的真的改率。我們想要預(yù)測的準(zhǔn)確,這個(gè)應(yīng)該越大越好。

FP rate = FP/(FP+TN),分母就是實(shí)際上假的那一類,這個(gè)算出來的是被錯(cuò)分成真的(其實(shí)是假的)占所有的錯(cuò)的概率,我們希望錯(cuò)分的越小越好,所以這個(gè)值越小越好。


例子

AUC計(jì)算過程:

下面用兩個(gè)正態(tài)分布的例子說明問題,

下圖中左邊藍(lán)色是一類,右邊綠色是一類。

(目的)ROC的作用是找到兩個(gè)類,讓紅色的這條線能夠?qū)深愖詈玫胤珠_。AUC值越大的分類器,正確率越高

(過程)從左到→右移動移動這條紅色的虛線,計(jì)算ROC中的每個(gè)點(diǎn),一個(gè)虛線就是一個(gè)閾值,對應(yīng)的就是ROC上面的一個(gè)點(diǎn),將ROC連成曲線。在這個(gè)圖中已經(jīng)標(biāo)明了TP,FP,TN,FN,可以很方便的計(jì)算出來。

-------------------------------------------------------------------------------------------------------------------------------

我們知道TP rate越大越好,FP rate越小越好。那么畫了ROC之后,怎么判斷哪兩個(gè)類能分的最開呢?怎么找到哪個(gè)閾值最好呢?

下面這張圖畫出了解決辦法。就是算出AUC(Area Under Curve,曲線下的面積),也就是ROC與坐標(biāo)軸形成的面積。

AUC圖反映的是兩個(gè)類的重疊程度,AUC的面積反應(yīng)了分類的好壞。

我們可以看到不同的兩個(gè)分類的AUC截然不同,

第一個(gè)例子:可以分開大多數(shù)點(diǎn),它的AUC在0.9左右

第四個(gè)例子:兩個(gè)類完全重合時(shí),一半的點(diǎn)都會分類錯(cuò)誤,相當(dāng)于沒分,它的AUC是0.5左右。

因此AUC面積越大的分類器的分類效果最好,這樣的分類器在找到閾值后可以有較高的分類正確率。

鏈接: ROC Curves - YouTube

代碼 ROCcurve及AUC

import matplotlib.pyplot as plt import numpy as npdef gauss2D(x, m, C):Ci = np.linalg.inv(C) #求矩陣的逆dC = np.linalg.det(C) #求矩陣的行列式num = np.exp(-0.5 * np.dot((x-m).T, np.dot(Ci,(x-m))))den = 2 * np.pi * (dC**0.5) #計(jì)算矩陣的密度函數(shù)return num/dendef twoDGaussianPlot(nx, ny, m, C):x = np.linspace(-6, 6, nx)y = np.linspace(-6, 6, ny)X, Y = np.meshgrid(x, y, indexing='ij')Z = np.zeros([nx,ny])for i in range(nx):for j in range(ny):xvec = np.array([X[i,j], Y[i,j]])Z[i,j] = gauss2D(xvec, m, C)return X, Y, ZX = np.random.randn(200, 2) C1 = np.array([[2,1],[1,2]]) C2 = np.array([[2,1],[1,2]]) m1 = np.array([0, 3]) m2 = np.array([3,2.5]) A = np.linalg.cholesky(C1)Y1 = X @ A.T + m1 Y2 = X @ A.T + m2plt.figure(1) plt.scatter(Y1[:,0], Y1[:,1], c='c', s=4) plt.scatter(Y2[:,0], Y2[:,1], c='m', s=4)Xp, Yp, Zp = twoDGaussianPlot(40,50,m1,C1) plt.contour(Xp, Yp, Zp, 5)Xp2, Yp2, Zp2 = twoDGaussianPlot(40,50,m2,C2) plt.contour(Xp2, Yp2, Zp2, 5)# uF = [(np.mean(Y1[:,0])+np.mean(Y2[:,0]))/2,(np.mean(Y1[:,1])+np.mean(Y2[:,1]))/2] # uF = np.array([-1,5]) uF = np.array(m1-m2) print(uF) # print(uF.shape) #plt.arrow(0, 0, *(uF), color='b', linewidth=2.0, head_width=0.30, head_length=0.35) plt.arrow(0, 0, uF[0], uF[1], color='b', linewidth=2.0, head_width=0.30, head_length=0.35)plt.axis('equal') plt.grid() plt.xlim([-6,6]) plt.ylim([-5,8])plt.savefig('density graph.png')yp1 = Y1 @ uF yp2 = Y2 @ uFplt.figure(2) plt.rcParams.update({'font.size':16}) plt.hist(yp1, bins=40) plt.hist(yp2, bins=40) plt.savefig('histogramprojections.png')pmin = np.min( np.array( (np.min(yp1), np.min(yp2) ))) pmax = np.max( np.array( (np.max(yp1), np.max(yp2) ))) print(pmin, pmax)nRocPoints = 50 thRange = np.linspace(pmin, pmax, nRocPoints) ROC = np.zeros((nRocPoints, 2))for i in range(len(thRange)):thresh = thRange[i]TP = len(yp2[yp2 > thresh]) * 100/len(yp2)FP = len(yp1[yp1 > thresh]) * 100/len(yp1)ROC[i,:] =[TP, FP]fig, ax = plt.subplots(figsize=(6,6)) ax.plot(ROC[:,0],ROC[:,1], c='m') ax.set_xlabel('False Positive') ax.set_ylabel('True Positive') ax.set_title("Receive Operating Charateristics") ax.grid(True) plt.savefig('rocCure.png')print(np.trapz(ROC[:,1],x=ROC[:,0]))

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

總結(jié)

以上是生活随笔為你收集整理的ROC 曲线讲解 (Receiver Operarating Curve)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。