文章轉自微信公眾號:機器學習與人工智慧AI
文章原始連結:https://mp.weixin.qq.com/s/y8pup4TZrIMAmmDTe0z38g大家好,今天就來聊聊機器學習模型評估指標~
這方面在前期,很多人不太注意,其實是非常重要的一塊內容。
機器學習模型評估指標的重要性體現在它們提供了客觀、可量化的方式來衡量模型性能,幫助選擇最適合的模型和調整參數;
它們是優化模型、改進演算法和指導業務決策的關鍵依據;合適的評估指標能夠有效地反映模型在不同方面的表現,從而指導進一步改進和優化。
咱們今天介紹11種模型評量指標,案例都比較相似,大家可以學習起來~
準確率(Accuracy) 精確率(Precision) 召回率(Recall) F1 分數(F1-Score) ROC 曲線和AUC 混淆矩陣(Confusion Matrix) 均方誤差(Mean Squared Error,MSE) 平均絕對誤差(Mean Absolute Error,MAE) 對數損失(Log Loss) R 平方(R-squared) 交叉驗證分數(Cross-Validation Score)
準確率
準確率(Accuracy)是機器學習和資料分類任務中常用的評估指標之一,用於衡量模型在整個資料集上的預測準確程度。它是指模型正確分類的樣本數與總樣本數之比。
準確率是一個簡單直觀的指標,通常用於評估模型的整體性能。它可以透過以下公式計算:
其中:
是真正例(True Positives),即模型將正類別樣本正確地預測為正類別的數量。 是真負例(True Negatives),即模型將負類別樣本正確預測為負類別的數量。 是假正例(False Positives),即模型將負類別樣本錯誤地預測為正類別的數量。 是假負例(False Negatives),即模型將正類別樣本錯誤地預測為負類別的數量。
基本原理
準確率是將預測正確的樣本數與總樣本數之比,它衡量的是模型在整個資料集上的表現。然而,當資料集不平衡(即某一類樣本數量明顯多於其他類別)時,準確率可能不是一個很好的評估指標,因為即使模型預測所有樣本都屬於多數類別,也能獲得相對較高的準確率。
核心點
準確率是用來衡量分類模型整體表現的指標。 它將正確分類的樣本數與總樣本數之比。 在處理不平衡資料時,準確率可能不是一個很好的指標。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
# 绘制评估指标
plt.imshow(conf_matrix, cmap='binary', interpolation='None')
plt.colorbar()
plt.xticks([0, 1])
plt.yticks([0, 1])
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
使用邏輯迴歸模型進行訓練,並計算了模型的準確率。
然後,它繪製了混淆矩陣,可視化了模型的預測結果。
精確率
精確率(Precision)是機器學習和資料分類任務中常用的評估指標之一,用於衡量模型在預測為正類別的樣本中,真正為正類別的樣本所佔的比例。精確率用於解決以下問題:在所有預測為正類別的樣本中,有多少是真正的正類別。
精確率是指在所有被分類為正類別的樣本中,正確分類為正類別的樣本所佔的比例。它可以透過以下公式計算:
其中:
是真正例(True Positives),即模型將正類別樣本正確地預測為正類別的數量。 是假正例(False Positives),即模型將負類別樣本錯誤地預測為正類別的數量。
基本原理
精確率的核心思想是衡量模型在所有預測為正類別的樣本中,真正為正類別的樣本所佔的比例。這個指標對於那些需要準確識別正例的任務尤其重要,例如醫學診斷中的疾病檢測。高精確率表示模型在辨識正例方面有很好的表現。
核心點
精確率用於衡量模型在所有預測為正類別的樣本中,真正為正類別的樣本所佔的比例。 對於需要準確辨識正例的任務尤其重要。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, confusion_matrix
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred = model.predict(X_test)
# 计算精确率
precision = precision_score(y_test, y_pred)
print("Precision:", precision)
# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
# 绘制评估指标
plt.imshow(conf_matrix, cmap='binary', interpolation='None')
plt.colorbar()
plt.xticks([0, 1])
plt.yticks([0, 1])
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
同樣使用邏輯迴歸模型進行訓練,並計算了模型的精確率。然後,它繪製了混淆矩陣,可視化了模型的預測結果。
召回率
召回率(Recall),也稱為靈敏度(Sensitivity)或真正例率(True Positive Rate),是機器學習和資料分類任務中常用的評估指標之一,用於衡量模型在所有真正為正類別的樣本中,成功預測為正類別的比例。召回率用於解決以下問題:在所有實際為正類別的樣本中,有多少被成功預測為正類別。
召回率是指在所有實際為正類別的樣本中,成功預測為正類別的比例。它可以透過以下公式計算:
其中:
是真正例(True Positives),即模型將正類別樣本正確地預測為正類別的數量。 是假負例(False Negatives),即模型將正類別樣本錯誤地預測為負類別的數量。
基本原理
召回率的核心思想是衡量模型在識別正例方面的表現。它強調了模型對於實際為正類別的樣本的識別能力,對於那些需要盡量避免漏診的任務,例如疾病檢測,召回率是一個非常重要的評估指標。
核心點
召回率用於衡量模型在所有實際為正類別的樣本中,成功預測為正類別的比例。 對於需要盡量避免漏診的任務,如疾病檢測,召回率是一個非常重要的評估指標。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score, confusion_matrix
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred = model.predict(X_test)
# 计算召回率
recall = recall_score(y_test, y_pred)
print("Recall:", recall)
# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
# 绘制评估指标
plt.imshow(conf_matrix, cmap='binary', interpolation='None')
plt.colorbar()
plt.xticks([0, 1])
plt.yticks([0, 1])
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
使用邏輯迴歸模型進行訓練,並計算了模型的回想率。
F1 分數
F1分數(F1-Score)是機器學習和資料分類任務中常用的綜合評估指標,它同時考慮了模型的精確率(Precision)和召回率(Recall)。 F1分數是精確率和召回率的調和平均值,用於衡量模型在正類別的識別和預測方面的綜合表現。
F1分數是精確率和召回率的調和平均值,用於綜合評估模型在正類別識別和預測方面的表現。可以透過以下公式計算:
基本原理
F1分數綜合考慮了模型的精確率和召回率,因此可以在一定程度上彌補精確率和召回率單獨使用時的不足。 F1分數越高,表示模型在辨識和預測正類別的綜合表現越好。
核心點
F1分數是精確率和召回率的調和平均值。 它綜合考慮了模型在識別和預測正類別方面的表現。 F1分數越高,表示模型的綜合表現越好。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score, confusion_matrix
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred = model.predict(X_test)
# 计算F1分数
f1 = f1_score(y_test, y_pred)
print("F1 Score:", f1)
# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
# 绘制评估指标
plt.imshow(conf_matrix, cmap='binary', interpolation='None')
plt.colorbar()
plt.xticks([0, 1])
plt.yticks([0, 1])
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
同樣使用邏輯迴歸模型進行訓練,並計算了模型的F1分數。然後,它繪製了混淆矩陣,可視化了模型的預測結果。
ROC 曲線和AUC
ROC曲線(Receiver Operating Characteristic Curve)和AUC(Area Under Curve)是用於評估二分類模型性能的重要工具,它們基於真正例率(True Positive Rate,召回率)和假正例率(False Positive Rate)來描述模型在不同閾值下的表現表現。
ROC曲線是一種繪製真正例率(TPR)隨著假正例率(FPR)變化的圖形。在ROC曲線上,橫軸表示FPR,縱軸表示TPR。 AUC是ROC曲線下的面積,用於量化分類器的效能。 AUC的值範圍在0到1之間,一般來說,AUC越大表示分類器效能越好。
基本原理
ROC曲線是基於真正例率和假正例率,它展示了在不同分類閾值下,模型在識別正例和負例方面的表現。 ROC曲線上的點越靠近左上角,表示模型效能越好。 AUC是ROC曲線下的面積,它等於ROC曲線與橫軸之間的面積,可以用來比較不同模型的效能,AUC越大表示模型效能越好。
核心點
ROC曲線描述了模型在不同分類閾值下的表現。 AUC是ROC曲線下的面積,用於量化模型效能。 ROC曲線上的點越靠近左上角,表示模型效能越好。
是真正例(True Positives),模型將正類別樣本正確地預測為正類別的數量。 是假負例(False Negatives),模型將正類別樣本錯誤地預測為負類別的數量。 是假正例(False Positives),模型將負類別樣本錯誤預測為正類別的數量。 是真負例(True Negatives),模型將負類別樣本正確預測為負類別的數量。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred_proba = model.predict_proba(X_test)[:, 1]
# 计算ROC曲线和AUC
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)
print("AUC:", roc_auc)
# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic Curve')
plt.legend(loc="lower right")
plt.show()
使用邏輯迴歸模型進行訓練,並計算了模型的ROC曲線和AUC。然後,它繪製了ROC曲線,並顯示了AUC的值。
混淆矩陣
混淆矩陣(Confusion Matrix)是用來評估分類模型效能的一種表格,它以矩陣的形式展示了模型在測試集上的預測結果與實際標籤之間的關係。混淆矩陣將真實標籤分為正類別和負類別,並將模型的預測結果也分為正類別和負類別,從而可以對模型的分類準確性進行更詳細的分析。
混淆矩陣是一個二維數組,其行表示真實標籤,列表示模型預測結果。對於二分類問題,混淆矩陣通常是2x2的矩陣,包括四個元素:真正例(True Positives,TP)、假正例(False Positives,FP)、真負例(True Negatives,TN)、假負例(False Negatives,FN)。每個元素的意義如下:
TP:模型將正類別樣本正確預測為正類別的數量。 FP:模型將負類別樣本錯誤地預測為正類別的數量。 TN:模型將負類別樣本正確預測為負類別的數量。 FN:模型將正類別樣本錯誤預測為負類別的數量。
基本原理
混淆矩陣用於描述模型在不同類別上的預測結果,幫助評估模型的分類準確性和錯誤情況。透過混淆矩陣,可以計算出模型的精確率、回想率、F1分數等評估指標,從而更全面地評估模型的表現。
核心點
混淆矩陣以矩陣的形式展示了模型的預測結果與實際標籤之間的關係。 透過混淆矩陣,可以計算出模型的精確率、回想率、F1分數等評估指標。 混淆矩陣是評估分類模型效能的重要工具之一。
程式碼範例
以下是一個使用Python實現的範例程式碼,該程式碼示範如何計算混淆矩陣並繪製評估指標曲線:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred = model.predict(X_test)
# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
# 绘制混淆矩阵
plt.imshow(conf_matrix, cmap='binary', interpolation='None')
plt.colorbar()
plt.xticks([0, 1])
plt.yticks([0, 1])
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
均方誤差
均方誤差(Mean Squared Error,MSE)是迴歸任務中常用的評估指標,用於衡量模型預測值與真實值之間的平均偏差的平方。 MSE越小表示模型對資料的適合程度越好。
均方誤差是透過計算預測值與真實值之間的差異來評估模型的表現。對於迴歸任務,MSE是平方損失函數的平均值。它可以透過以下公式計算:
其中:
是樣本數。 是第 個樣本的真實值。 是第 個樣本的預測值。
基本原理
均方誤差衡量了模型的預測值與真實值之間的平均偏差的平方。當模型的預測值與真實值之間的偏差較大時,MSE會增加;而當偏差較小時,MSE會減少。因此,MSE越小表示模型對資料的適合程度越好。
核心點
均方誤差用於衡量模型預測值與真實值之間的平均偏差的平方。 MSE越小表示模型對資料的適合程度越好。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 生成模拟数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
# 划分训练集和测试集
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 = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
# 绘制评估指标
plt.scatter(X_test, y_test, color='black', label='Actual')
plt.plot(X_test, y_pred, color='blue', linewidth=3, label='Predicted')
plt.title('Actual vs Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
使用線性迴歸模型進行訓練,並計算了模型的均方誤差。然後,它繪製了預測值與真實值的散佈圖,以顯示模型的預測效果。
平均絕對誤差
平均絕對誤差(Mean Absolute Error,MAE)是迴歸任務中常用的評估指標,用於衡量模型預測值與真實值之間的平均絕對偏差。 MAE越小表示模型對資料的適合程度越好。
平均絕對誤差是透過計算預測值與真實值之間的絕對差異來評估模型的表現。對於迴歸任務,MAE是絕對損失函數的平均值。它可以透過以下公式計算:
其中:
是樣本數。 是第 個樣本的真實值。 是第 個樣本的預測值。
基本原理
平均絕對誤差衡量了模型的預測值與真實值之間的平均絕對偏差。當模型的預測值與真實值之間的偏差較大時,MAE會增加;而當偏差較小時,MAE會減少。因此,MAE越小表示模型對資料的適合程度越好。
核心點
平均絕對誤差用於衡量模型預測值與真實值之間的平均絕對偏差。 MAE越小表示模型對資料的適合程度越好。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# 生成模拟数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
# 划分训练集和测试集
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)
# 计算平均绝对误差
mae = mean_absolute_error(y_test, y_pred)
print("Mean Absolute Error:", mae)
# 绘制评估指标
plt.scatter(X_test, y_test, color='black', label='Actual')
plt.plot(X_test, y_pred, color='blue', linewidth=3, label='Predicted')
plt.title('Actual vs Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
使用線性迴歸模型進行訓練,並計算了模型的平均絕對誤差。
對數損失
對數損失(Log Loss)是一種用於評估分類模型(特別是機率型模型)表現的常用指標。它衡量了模型預測的機率分佈與真實標籤之間的差異。對數損失越小表示模型效能越好。
對數損失是一種在多類別分類任務中經常使用的損失函數。對於二分類問題,它也稱為二元交叉熵損失(Binary Cross-Entropy Loss)。
對數損失可以透過以下公式計算:
其中:
是樣本數。 是第 個樣本的真實標籤(0或1)。 是第 個樣本的預測機率。
基本原理
對數損失衡量了模型的預測機率分佈與真實標籤之間的差異。當模型的預測機率分佈與真實標籤完全一致時,對數損失為0;當二者差異較大時,對數損失增加。因此,對數損失越小表示模型效能越好。
核心點
對數損失是用於評估分類模型效能的一種損失函數。 對數損失越小表示模型效能越好。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上做预测
y_pred_proba = model.predict_proba(X_test)
# 计算对数损失
logloss = log_loss(y_test, y_pred_proba)
print("Log Loss:", logloss)
# 绘制评估指标
thresholds = np.linspace(0.01, 0.99, 100)
logloss_values = []
for threshold in thresholds:
y_pred_threshold = (y_pred_proba[:, 1] > threshold).astype(int)
logloss_values.append(log_loss(y_test, y_pred_threshold))
plt.plot(thresholds, logloss_values)
plt.xlabel('Threshold')
plt.ylabel('Log Loss')
plt.title('Log Loss vs Threshold')
plt.show()
使用邏輯迴歸模型進行訓練,並計算了模型的對數損失。繪製了對數損失隨著閾值變化的曲線,以展示模型性能的變化。
R 平方
R平方(R-squared),也稱為決定係數(Coefficient of Determination),是迴歸模型常用的評估指標之一,用於衡量模型對資料的適合程度。 R平方越接近1表示模型對資料的適合程度越好,越接近0表示模型對資料的適合度較差。
R平方是透過計算實際值和預測值之間的差異來衡量模型對資料的擬合程度的。
R平方的計算公式如下:
其中:
是樣本數。 是第 個樣本的真實值。 是第 個樣本的預測值。 是所有樣本真實值的平均值。
基本原理
R平方衡量了模型對資料的適合程度,其值範圍在0到1之間。當模型對資料的適合程度越好時,R平方越接近1;當模型對資料的適合程度較差時,R平方越接近0。當模型的擬合程度與隨機平均值相當時,R平方可能為負。
核心點
R平方用於衡量迴歸模型對資料的適合程度。 R平方越接近1表示模型對資料的適合程度越好。
程式碼範例
下面是一個使用Python實現的範例程式碼,該程式碼示範如何計算R平方並繪製評估指標曲線:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
# 生成模拟数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
# 划分训练集和测试集
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)
# 计算R平方
r2 = r2_score(y_test, y_pred)
print("R-squared:", r2)
# 绘制评估指标
plt.scatter(X_test, y_test, color='black', label='Actual')
plt.plot(X_test, y_pred, color='blue', linewidth=3, label='Predicted')
plt.title('Actual vs Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
交叉驗證分數
交叉驗證分數(Cross-Validation Score)是用於評估機器學習模型泛化能力的一種方法,它透過將資料集劃分為多個子集進行多次訓練和測試,並計算模型在每次測試集上的性能指標的平均值。交叉驗證可以減少因為單次劃分帶來的隨機性,並更全面地評估模型的性能。
交叉驗證是將資料集劃分為k個子集,其中一個子集被保留作為測試集,其餘k-1個子集用於訓練模型。交叉驗證分數是在每個測試集上計算的模型效能指標的平均值,通常使用準確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1分數(F1-Score)等指標。透過對多個子集進行交叉驗證,可以更全面地評估模型的性能,減少因為單次劃分帶來的隨機性。
基本原理
交叉驗證分數的原理是透過多次訓練和測試模型,利用每次測試集上的表現指標來評估模型的泛化能力。透過多次重複這個過程並計算平均值,可以得到更可靠的效能評估結果。
核心點
交叉驗證分數用於評估模型的泛化能力。 透過多次重複訓練和測試過程,並計算表現指標的平均值,可以更全面地評估模型的表現。
程式碼範例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 初始化逻辑回归模型
model = LogisticRegression()
# 计算交叉验证分数
cv_scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
# 打印交叉验证分数
print("Cross-Validation Scores:", cv_scores)
print("Mean Cross-Validation Score:", np.mean(cv_scores))
# 绘制评估指标
plt.plot(range(1, 6), cv_scores, marker='o')
plt.xlabel('Fold')
plt.ylabel('Accuracy')
plt.title('Cross-Validation Scores')
plt.show()
這段程式碼使用鳶尾花資料集,採用5折交叉驗證的方法對邏輯迴歸模型進行評估,並繪製了交叉驗證分數的曲線圖,展示了模型的效能評估結果。
沒有留言:
張貼留言