iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0

我們的挑戰終於進行一半啦~前面經過漫長的資料前處理、特徵工程、挑選模型進行訓練後,我們把一個機器學習的模型建立出來了,接著我們要進行測試,也就是把測試檔丟入模型裡進行預測,那怎麼樣的結果會符合我們的期待呢?我們又要以什麼方法去評估這個結果呢?將會在今天來做介紹,那就廢話不多說,累狗 ~


一、回歸問題評估方式-MSE、MAE

一般我們在回歸問題上預測出來的結果會是數值,而預測值與實際值的差,就是"誤差",回歸問題用以評估的方法有以下幾點:

MSE(均方誤差)

所有誤差的平方和取平均,越小代表越準確。
因為對誤差取平方,較容易看出離群的預測值,此評估方式較在乎誤差的大小。

MAE(絕對平均誤差)

所有誤差取絕對值後取平均,越小代表越準確。
求的是誤差離實際值的真實距離,較難看出離群值。

程式碼也非常簡單,利用Sklearn套件就可以輕鬆實現。

#MSE
from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7] #真實值
y_pred = [2.5, 0.0, 2, 8] #預測值
mean_squared_error(y_true, y_pred)
#MAE
from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2, 7] #真實值
y_pred = [2.5, 0.0, 2, 8] #預測值
mean_absolute_error(y_true, y_pred)

二、分類問題評估方式-混淆矩陣(Confution Matrix)

最常被用來評估分類問題的指標就是混淆矩陣,他簡單易懂,可解釋力高,我們以好壞分類作為示範,混淆矩陣示意圖如下:
(備註:矩陣會隨預測的標籤數增加,若標籤為n個,矩陣大小就為n*n)
https://ithelp.ithome.com.tw/upload/images/20210908/20140427rSdg2Y3uHc.png

混淆矩陣TP、FP、FN、TN意義

▲True Positive(TP):實際狀態為OK且預測狀態也為OK。

▲False Positive(FP):實際狀態為Fault但預測狀態為OK。

▲False Negative(FN):實際狀態為OK但預測狀態為Fault。

▲True Negative(TN):實際狀態為Fault且預測狀態為Fault。

由上可知,TP與TN是最好的,因為都屬於預測正確,而FP與FN都屬於預測錯誤,但有些許的不同。以下我們用產品的品質管理來舉例:
False Positive(FP)又稱偽陽性,明明產品是壞掉的,我們卻沒有檢驗出來,反而說它是好的,這在統計學的假設檢定中又稱為型一錯誤,品管中我們稱之為消費者風險(因為消費者會拿到壞的產品)。

False Negative(FN)又稱偽陰性,產品是正常的,我們卻說他是壞的,統計學的假設檢定中稱為型二錯誤,品管中稱為生產者風險(因為把好的產品挑出來浪費掉了)。

在品管或生管我們會比較看重型一錯誤,畢竟你產品自己浪費了沒關係,但如果送到消費者的手中就會影響產品的品質問題,這就是寧可錯殺,不願放過的概念,我們也可以用混淆矩陣來修正這幾個指標。

延伸指標

Accuracy:最單純的準確率,預測正確的比例。

計算方式:(TP+TN) / (TP+FP+TN+FN)

Precision:所有負樣本中,成功預測出負樣本的比例。

計算方式:TP / (TP+FP)

Recall:所有正樣本當中,成功預測出正樣本的比例。

計算方式:TP / (TP+FN)

F1-score:Recall以及Precision的調和公式

計算方式:2 * recall * precision / (recall+precision)

程式碼範例

我們一樣使用Sklearn的套件來實作

混淆矩陣

from sklearn.metrics import confusion_matrix
y_true = [0, 0, 1, 1, 0, 1] #真實值
y_pred = [0, 1, 0, 0, 0, 1] #預測值
confusion_matrix(y_true, y_pred)

其他指標

from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
y_true = [0, 0, 1, 1, 0, 1] #真實值
y_pred = [0, 1, 0, 0, 0, 1] #預測值

# Accuracy
accuracy=accuracy_score(y_true,y_pred)

# Precision
precision=precision_score(y_true,y_pred)

# recall_score
recall=recall_score(y_true,y_pred)

# f1_score
f1_score=f1_score(y_true,y_pred)

三、結論

今天介紹了一些評估模型的指標,到了這個步驟也代表整個資料分析的流程都Run過一遍了,明天開始會完整的呈現一個在Aidea上的專案,從頭帶大家複習一遍利用機器學習來做資料分析的過程,如果前幾個步驟的說明不夠詳細或是沒有實作的感覺,也歡迎試著一起來挑戰明天的專案喔~希望對大家有所幫助,再會啦!


上一篇
DAY14 挑選合適的模型進行訓練
下一篇
DAY16 機器學習專案實作-員工離職預測(上)
系列文
學資料科學的小孩不會變壞- 從入門到實戰全攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言