機器學習筆記之交叉驗證

2021-08-22 18:02:20 字數 2568 閱讀 2983

在評估演算法的效果時,為什麼要進行交叉驗證呢,檢視了官方說明文件後,對交叉驗證做了如下的描述:

在了解交叉交叉驗證之前,我們先了解如下知識:

過擬合:是指所建立的機器學習模型在訓練樣本中表現得過於優越,導致在驗證資料集以及測試資料集中表現不佳。為了避免這種情況,通常的做法是執行(監督)機器學習實驗時將部分可用資料作為測試集。關於測試集和訓練集的劃分,sklearn模型中有如下方法:

#匯入相關模組

import numpy as np

from sklearn.model_selection import train_test_split

from sklearn import datasets

from sklearn import svm

#載入資料集

iris = datasets.load_iris()

iris.data.shape, iris.target.shape

((150, 4), (150,))

現在可以快速抽樣培訓,同時拿出40%的測試資料(評估)我們的分類器:

x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=0)

x_train.shape, y_train.shape

out:((90, 4), (90,))

x_test.shape, y_test.shape

out:((60, 4), (60,))

clf = svm.svc(kernel='linear', c=1).fit(x_train, y_train)

clf.score(x_test, y_test)

out:0.96...

在svm中,通過設定不同的引數時,即我們平時所說的調參,在測試集上仍然可能存在著過擬合的情況,因為可以通過調整不同的引數使得模型達到最優,針對這種情況,模型的泛化能力較弱。為了解決這一問題,資料集的另一部分可以被稱為所謂的「驗證集」:訓練在訓練集上進行,之後對驗證集進行評估。驗證所得到模型的效果。

通過將可用資料分為三組,我們大大減少了可用於學習模型的樣本數,其結果可能取決於一對(訓練,驗證)集合的特定隨機選擇。解決這個問題的方法是稱為 交叉驗證 的過程。乙個測試集雖然仍需要進行最終評估,但是在做cv時不再需要驗證集。這一過程被稱為k- fold cv,訓練集被分為k個較小的集合(其他方法如下所述,但通常遵循相同的原則)。對於k 「摺疊」中的每乙個,遵循以下過程:

即:k折交叉驗證就是把樣本分為k份,其中k-1份用來做訓練建立模型,留剩下的乙份來驗證,交叉驗證重複k次,每個子樣本驗證一次。

然後通過k折交叉驗證方法,可以得出每次計算時的平均得分。這種方法在效能上可能代價較高,但是不會浪費太多的資料(如固定任意測試集的情況),這是其主要優點,例如反向推理,其中樣本數量非常小。

計算交叉驗證指標

在計算交叉驗證的指標時,model_selection模組中cross_val_score函式進行計算,看如下例子

from sklearn.model_selection import cross_val_score

clf = svm.svc(kernel='linear', c=1)

scores = cross_val_score(clf, iris.data, iris.target, cv=5)

scores

out[38]: array([ 0.96666667, 1. , 0.96666667, 0.96666667, 1. ])

因此,評估模型得分的平均分數和95%置信區間可以通過如下方法得到:

print("accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

accuracy: 0.98 (+/- 0.03)

預設情況下,每個cv迭代時計算的分數score。可以通過使用評分引數的改變而有所不同:

from sklearn import metrics

scores = cross_val_score(clf, iris.data, iris.target, cv=5, scoring='f1_macro')

scores

out[42]: array([ 0.96658312, 1. , 0.96658312, 0.96658312, 1. ])

從以上的描述中,我們可以得出交叉驗證的思想:

其是把在某種意義下將原始資料(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set or test set),首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的效能指標。

因此可以得出交叉驗證的目的:得到穩定可靠的模型。

機器學習 評估指標之交叉驗證

通俗的講就是將樣本均分為幾等份,拿出某一 幾 份作為測試樣本,剩下的作為訓練樣本,去 得到相應指標 準確率,召回率,f1等 再抽取另乙份 幾份 作為測試樣本,剩下的作為訓練樣本,去 得到相應指標 準確率,召回率,f1等 使得每乙份樣本都參與到測試集中,最終返回乙個指標列表。1 交叉驗證用於評估模型的...

機器學習筆記6 交叉驗證

k折的資料集是訓練集,而不是所有資料,它將訓練集分為兩塊來訓練和驗證。可通過簡單的方式隨機化 sklearn k 折 cv 中的事件,就是將 shuffle 標誌設定為 true。之後,將從如下所示 cv kfold len x 2 變為如下所示 cv kfold len x 2,shuffle t...

機器學習 交叉驗證

假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元回歸模型為例 我們假設模型集合為有限集 假設樣本集為s,根據經驗風險最小化原則 erm 可能會使用這樣的演算法 1.在s上訓練每個模型 2.選擇訓練誤差最小的假設函式,即為我們需要的函式。然而,這樣的演算法實際上並不有效...