2.3_模型和交叉检验
模型檢驗-交叉驗證
一般在進行模型的測試時,我們會將數據分為訓練集和測試集。在給定的樣本空間中,拿出大部分樣本作為訓練集來訓練模型,剩余的小部分樣本使用剛建立的模型進行預測。
訓練集與測試集
訓練集與測試集的分割可以使用cross_validation中的train_test_split方法,大部分的交叉驗證迭代器都內建一個劃分數據前進行數據索引打散的選項,train_test_split 方法內部使用的就是交叉驗證迭代器。默認不會進行打散,包括設置cv=some_integer(直接)k折疊交叉驗證的cross_val_score會返回一個隨機的劃分。如果數據集具有時間性,千萬不要打散數據再劃分!
- sklearn.cross_validation.train_test_split
?
上面的方式也有局限。因為只進行一次測試,并不一定能代表模型的真實準確率。因為,模型的準確率和數據的切分有關系,在數據量不大的情況下,影響尤其突出。所以還需要一個比較好的解決方案。
模型評估中,除了訓練數據和測試數據,還會涉及到驗證數據。使用訓練數據與測試數據進行了交叉驗證,只有這樣訓練出的模型才具有更可靠的準確率,也才能期望模型在新的、未知的數據集上,能有更好的表現。這便是模型的推廣能力,也即泛化能力的保證。
holdout method
評估模型泛化能力的典型方法是holdout交叉驗證(holdout cross validation)。holdout方法很簡單,我們只需要將原始數據集分割為訓練集和測試集,前者用于訓練模型,后者用于評估模型的性能。一般來說,Holdout 驗證并非一種交叉驗證,因為數據并沒有交叉使用。 隨機從最初的樣本中選出部分,形成交叉驗證數據,而剩余的就當做訓練數據。 一般來說,少于原本樣本三分之一的數據被選做驗證數據。所以這種方法得到的結果其實并不具有說服性
k-折交叉驗證
K折交叉驗證,初始采樣分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的數據,其他K-1個樣本用來訓練。交叉驗證重復K次,每個子樣本驗證一次,平均K次的結果或者使用其它結合方式,最終得到一個單一估測。這個方法的優勢在于,同時重復運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次,10折交叉驗證是最常用的。
例如5折交叉驗證,全部可用數據集分成五個集合,每次迭代都選其中的1個集合數據作為驗證集,另外4個集合作為訓練集,經過5組的迭代過程。交叉驗證的好處在于,可以保證所有數據都有被訓練和驗證的機會,也盡最大可能讓優化的模型性能表現的更加可信。
使用交叉驗證的最簡單的方法是在估計器和數據集上使用cross_val_score函數。
- sklearn.cross_validation.cross_val_score
?
from sklearn.cross_validation import cross_val_score diabetes = datasets.load_diabetes() X = diabetes.data[:150] y = diabetes.target[:150] lasso = linear_model.Lasso() print(cross_val_score(lasso, X, y))?
使用交叉驗證方法的目的主要有2個:
- 從有限的學習數據中獲取盡可能多的有效信息;
- 可以在一定程度上避免過擬合問題。
轉載于:https://www.cnblogs.com/alexzhang92/p/10070211.html
總結
以上是生活随笔為你收集整理的2.3_模型和交叉检验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10种排序算法基础总结
- 下一篇: jar - 操作jar包的工具