自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

終于把機(jī)器學(xué)習(xí)中的交叉驗(yàn)證搞懂了!!

人工智能 機(jī)器學(xué)習(xí)
交叉驗(yàn)證(Cross-Validation)是機(jī)器學(xué)習(xí)中一種廣泛使用的模型評(píng)估方法,用于評(píng)估預(yù)測(cè)模型在未見數(shù)據(jù)上的表現(xiàn)。

今天給大家分享機(jī)器學(xué)習(xí)中的一個(gè)關(guān)鍵概念,交叉驗(yàn)證。

交叉驗(yàn)證(Cross-Validation)是機(jī)器學(xué)習(xí)中一種廣泛使用的模型評(píng)估方法,用于評(píng)估預(yù)測(cè)模型在未見數(shù)據(jù)上的表現(xiàn)。

它通過將數(shù)據(jù)集劃分為多個(gè)子集,重復(fù)訓(xùn)練和驗(yàn)證模型,以減少評(píng)估結(jié)果的方差并提供更穩(wěn)定、可靠的性能估計(jì)。交叉驗(yàn)證能夠更可靠地估計(jì)模型的泛化能力,減少由于數(shù)據(jù)分割方式不同帶來的評(píng)估偏差。

基本原理

1.數(shù)據(jù)劃分

將原始數(shù)據(jù)集劃分為多個(gè)部分,通常稱為“折”(folds)。

2.循環(huán)驗(yàn)證

每次迭代中,將一個(gè)折作為驗(yàn)證集(測(cè)試集),其余折作為訓(xùn)練集。模型在訓(xùn)練集上訓(xùn)練后,在驗(yàn)證集上評(píng)估性能。

3.綜合結(jié)果

對(duì)所有迭代的評(píng)估結(jié)果(例如準(zhǔn)確率、精度、召回率等)取平均值,作為模型的整體性能。

通過這種方式,可以減少因單一訓(xùn)練/測(cè)試分割可能帶來的隨機(jī)性和偏差,提供對(duì)模型性能更穩(wěn)健的估計(jì)。

交叉驗(yàn)證的應(yīng)用

模型選擇

通過交叉驗(yàn)證評(píng)估不同模型的性能,從而選擇最優(yōu)的模型。

例如,在分類問題中,可以通過K折交叉驗(yàn)證比較邏輯回歸、支持向量機(jī)和隨機(jī)森林等模型的準(zhǔn)確率,選擇表現(xiàn)最佳的模型。

超參數(shù)調(diào)優(yōu)

許多機(jī)器學(xué)習(xí)模型具有超參數(shù),需要通過調(diào)優(yōu)來優(yōu)化模型性能。

交叉驗(yàn)證可以用于評(píng)估不同超參數(shù)組合下的模型表現(xiàn),從而選擇最佳的超參數(shù)。

例如,支持向量機(jī)中的核函數(shù)參數(shù)和正則化參數(shù),可以通過交叉驗(yàn)證找到最佳組合。

特征選擇

在高維數(shù)據(jù)中,選擇相關(guān)特征對(duì)于提高模型性能至關(guān)重要。

交叉驗(yàn)證可以用于評(píng)估不同特征子集下的模型表現(xiàn),幫助選擇最具預(yù)測(cè)能力的特征組合。

常見的交叉驗(yàn)證技術(shù)

1.k 折交叉驗(yàn)證

k 折交叉驗(yàn)證是最常用的交叉驗(yàn)證方法之一,通過將數(shù)據(jù)集分成 k 個(gè)相等或近似相等的子集(folds,折),并進(jìn)行 k 次訓(xùn)練和驗(yàn)證,以評(píng)估模型的性能。

步驟:

  1. 將數(shù)據(jù)隨機(jī)劃分為 K 個(gè)非重疊子集。
  2. 在第 i 次迭代中
  • 使用第 i 個(gè)子集作為驗(yàn)證集。
  • 使用其他 K-1 個(gè)子集作為訓(xùn)練集。
  1. 計(jì)算每次迭代的性能指標(biāo)。
  2. 取所有迭代的性能指標(biāo)的平均值作為最終評(píng)估結(jié)果。

適用場(chǎng)景

適用于大多數(shù)機(jī)器學(xué)習(xí)任務(wù),尤其是數(shù)據(jù)量中等且對(duì)計(jì)算效率要求不苛刻的場(chǎng)景。

優(yōu)缺點(diǎn):

優(yōu)點(diǎn)

  • 實(shí)現(xiàn)簡(jiǎn)單,廣泛支持于各類機(jī)器學(xué)習(xí)框架。
  • 每個(gè)樣本都被用作訓(xùn)練集和驗(yàn)證集,充分利用了數(shù)據(jù)。

缺點(diǎn)

  • 計(jì)算成本較高,尤其當(dāng) K 較大時(shí)。
from sklearn.model_selection import KFold
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import numpy as np

# 創(chuàng)建示例數(shù)據(jù)
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 初始化模型
model = RandomForestClassifier()

# K-Fold Cross Validation
kf = KFold(n_splits=5)
accuracies = []

for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracies.append(accuracy_score(y_test, y_pred))

print("K-Fold Accuracies:", accuracies)
print("Mean Accuracy:", np.mean(accuracies))

2.留一法交叉驗(yàn)證

留一法交叉驗(yàn)證是 k 折交叉驗(yàn)證的極端情況,其中 k 等于樣本數(shù)量。

每次迭代中,選擇一個(gè)樣本作為驗(yàn)證集,其余所有樣本作為訓(xùn)練集。

步驟:

  1. 數(shù)據(jù)集中有 N 個(gè)樣本。
  2. 每次迭代中:
  • 使用 N-1 個(gè)樣本作為訓(xùn)練集。
  • 剩余 1 個(gè)樣本作為驗(yàn)證集。
  1. 計(jì)算 N 次迭代的性能指標(biāo),并取平均值作為最終評(píng)估結(jié)果。

適用場(chǎng)景

適用于數(shù)據(jù)量較小的場(chǎng)景,尤其是在希望最大限度利用訓(xùn)練數(shù)據(jù)時(shí)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 理論上提供模型的無偏估計(jì)。
  • 最大限度地利用了訓(xùn)練數(shù)據(jù),每次訓(xùn)練使用 n-1 個(gè)樣本,特別適用于小數(shù)據(jù)集。

缺點(diǎn)

  • 計(jì)算成本非常高(N 次模型訓(xùn)練)。
  • 對(duì)異常值非常敏感,可能導(dǎo)致性能波動(dòng)。
from sklearn.model_selection import LeaveOneOut

# Leave-One-Out Cross Validation
loo = LeaveOneOut()
accuracies = []

for train_index, test_index in loo.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracies.append(accuracy_score(y_test, y_pred))

print("LOOCV Mean Accuracy:", np.mean(accuracies))

3.分層 K 折交叉驗(yàn)證

分層 k 折交叉驗(yàn)證是 k 折交叉驗(yàn)證的一個(gè)變種,特別適用于分類任務(wù),

通過保持每個(gè)折中各類別的比例與整個(gè)數(shù)據(jù)集一致,確保模型在訓(xùn)練和驗(yàn)證過程中能夠見到各類別的代表性樣本。

步驟

  1. 根據(jù)數(shù)據(jù)的類別分布,將數(shù)據(jù)分為 K 個(gè)子集,保證每個(gè)子集的類別分布與原始數(shù)據(jù)集一致。
  2. 像普通 K折交叉驗(yàn)證一樣進(jìn)行模型訓(xùn)練和驗(yàn)證。

適用場(chǎng)景

適用于分類任務(wù),尤其是當(dāng)目標(biāo)變量類別分布不平衡時(shí)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 提供更公正的性能估計(jì)。
  • 避免因類別不平衡而導(dǎo)致性能評(píng)估偏差。

缺點(diǎn):

  • 需要額外的分層處理,復(fù)雜性稍高。
from sklearn.model_selection import StratifiedKFold

# Stratified K-Fold
skf = StratifiedKFold(n_splits=5)
accuracies = []

for train_index, test_index in skf.split(X, y):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracies.append(accuracy_score(y_test, y_pred))

print("Stratified K-Fold Accuracies:", accuracies)
print("Mean Accuracy:", np.mean(accuracies))

4.重復(fù)k折交叉驗(yàn)證

重復(fù) k 折交叉驗(yàn)證通過多次隨機(jī)劃分k折交叉驗(yàn)證,提高評(píng)估結(jié)果的穩(wěn)定性和可靠性。每次重復(fù)都會(huì)隨機(jī)打亂數(shù)據(jù)集并重新劃分 k 折。

步驟

1.設(shè)定重復(fù)次數(shù)

選擇重復(fù)的次數(shù)(如重復(fù)10次)。

2.多次k折劃分

對(duì)于每次重復(fù),隨機(jī)打亂數(shù)據(jù)集并進(jìn)行 k 折交叉驗(yàn)證。

3.匯總結(jié)果

收集所有重復(fù)的 k 次評(píng)估結(jié)果,計(jì)算總體的平均性能和方差。

適用場(chǎng)景

當(dāng)需要更精確和穩(wěn)健的模型評(píng)估,且計(jì)算資源允許時(shí)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 通過多次不同的劃分,減少單次 k 折交叉驗(yàn)證可能引入的偏差和方差。
  • 多次重復(fù)提供了更穩(wěn)健的性能估計(jì)。

缺點(diǎn)

  • 相對(duì)于單次 k 折交叉驗(yàn)證,重復(fù) k 折需要更多的計(jì)算資源和時(shí)間。
from sklearn.model_selection import RepeatedKFold
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import numpy as np

# 創(chuàng)建示例數(shù)據(jù)
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 初始化模型
model = RandomForestClassifier()

# Repeated K-Fold Cross Validation
rkf = RepeatedKFold(n_splits=5, n_repeats=3, random_state=42)  # 5 折,重復(fù) 3 次
accuracies = []

for train_index, test_index in rkf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracies.append(accuracy_score(y_test, y_pred))

print("Repeated K-Fold Accuracies:", accuracies)
print("Mean Accuracy:", np.mean(accuracies))

5.時(shí)間序列交叉驗(yàn)證

時(shí)間序列交叉驗(yàn)證專門用于時(shí)間序列數(shù)據(jù),保持時(shí)間順序,避免未來信息泄露到訓(xùn)練集中。

常見的方法包括滾動(dòng)窗口(Rolling Window)和擴(kuò)展窗口(Expanding Window)。

滾動(dòng)窗口交叉驗(yàn)證

滾動(dòng)窗口法通過固定大小的訓(xùn)練集窗口,隨著時(shí)間的推進(jìn),窗口向前滑動(dòng),包含最新的數(shù)據(jù),同時(shí)排除最早的數(shù)據(jù)。

1.初始劃分

選擇一個(gè)固定長(zhǎng)度的訓(xùn)練集(例如前 60 個(gè)月的數(shù)據(jù))和一個(gè)固定長(zhǎng)度的驗(yàn)證集(例如接下來的1個(gè)月)。

2.訓(xùn)練與驗(yàn)證

  • 使用初始訓(xùn)練集訓(xùn)練模型。
  • 在驗(yàn)證集上評(píng)估模型性能。
  • 滾動(dòng)窗口:將訓(xùn)練集窗口向前滑動(dòng)一個(gè)時(shí)間步長(zhǎng)(例如一個(gè)月),包含最新的數(shù)據(jù),排除最早的數(shù)據(jù)。
  • 重復(fù)訓(xùn)練與驗(yàn)證過程,直到覆蓋整個(gè)數(shù)據(jù)集。

3.結(jié)果匯總

計(jì)算所有驗(yàn)證階段的性能指標(biāo)的平均值,作為模型的最終評(píng)估結(jié)果。

擴(kuò)展窗口交叉驗(yàn)證

擴(kuò)展窗口法從固定的初始訓(xùn)練集開始,隨著時(shí)間的推進(jìn),訓(xùn)練集不斷擴(kuò)大,包含所有之前的歷史數(shù)據(jù)。

  1. 初始劃分
    選擇一個(gè)初始長(zhǎng)度的訓(xùn)練集(例如前60個(gè)月的數(shù)據(jù))和一個(gè)固定長(zhǎng)度的驗(yàn)證集(例如接下來的1個(gè)月)。
  2. 訓(xùn)練與驗(yàn)證
  • 使用初始訓(xùn)練集訓(xùn)練模型。
  • 在驗(yàn)證集上評(píng)估模型性能。
  • 擴(kuò)展訓(xùn)練集:將驗(yàn)證集的數(shù)據(jù)加入訓(xùn)練集。
  • 選擇下一個(gè)時(shí)間步長(zhǎng)作為新的驗(yàn)證集。
  • 重復(fù)訓(xùn)練與驗(yàn)證過程,直到覆蓋整個(gè)數(shù)據(jù)集。
  1. 結(jié)果匯總
    計(jì)算所有驗(yàn)證階段的性能指標(biāo)的平均值,作為模型的最終評(píng)估結(jié)果。

適用場(chǎng)景

時(shí)間序列預(yù)測(cè)、金融數(shù)據(jù)分析、任何需要考慮時(shí)間依賴性的任務(wù)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 保持時(shí)間順序:防止未來數(shù)據(jù)泄露,提高評(píng)估的真實(shí)性。

缺點(diǎn)

  • 實(shí)現(xiàn)復(fù)雜:需要根據(jù)具體的時(shí)間序列特性設(shè)計(jì)窗口策略。
  • 參數(shù)選擇敏感:窗口大小和步長(zhǎng)等參數(shù)選擇對(duì)結(jié)果影響較大。
from sklearn.model_selection import TimeSeriesSplit
import numpy as np

# 創(chuàng)建示例數(shù)據(jù)
X = np.arange(1000).reshape(-1, 1)  # 示例特征數(shù)據(jù)
y = np.arange(1000)  # 示例目標(biāo)值

# 初始化模型
model = RandomForestClassifier()

# Time Series Split
tscv = TimeSeriesSplit(n_splits=5)  # 5 個(gè)時(shí)間序列劃分
accuracies = []

for train_index, test_index in tscv.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracies.append(accuracy_score(y_test, y_pred))

print("Time Series Split Accuracies:", accuracies)
print("Mean Accuracy:", np.mean(accuracies))

6.嵌套交叉驗(yàn)證

嵌套交叉驗(yàn)證用于同時(shí)進(jìn)行模型評(píng)估和超參數(shù)調(diào)優(yōu),避免在調(diào)參過程中引入評(píng)估偏差。

其結(jié)構(gòu)包含內(nèi)層交叉驗(yàn)證用于超參數(shù)選擇,外層交叉驗(yàn)證用于模型性能評(píng)估。

嵌套交叉驗(yàn)證的工作流程

  1. 外層交叉驗(yàn)證
  • 用途:用于評(píng)估模型的泛化能力。
  • 過程:將數(shù)據(jù)劃分為 K 個(gè)折,依次將每個(gè)折作為驗(yàn)證集,其余折作為訓(xùn)練集。
  • 結(jié)果:每個(gè)折計(jì)算一個(gè)性能指標(biāo)(如準(zhǔn)確率、均方誤差等),最終對(duì) K 個(gè)性能指標(biāo)求平均值,作為模型的總體性能。
  1. 內(nèi)層交叉驗(yàn)證
  • 用途:用于超參數(shù)調(diào)優(yōu)。
  • 過程:在外層訓(xùn)練集的基礎(chǔ)上再次劃分為 M 個(gè)折,依次將每個(gè)折作為驗(yàn)證集,其余折作為訓(xùn)練集。
  • 結(jié)果:對(duì)所有超參數(shù)組合進(jìn)行測(cè)試,選擇在內(nèi)層驗(yàn)證集上性能最優(yōu)的超參數(shù)。

步驟

假設(shè)使用 K 折外層交叉驗(yàn)證和 M 折內(nèi)層交叉驗(yàn)證。

1.將數(shù)據(jù)劃分為 K 個(gè)外層折。

2.在第 i 個(gè)外層折中

  • 將外層訓(xùn)練集劃分為 M 個(gè)內(nèi)層折。
  • 在每個(gè)內(nèi)層折上,調(diào)整模型超參數(shù),選擇最佳參數(shù)組合。
  • 將第 i 折作為驗(yàn)證集,其他 K-1 折作為外層訓(xùn)練集。
  • 對(duì)外層訓(xùn)練集進(jìn)行內(nèi)層交叉驗(yàn)證
  • 用內(nèi)層交叉驗(yàn)證得到的最佳參數(shù),在外層訓(xùn)練集上訓(xùn)練模型。
  • 在外層驗(yàn)證集上評(píng)估模型性能。

3.重復(fù) K 次外層交叉驗(yàn)證。

4.對(duì) K 次外層驗(yàn)證集的性能結(jié)果求平均,得到模型的最終評(píng)估指標(biāo)。

適用場(chǎng)景

需要同時(shí)進(jìn)行模型選擇、超參數(shù)調(diào)優(yōu)和性能評(píng)估的復(fù)雜任務(wù)。

from sklearn.model_selection import KFold, GridSearchCV, cross_val_score
from sklearn.datasets import make_classification
from sklearn.svm import SVC

# 創(chuàng)建示例數(shù)據(jù)
X, y = make_classification(n_samples=500, n_features=20, random_state=42)

# 定義超參數(shù)搜索范圍
param_grid = {
    'C': [0.1, 1, 10],
    'kernel': ['linear', 'rbf']
}

# 外層交叉驗(yàn)證 (用于評(píng)估模型性能)
outer_cv = KFold(n_splits=5, shuffle=True, random_state=42)

# 初始化模型和內(nèi)層 Grid Search
model = SVC()
inner_cv = KFold(n_splits=3, shuffle=True, random_state=42)
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=inner_cv)

# 嵌套交叉驗(yàn)證
nested_scores = cross_val_score(grid_search, X, y, cv=outer_cv)

print("Nested Cross-Validation Scores:", nested_scores)
print("Mean Nested CV Accuracy:", nested_scores.mean())

交叉驗(yàn)證的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 提供更穩(wěn)定和可靠的性能評(píng)估,減少因數(shù)據(jù)劃分帶來的偏差。
  • 有效利用有限的數(shù)據(jù),特別適用于小數(shù)據(jù)集。
  • 可以用于模型選擇、超參數(shù)調(diào)優(yōu)和特征選擇,提升模型性能。

缺點(diǎn)

  • 計(jì)算成本較高,尤其是數(shù)據(jù)量大或 K 值較大時(shí)。
  • 可能對(duì)模型的訓(xùn)練時(shí)間要求較高,不適用于實(shí)時(shí)或大規(guī)模數(shù)據(jù)場(chǎng)景。
  • 不同的交叉驗(yàn)證方法適用的場(chǎng)景不同,選擇不當(dāng)可能影響評(píng)估結(jié)果的有效性。
責(zé)任編輯:華軒 來源: 程序員學(xué)長(zhǎng)
相關(guān)推薦

2024-10-30 08:23:07

2024-10-14 14:02:17

機(jī)器學(xué)習(xí)評(píng)估指標(biāo)人工智能

2024-11-05 12:56:06

機(jī)器學(xué)習(xí)函數(shù)MSE

2024-08-23 09:06:35

機(jī)器學(xué)習(xí)混淆矩陣預(yù)測(cè)

2024-09-18 16:42:58

機(jī)器學(xué)習(xí)評(píng)估指標(biāo)模型

2024-10-08 15:09:17

2024-10-08 10:16:22

2024-10-28 15:52:38

機(jī)器學(xué)習(xí)特征工程數(shù)據(jù)集

2024-12-26 00:34:47

2025-01-20 09:21:00

2024-10-28 00:00:10

機(jī)器學(xué)習(xí)模型程度

2025-01-07 12:55:28

2025-01-20 09:00:00

2024-11-25 08:20:35

2025-02-17 13:09:59

深度學(xué)習(xí)模型壓縮量化

2024-08-01 08:41:08

2024-10-16 07:58:48

2024-12-03 08:16:57

2024-07-17 09:32:19

2024-09-23 09:12:20

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)