2013-10-12 70 views
20

有沒有人可以用真正簡單的語言解釋我交叉驗證和網格搜索有什麼區別?它是如何工作的,我應該先進行交叉驗證,然後進行網格搜索?交叉驗證和網格搜索

我的問題來自讀這篇文檔:sklearn

回答

56

交叉驗證是當你保留你的數據的一部分,評估模型使用。有不同的交叉驗證方法。最簡單的概念是隻需要70%的數據(只需填寫一個數字,並不一定是70%)並將其用於培訓,然後使用剩餘的30%數據來評估模型的數據性能。你需要不同的數據來訓練和評估模型的原因是爲了防止過度配合。還有其他的(稍微涉及到的)交叉驗證技術,當然就像在實踐中經常使用的k-fold交叉驗證一樣。

網格搜索意味着你有一組模型(從對方在他們的參數值,其躺在一個網格不同)。你所做的是,然後訓練每個模型並使用交叉驗證對其進行評估。然後選擇一個效果最好的。爲了舉個具體的例子,如果你使用的是支持向量機,你可以使用不同的值爲gammaC。因此,例如,您可以使用以下值爲(gamma, C)的網格:(1, 1), (0.1, 1), (1, 10), (0.1, 10)。這是一個網格,因爲它就像[1, 0.1]對於gamma[1, 10]對於C的產品。網格搜索基本上會針對這四對(gamma, C)值中的每一對訓練SVM,然後使用交叉驗證對其進行評估,並選擇效果最好的一個。

8

交叉驗證是一種穩健估計模型的測試集性能(泛化)的方法。 網格搜索是一種選擇模型系列中最好的一種方法,通過參數網格進行參數化。

這裏的「模型」我不帶參數,如SVC(C=1, kernel='poly')意味着一個受過訓練的情況下,更多的算法一起。

(我不知道是否有資格作爲簡單的話,我只是想給一個簡短的,consise定義除了或者尼曼的很好的解釋)

+2

我明白這一點。但是在scikit-learn的例子中,首先通過執行'X_train,X_test,y_train,y_test = train_test_split( X,y,test_size = 0)來分割data_set。5,random_state = 0',然後網格中搜索'clf = GridSearchCV(SVC(C = 1),tuned_pa​​rameters,cv = 5,scoring = score)'這意味着第一步分裂爲例如1000訓練設置爲500列車和500個測試對象,然後網格搜索將500的訓練集分割爲「cv = 5」5倍交叉驗證?因此,500個對象分爲250和250或400和100等等?! – Linda

+6

是的,沒錯。在網格搜索模型選擇(使用5倍交叉驗證)之後,一半數據保留用於評估**。原因是他們不僅想要選擇最佳模型,而且要對它的泛化程度(它在新數據上表現如何)有一個很好的估計。您不能僅僅使用網格搜索交叉驗證得分,因爲您選擇的得分最高的模型,因此可能會在其得分中加入某種選擇偏差。所以這就是爲什麼他們在網格搜索結束後保留​​部分數據進行測試。 –

5

交叉驗證,只需分離試驗和訓練數據和用測試數據驗證訓練結果。我知道有兩種交叉驗證技術。

首先,測試/火車交叉驗證。將數據分解爲測試和訓練。

其次,k折交叉驗證分割數據爲k箱,使用每個倉作爲測試數據,並使用該數據作爲訓練數據的其餘部分和驗證對測試數據。重複該過程k次。並獲得平均表現。 k-fold交叉驗證特別適用於小型數據集,因爲它可以最大化測試數據和訓練數據。

網格搜索;系統地通過參數曲調的多個組合進行交叉驗證,交叉驗證每個組合,並確定哪一個能夠提供最佳性能。您可以通過多種組合來改變參數。