機器學習評估方法(基本)

2021-09-01 06:08:47 字數 2147 閱讀 5402

其定義是: 對於給定的測試資料集,分類器正確分類的樣本數與總樣本數之比。也就是損失函式是0-1損失時測試資料集上的準確率。

由準確率,我們可以在一些場合,從某種意義上得到乙個分類器是否有效,但它並不總是能有效的評價乙個分類器的工作。

比如 搜尋引擎 抓取了 csdn 100個頁面,而它索引中共有10,000,000個頁面,隨機抽乙個頁面,如果以 accuracy 來判斷我的工作,而 accuracy 已經到了99.999%(9,999,900/10,000,000),所以我會把所有的頁面都判斷為"不是 csdn 的頁面"。

那怎麼解決呢?這就需要用到precision,recall 和 f1-score 了。

precision精確率的公式:p=tpt

p+fp

\frac

tp+fpt

p​它計算的是所有"正確被檢索的結果(tp)"佔所有"實際被檢索到的(tp+fp)"的比例。

recall召回率的公式:r=tpt

p+fn

\frac

tp+fnt

p​它計算的是所有"正確被檢索的結果(tp)"佔所有"應該檢索到的結果(tp+fn)"的比例。

f1-score就是精確率和召回率的調和均值,也就是

2 f1

\frac

f12​

=1

p\frac

p1​+1

r\frac

r1​亦即

f1=2pr

p+

r\frac

p+r2pr

​=2tp2

tp+f

p+fn

\frac

2tp+fp

+fn2

tp​在f1-score中,我們認為精確率和召回率的權重相等。

fβ=(β^2+1)*prβ

2+p+

r\frac

β2+p+r

pr​是一般化公式

通過調整β可以改變精確率和召回率的權重。

def divide_information(predictions, y):

tp = 0 # 正確判定正類

fp = 0 # 錯誤判斷正類,實際為負類

tn = 0 # 正確判定負類

fn = 0 # 錯誤判定負類,實際為正類

for i in range(len(predictions)):

if predictions[i] == 1:

if y[i] == 1:

tp += 1

else:

fp += 1

else:

if y[i] == 1:

fn += 1

else:

tn += 1

return tp, fp, tn, fn

def getaccuracy(predictions, y):

return (predictions == y).sum()/len(y)

def getprecision(predictions, y):

# tp/(tp+fp)

tp, fp, tn, fn = divide_information(predictions, y)

precision = tp/(tp + fp)

return precision

def getrecall(predictions, y):

# tp/(tp+fn)

tp, fp, tn, fn = divide_information(predictions, y)

recall = tp / (tp + fn)

return recall

def getf1score(predictions, y):

# 2p*r/(p+r)

# 2tp/(2tp+fp+fn)

precision = getprecision(predictions, y)

recall = getrecall(predictions, y)

f1score = 2 * precision * recall / (precision + recall)

return f1score

機器學習評估方法

訓練 測試集的劃分要盡可能保持資料分布的一致性,避免因資料劃分過程引入額外的偏差而對最終結果產生影響,例如 在分類任務中,至少要保持樣本的類別比例類似。如果從取樣的角度來看待資料集的劃分過程,則保留類別比例的取樣方式稱為 分層取樣 單詞使用留出法得到的估計結果往往不夠穩定可靠,在使用留出法,一般要採...

機器學習模型評估方法

分類模型評價度量 概率輸出型 這個有邏輯回歸 隨機森林 梯度提公升 adaboost等演算法,都是以概率作為輸出的。要想把概率型輸出變為分型別輸出,只要為其設立乙個閾值即可。positive predictive value 陽性 值 or precision 精度 陽性 值被 正確的比例。nega...

機器學習方法 機器學習模型評估方法

通常我們採用實驗測試的方法對模型的泛化誤差做出評估。為此我們就需要乙個測試集用來測試訓練好的模型。通常情況下,在我們拿到資料之後,在正式開始訓練模型前,就會將資料劃分為訓練集合測試集。需要注意的是 訓練集與測試集應盡可能互斥,也就是盡量不要重複。測試集要符合真實樣本的分布,也就是說在劃分時要隨機抽樣...