模型選擇的兩種方法:正則化(典型方法)、交叉驗證。
這裡介紹交叉驗證及其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) # 再把訓練和驗證分為:訓練集 ,驗證集
機器學習 交叉驗證
假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元回歸模型為例 我們假設模型集合為有限集 假設樣本集為s,根據經驗風險最小化原則 erm 可能會使用這樣的演算法 1.在s上訓練每個模型 2.選擇訓練誤差最小的假設函式,即為我們需要的函式。然而,這樣的演算法實際上並不有效...
機器學習 交叉驗證
交叉驗證是最好的測試方法 乙個問題叫做交叉驗證,是指假設要將乙份資料拆分成訓練集和測試集,這個時候怎麼評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集 乙份做測試集,並且每次選擇不同的那乙份做測試級,最後測出五個結果再做平均,這被認為是最好的測試方法。交叉驗證確實是乙個還不錯的驗證的方法,但...
機器學習 KFold交叉驗證
section i brief introduction on stratifiedkfold from sebastian raschka,vahid mirjalili.python機器學習第二版.南京 東南大學出版社,2018.section ii code and analyses from...