機器學習與建模中 - 怎麼判斷模型的好壞?

數據建模的目的就是獲得從自變量映射到因變量的函數,在建模的探索過程中,不同的方式總會得出不同的函數模型,而這些函數大多是由一些參數構成的,比如 y = f( x; w0, w1, w2, w3, ...)。

 

平方損失函數

爲了選擇在某種方式下最好的參數值( w0, w1, w2, w3, ...的值),這個衡量方法一般是比較原始數據與模型的預測數據之間的平方差,平方差定義爲:

(y(原始)-y(預測))**2 = (y(原始)- f( x; w0, w1, w2, w3, ...))**2

這個數值越小,說明模型的預測值越接近原始值,也就代表模型越好。上述表達式也稱爲平方損失函數,這裏,我們用 L()表示。

 

絕對損失函數

平方損失是非常常見的選擇,其他的損失函數比較適合迴歸,比如另一個常見的是絕對損失函數

| y(原始)-y(預測)| = | y(原始)- f( x; w0, w1, w2, w3, ...)|

 

準確率

用準確率判斷模型好壞比較適合分類問題,即因變量是固定的幾個值,比如自變量是0或1的二分類問題。準確率就是看模型分類的結果與原始數據中的分類結果相同的佔比。

準確率 = S(模型與原始數據的分類結果一致) / S(該分類下的所有數據量)

下面是python代碼示例:

y32 = lr.predict(x3)#用檢驗集x3的數據通過模型進行預測,結果儲存在變量y32中。
print(u'模型的平均準確率(檢驗集)爲:%s'% lr.score(x3, y3))
print(u'模型的平均準確率(檢驗集,y=0)爲:%s'% (sum(y32[i] == 0 for i,v in enumerate(y3) if v == 0) / sum(1 for i,v in enumerate(y3) if v == 0)))
print(u'模型的平均準確率(檢驗集,y=1)爲:%s'% (sum(y32[i] == 1 for i,v in enumerate(y3) if v == 1) / sum(1 for i,v in enumerate(y3) if v == 1)))

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章