日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

2.3_模型和交叉检验

發(fā)布時(shí)間:2025/6/17 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.3_模型和交叉检验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一般在進(jìn)行模型的測(cè)試時(shí),我們會(huì)將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集。在給定的樣本空間中,拿出大部分樣本作為訓(xùn)練集來訓(xùn)練模型,剩余的小部分樣本使用剛建立的模型進(jìn)行預(yù)測(cè)。

訓(xùn)練集與測(cè)試集

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

  • sklearn.cross_validation.train_test_split
def train_test_split(*arrays,**options)""":param arrays:允許的輸入是列表,數(shù)字陣列:param test_size:float,int或None(默認(rèn)為無),如果浮點(diǎn)數(shù)應(yīng)在0.0和1.0之間,并且表示要包括在測(cè)試拆分中的數(shù)據(jù)集的比例。如果int,表示測(cè)試樣本的絕對(duì)數(shù):param train_size:float,int或None(默認(rèn)為無),如果浮點(diǎn)數(shù)應(yīng)在0.0到1.0之間,表示數(shù)據(jù)集包含在列車拆分中的比例。如果int,表示列車樣本的絕對(duì)數(shù):param random_state:int或RandomState,用于隨機(jī)抽樣的偽隨機(jī)數(shù)發(fā)生器狀態(tài),參數(shù) random_state 默認(rèn)設(shè)置為 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

?

上面的方式也有局限。因?yàn)橹贿M(jìn)行一次測(cè)試,并不一定能代表模型的真實(shí)準(zhǔn)確率。因?yàn)?#xff0c;模型的準(zhǔn)確率和數(shù)據(jù)的切分有關(guān)系,在數(shù)據(jù)量不大的情況下,影響尤其突出。所以還需要一個(gè)比較好的解決方案。

模型評(píng)估中,除了訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù),還會(huì)涉及到驗(yàn)證數(shù)據(jù)。使用訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)進(jìn)行了交叉驗(yàn)證,只有這樣訓(xùn)練出的模型才具有更可靠的準(zhǔn)確率,也才能期望模型在新的、未知的數(shù)據(jù)集上,能有更好的表現(xiàn)。這便是模型的推廣能力,也即泛化能力的保證。

holdout method

評(píng)估模型泛化能力的典型方法是holdout交叉驗(yàn)證(holdout cross validation)。holdout方法很簡(jiǎn)單,我們只需要將原始數(shù)據(jù)集分割為訓(xùn)練集和測(cè)試集,前者用于訓(xùn)練模型,后者用于評(píng)估模型的性能。一般來說,Holdout 驗(yàn)證并非一種交叉驗(yàn)證,因?yàn)閿?shù)據(jù)并沒有交叉使用。 隨機(jī)從最初的樣本中選出部分,形成交叉驗(yàn)證數(shù)據(jù),而剩余的就當(dāng)做訓(xùn)練數(shù)據(jù)。 一般來說,少于原本樣本三分之一的數(shù)據(jù)被選做驗(yàn)證數(shù)據(jù)。所以這種方法得到的結(jié)果其實(shí)并不具有說服性

k-折交叉驗(yàn)證

K折交叉驗(yàn)證,初始采樣分割成K個(gè)子樣本,一個(gè)單獨(dú)的子樣本被保留作為驗(yàn)證模型的數(shù)據(jù),其他K-1個(gè)樣本用來訓(xùn)練。交叉驗(yàn)證重復(fù)K次,每個(gè)子樣本驗(yàn)證一次,平均K次的結(jié)果或者使用其它結(jié)合方式,最終得到一個(gè)單一估測(cè)。這個(gè)方法的優(yōu)勢(shì)在于,同時(shí)重復(fù)運(yùn)用隨機(jī)產(chǎn)生的子樣本進(jìn)行訓(xùn)練和驗(yàn)證,每次的結(jié)果驗(yàn)證一次,10折交叉驗(yàn)證是最常用的。

例如5折交叉驗(yàn)證,全部可用數(shù)據(jù)集分成五個(gè)集合,每次迭代都選其中的1個(gè)集合數(shù)據(jù)作為驗(yàn)證集,另外4個(gè)集合作為訓(xùn)練集,經(jīng)過5組的迭代過程。交叉驗(yàn)證的好處在于,可以保證所有數(shù)據(jù)都有被訓(xùn)練和驗(yàn)證的機(jī)會(huì),也盡最大可能讓優(yōu)化的模型性能表現(xiàn)的更加可信。

使用交叉驗(yàn)證的最簡(jiǎn)單的方法是在估計(jì)器和數(shù)據(jù)集上使用cross_val_score函數(shù)。

  • 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:模型估計(jì)器:param X:特征變量集合:param y:目標(biāo)變量:param cv:int,使用默認(rèn)的3折交叉驗(yàn)證,整數(shù)指定一個(gè)(分層)KFold中的折疊數(shù):return :預(yù)估系數(shù)"""

?

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))

?

使用交叉驗(yàn)證方法的目的主要有2個(gè):

  • 從有限的學(xué)習(xí)數(shù)據(jù)中獲取盡可能多的有效信息;
  • 可以在一定程度上避免過擬合問題。

轉(zhuǎn)載于:https://www.cnblogs.com/alexzhang92/p/10070211.html

總結(jié)

以上是生活随笔為你收集整理的2.3_模型和交叉检验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。