怎么來的?
????我們平時用的精度accuracy,也就是整體的正確率
????????acc = predict_right_num / predict_num
這個雖然常用,但不能滿足所有任務的需求。比如,因為香蕉太多了,也不能撥開人工的一個一個的看它的好壞(我愛吃啊,想想就心疼),此時我們就需要有一種方法,代替撥開香蕉這種粗魯的手段。這時我們需要通過一些測試,看看哪種方法能更加準確的預測。我們可以通過
????“準”:預測的準確度,就是我預測的結果中真正好的香蕉要越多越好;
????“全”:就是所有的好的香蕉預測出來的越多越好,雖然把有些壞的也預測是好的了,那也不管,“全”就行。
其實這兩者都想要達到就好了,但是不行的:
????比如"準",我就預測一個算了,好的香蕉肯定比壞的比例高,也就是我只預測一個,100%比例幾率最大了,這時就不“全”了,海域好多好的不能都當成壞的扔了吧。。
? ? 再比如"全",我去全部預測成好的這真正好的都在我的預測里,也就是100%。可是這時的"準"就賊不準了。。
? ? 所以就必須來平衡這倆同志的關系了,怎么平衡呢?肯定是通過權重來的呀,此時,F值登上歷史舞臺!
啥意思捏?
? ? 實例化講解吧。比如我們的香蕉中 1 表示好的,0表示壞的,有10個香蕉:
? ? ? ?gold : ? ? [ 1,1,1,1,1,0,0,0,0,0 ]
? ? ? ?pred: ? [ 1,0,1,1,1,1,1,0,0,0 ]
? ? 注釋:gold是現實的好壞;pred是預測的好壞。
????P(Precision) 查準率:就是上面說的"準"。字面意思好理解呀,就是在預測當中查找準確個數的比例。公式為:
? ? ? ? P = 真正預測準確的數量 / 預測是準確的數量 = 4 / 6
? ? R(Recall) 查全率:就是上面的"全"。根據字面理解,在預測中看看真正預測對的占全有對的比率。公式為:
? ? ? R =?真正預測準確的數量 / 所有真正好的數量 = 4 / 5
? ? F值是:
? ? ? ? F(k) = ( 1 + k ) * P * R / ( ( k*k ) * P + R )
????????注釋:k>0 度量了 查全率 對 查準率 的相對重要性。k>1查全率有更大影響;k<1查準率有更大影響。
????????在這個實例中可以表示為:k>1就是查全率有更大影響,就是好的香蕉最好都預測出來,因為你覺得不想把好的當成壞的扔點( 真可惜,我愛吃啊 ) ;k<1查準率有更大影響,就是一定要準確,省時間,省力更重要,不在乎好的香蕉當壞的扔點。
? ? 而我們常用的是F1,就是F(1)的意思,k=1,比如我們做一個分類任務,這幾個類覺得都一樣重要。此時:
????????F(1) = 2 * P * R / ( P + R )
代碼實現:
? ? 背景:用evalList的長度是我需要求的P,R,F1的個數,比如我的實驗是立場檢測,分類為FAVOR(支持),AGAINST(反對),NONE(中立)。而NONE一般不考慮,只要求得FAVOR,AGAINST各自的P,R,F1,然后F1求個平均即可。比如這個論文的數據:

? ? 這時我的evalList里有兩個數據分別表示FAVOR,AGAINST各自的P,R,F1值。
????這個P,R,F1的代碼為:


就這樣吧。應該講的很詳細了!
作者:zenRRan
鏈接:https://www.jianshu.com/p/6536d584d5fd
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。