日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.3_模型和交叉检验

發布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.3_模型和交叉检验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般在進行模型的測試時,我們會將數據分為訓練集和測試集。在給定的樣本空間中,拿出大部分樣本作為訓練集來訓練模型,剩余的小部分樣本使用剛建立的模型進行預測。

訓練集與測試集

訓練集與測試集的分割可以使用cross_validation中的train_test_split方法,大部分的交叉驗證迭代器都內建一個劃分數據前進行數據索引打散的選項,train_test_split 方法內部使用的就是交叉驗證迭代器。默認不會進行打散,包括設置cv=some_integer(直接)k折疊交叉驗證的cross_val_score會返回一個隨機的劃分。如果數據集具有時間性,千萬不要打散數據再劃分!

  • sklearn.cross_validation.train_test_split
def train_test_split(*arrays,**options)""":param arrays:允許的輸入是列表,數字陣列:param test_size:float,int或None(默認為無),如果浮點數應在0.0和1.0之間,并且表示要包括在測試拆分中的數據集的比例。如果int,表示測試樣本的絕對數:param train_size:float,int或None(默認為無),如果浮點數應在0.0到1.0之間,表示數據集包含在列車拆分中的比例。如果int,表示列車樣本的絕對數:param random_state:int或RandomState,用于隨機抽樣的偽隨機數發生器狀態,參數 random_state 默認設置為 None,這意為著每次打散都是不同的。""" from sklearn.cross_validation import train_test_split from sklearn import datasetsiris = datasets.load_iris() print iris.data.shape,iris.target.shape X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=42) print X_train.shape,y_train.shape print X_test.shape,y_test.shape

?

上面的方式也有局限。因為只進行一次測試,并不一定能代表模型的真實準確率。因為,模型的準確率和數據的切分有關系,在數據量不大的情況下,影響尤其突出。所以還需要一個比較好的解決方案。

模型評估中,除了訓練數據和測試數據,還會涉及到驗證數據。使用訓練數據與測試數據進行了交叉驗證,只有這樣訓練出的模型才具有更可靠的準確率,也才能期望模型在新的、未知的數據集上,能有更好的表現。這便是模型的推廣能力,也即泛化能力的保證。

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
def cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')""":param estimator:模型估計器:param X:特征變量集合:param y:目標變量:param cv:int,使用默認的3折交叉驗證,整數指定一個(分層)KFold中的折疊數:return :預估系數"""

?

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_模型和交叉检验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。