終于把機(jī)器學(xué)習(xí)中的評估指標(biāo)搞懂了
今天給大家分享在機(jī)器學(xué)習(xí)中最廣泛使用的十大評估指標(biāo)。評估指標(biāo)是用于衡量機(jī)器學(xué)習(xí)模型的性能,幫助我們判斷模型在解決特定任務(wù)上的效果。
不同的評估指標(biāo)適用于不同類型的任務(wù)(分類、回歸),選擇合適的指標(biāo)能夠有效反映模型的優(yōu)劣。
回歸指標(biāo)
1.MSE
MSE(均方誤差) 是最常用的回歸評估指標(biāo),它衡量了模型預(yù)測值與實際值之間的平方差的平均值。
計算公式為:
優(yōu)缺點:
- 優(yōu)點:對大誤差有更大的懲罰,適合對誤差敏感的場景。
- 缺點:對離群值非常敏感,可能導(dǎo)致模型對極端值過度擬合。
2.RMSE
均方根誤差 (RMSE) 是 MSE 的平方根。它將誤差量級與原始數(shù)據(jù)保持一致,便于解釋。RMSE 越小,模型的預(yù)測性能越好。
計算公式為:
其中 是實際值, 是預(yù)測值。RMSE 的單位與原數(shù)據(jù)相同,因此容易理解。
3.R 平方
值表示模型解釋數(shù)據(jù)方差的比例,范圍是 0 到 1,越接近 1 表示模型對數(shù)據(jù)的擬合程度越好。
計算公式為:
其中 是實際值的平均值。
4.調(diào)整后的 R 平方
調(diào)整后的 值考慮了模型中使用的特征數(shù),能夠更好地評估復(fù)雜模型的表現(xiàn)。
它通過對特征數(shù)量進(jìn)行懲罰,避免過擬合。
計算公式為:
其中 n 是樣本數(shù)量,k 是特征數(shù)。
調(diào)整后的 會隨著無意義變量的增加而下降。
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
X = np.random.rand(100, 1)
y = 3 * X.squeeze() + np.random.randn(100) * 0.5
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 計算 MSE
mse = mean_squared_error(y_test, y_pred)
print(f"MSE: {mse}")
# 計算 RMSE
rmse = np.sqrt(mse)
print(f"RMSE: {rmse}")
# 計算 R2 值
r2 = r2_score(y_test, y_pred)
print(f"R2: {r2}")
# 計算調(diào)整后的 R2 值
n = len(y_test)
p = X_test.shape[1]
adjusted_r2 = 1 - (1 - r2) * (n - 1) / (n - p - 1)
print(f"Adjusted R2: {adjusted_r2}")
分類指標(biāo)
1.混淆矩陣
混淆矩陣是用于分類問題的指標(biāo),展示了模型分類結(jié)果的詳細(xì)情況。
它通常以 2x2 矩陣形式表示,包含以下部分:
- TP (True Positives),正類被正確預(yù)測為正類的數(shù)量。
- TN (True Negatives),負(fù)類被正確預(yù)測為負(fù)類的數(shù)量。
- FP (False Positives),負(fù)類被錯誤預(yù)測為正類的數(shù)量(誤報)。
- FN (False Negatives),正類被錯誤預(yù)測為負(fù)類的數(shù)量(漏報)。
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
iris = datasets.load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target,
random_state = 1)
clf = LogisticRegression(solver = 'liblinear')
# fit the training data
clf.fit(x_train, y_train)
# Do prediction on training data
y_train_pred = clf.predict(x_train)
# Do prediction on testing data
y_test_pred = clf.predict(x_test)
# find the confusion matrix for train data
confusion_matrix(y_train, y_train_pred)
# find the confusion matrix for test data
confusion_matrix(y_test, y_test_pred)
# get the full classification report for training data
print(classification_report(y_train, y_train_pred))
# get the full classification report for testing data
print(classification_report(y_test, y_test_pred))
2.準(zhǔn)確性
準(zhǔn)確性衡量模型預(yù)測正確的樣本占總樣本的比例。
適用于樣本均衡的分類問題。
計算公式為:
然而,在數(shù)據(jù)不平衡時,準(zhǔn)確性可能不是一個好的評估指標(biāo)。
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
print("Score :", accuracy_score(y_true, y_pred))
3.精確度
精確度也稱為查準(zhǔn)率,用于衡量模型預(yù)測的正類中有多少是真正的正類。
計算公式為:
精確度在我們關(guān)心誤報(false positive)時尤為重要。
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
from sklearn.metrics import precision_score
precision_score(y_true, y_pred)
4.召回率
召回率也稱為查全率或靈敏度,用于衡量實際正類中有多少被正確預(yù)測為正類。
計算公式為:
召回率在關(guān)心漏報(false negative)時非常重要。
5.F1 分?jǐn)?shù)
F1 分?jǐn)?shù)是精確度和召回率的調(diào)和平均數(shù),綜合考慮了模型的查準(zhǔn)率和查全率。
計算公式為:
F1 分?jǐn)?shù)適合處理不平衡數(shù)據(jù)集的分類任務(wù)。
6.ROC 曲線和 AUC
ROC 曲線是一種常用于評估分類模型性能的圖形工具,特別適合不平衡數(shù)據(jù)集。
它展示了不同閾值下分類模型的性能表現(xiàn)。
ROC 曲線的兩個關(guān)鍵要素是:
- 真正率 (True Positive Rate, TPR)
在所有正類樣本中,被模型正確分類為正類的比例。
計算公式為:
其中 TP 是真正例數(shù),F(xiàn)N 是假負(fù)例數(shù)。
- 假正率 (False Positive Rate, FPR)
在所有負(fù)類樣本中,被模型錯誤分類為正類的比例。
計算公式為:
其中 FP 是假正例數(shù),TN 是真負(fù)例數(shù)。
ROC 曲線的橫軸是假正率 (FPR),縱軸是真正率 (TPR)。隨著分類閾值的調(diào)整,F(xiàn)PR 和 TPR 都會變化。通過繪制不同閾值下的 FPR 和 TPR 的點,并將這些點連成曲線,就得到了 ROC 曲線。
AUC 是 ROC 曲線下的面積,取值范圍在 0 到 1 之間。它用一個數(shù)值量化了模型的整體表現(xiàn)。
AUC 表示了模型在不同閾值下的平均性能,是模型區(qū)分正負(fù)樣本能力的衡量指標(biāo)。
AUC 值解釋
- AUC = 1,模型完美地分類了所有正負(fù)樣本,表現(xiàn)極佳。
- AUC = 0.5,模型的分類能力與隨機(jī)猜測相當(dāng),沒有預(yù)測能力。
- AUC < 0.5,模型的表現(xiàn)比隨機(jī)猜測還要差,意味著模型可能將類別完全反向分類。