1. 程式人生 > >機器學習-交叉驗證 : python資料集劃分

機器學習-交叉驗證 : python資料集劃分

模型選擇的兩種方法:正則化(典型方法)、交叉驗證。

這裡介紹交叉驗證及其python程式碼實現。

交叉驗證

如果給定樣本資料充足,進行模型選擇的一種簡單方法是隨機地將資料集切分為3部分,分為訓練集、驗證集和測試集。

訓練集:訓練模型

驗證集:模型的選擇

測試集:最終對模型的評估

在學習到不同複雜度的模型中,選擇對驗證集有最小預測誤差的模型。由於驗證集有足夠多的資料,用它進行模型選擇也是有效的。在許多實際應用中資料不充分的情況下,可以使用交叉驗證方法。

基本思路:重複地使用資料,把給定資料進行切分,分為訓練集和測試集,在此基礎上反覆地進行訓練、測試以及模型選擇。

簡單交叉驗證:

隨機將資料劃分為兩部分,訓練集和測試集。一般 70%的資料為訓練集,30%為測試集。

程式碼(劃分訓練集,測試集):

from sklearn.cross_validation import train_test_split
# data (全部資料)   labels(全部目標值)     X_train 訓練集(全部特徵)  Y_train 訓練集的目標值
X_train, X_test, Y_train, Y_test = train_test_split(data,labels, test_size=0.25, random_state=0) #這裡訓練集75%:測試集25%

其中的random_state

         原始碼解釋 : int, RandomState instance or None, optional (default=None)

        int, RandomState instance or None, optional (default=None)If int, random_state is the seed used by the random number generator;
        If RandomState instance, random_state is the random number generator;
        If None, the random number generator is the RandomState instance used
        by `np.random`.

大意就是:如果設定一個具體值的話,比如random_state=10,則每次劃分後的資料都一樣,執行多次也一樣。如果設為None, 即random_state=None,則每次劃分後的資料都不同,每一次執行劃分的資料都不同。

程式碼(劃分訓練集,驗證集,測試集)

from sklearn import cross_validation

train_and_valid, test = cross_validation.train_test_split(data, test_size=0.3,random_state=0)  # 先分為兩部分:訓練和驗證  ,  測試集
train, valid = cross_validation.train_test_split(data, test_size=0.5,random_state=0)   # 再把訓練和驗證分為:訓練集 ,驗證集