對於模型的考量有不少參數,最重要的是準確率,精度,召回率等,還有常常聽到的F1值, 若是是那種提取詞的算法,好比提取出日期,這種怎麼算正確率呢?算法
精確率 = 提取正確的結果數量/ 提取出來的全部數量學習
召回率 = 提取正確的結果數量/ 數據集中正確結果的全部數量優化
F1值 = 2準確率召回率/(準確率+召回率)code
F1值:兼顧了準確率和召回率;ci
爲了加深印象,本身搞幾個練習作下:io
練習一:方法
總共有100個樣本,50個是Yes,50個是No;call
機器使用算法計算完後獲得的結果以下:總結
55個是Yes(其中45個與實際相符,10個與實際不符); 數據
45個是No(其中40個與實際相符,5個與實際不符);
試計算這個算法的各個指標:
解:
| Yes | No | Yes | TP = 45 | FN = 5 | P = 50 No | FP = 10 | TN = 40 | N = 50 | P' = 55 | N' = 45 | P+N = 100
正確率:(TP+TN )/(P+N) = 85 /100 = 0.85
精 度(precision): TP/(TP+FP) = 45/55= 0.818
召回率(recall):TP/P = 45/50 = 0.9
綜合分類率:
F1 = 2 * (precision) * recall/(precision+recall) = 2 * 0.818 * 0.9/(0.818+0.9) = 0.857
練習二:
總共有100個樣本,50個是Yes,50個是No;
機器算法優化計算完後獲得的結果以下:
55個是Yes(其中50個與實際相符,5個與實際不符);
45個是No(其中45個與實際相符,0個與實際不符);
(這是一種常見的狀況,目的是儘量多地包含正確的結果)
試計算這個算法的各個指標:
解:
| Yes | No | Yes | TP = 50 | FN = 0 | P = 50 No | FP = 5 | TN = 45 | N = 50 | P' = 55 | N' = 45 | P+N = 100
正確率:(TP+TN )/(P+N) = 95 /100 = 0.95
精 度(precision): TP/(TP+FP) = 50/55= 0.909
召回率(recall):TP/P = 50/50 = 1
綜合分類率:
F1 = 2 * (precision) * recall/(precision+recall) = 2 * 0.909 * 1/(0.909+1) = 0.952
總結:
精度達到0.91,召回率達到1,此時F值纔可能達到0.95
召回率=1也就是首先要確保全部正確的結果都被找到;
精度0.91也就是找出的結果能夠包含9%的錯誤結果;
練習三:
總共有100個樣本,50個是Yes,50個是No;
機器算法優化計算完後獲得的結果以下:
45個是Yes(其中45個與實際相符,0個與實際不符);
55個是No(其中50個與實際相符,5個與實際不符);
(這也是一種常見的狀況,就是哪怕找到結果少但確保找到的結果全是正確的;)
試計算這個算法的各個指標:
解:
| Yes | No | Yes | TP = 45 | FN = 5 | P = 50 No | FP = 0 | TN = 50 | N = 50 | P' = 45 | N' = 55 | P+N = 100
正確率:(TP+TN )/(P+N) = 95 /100 = 0.95
精 度(precision): TP/(TP+FP) = 45/45 = 1
召回率(recall):TP/P = 45/50 = 0.9
綜合分類率:
F1 = 2 * (precision) * recall/(precision+recall) = 2 * 1 * 0.9/(1+0.9) = 0.947
總結:
若是精度達到1,百分百正確的狀況下,召回率能達到0.9,F1值一樣也能接近0.95;
召回率達到0.91時F1=0.952,此時也能超過0.95
學習總結:
精度和召回率從兩個維度描述了算法的準確程度, 經過F1值能夠更清晰地瞭解如何達到最終的目標,
也就是有兩種思路:
一、寧肯少找一些,但要保證找出的結果都是正確的;
二、寧肯多找一些,可是要把正確的都包含進去;
在一些場合下思路2有的時候會更容易一些;