3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
不可能只做出隨機(jī)的劃分一次train和test data,然后得到一個(gè)validation error,就作為衡量這個(gè)算法好壞的標(biāo)準(zhǔn)。因?yàn)檫@樣存在偶然性。我們必須好多次的隨機(jī)的劃分train data和test data,分別在其上面算出各自的validation error。這樣就有一組validation error,根據(jù)這一組validation error,就可以較好的準(zhǔn)確的衡量算法的好壞。
cross validation是在數(shù)據(jù)量有限的情況下的非常好的一個(gè)evaluate performance的方法。
而對(duì)原始數(shù)據(jù)劃分出train data和test data的方法有很多種,這也就造成了cross validation的方法有很多種。
sklearn中的cross validation模塊,最主要的函數(shù)是如下函數(shù):
sklearn.cross_validation.cross_val_score。他的調(diào)用形式是scores = cross_validation.cross_val_score(clf, raw data, raw target, cv=5, score_func=None)
參數(shù)解釋?zhuān)?br/>clf是不同的分類(lèi)器,可以是任何的分類(lèi)器。比如支持向量機(jī)分類(lèi)器。clf = svm.SVC(kernel='linear', C=1)
cv參數(shù)就是代表不同的cross validation的方法了。如果cv是一個(gè)int數(shù)字的話,并且如果提供了raw target參數(shù),那么就代表使用StratifiedKFold分類(lèi)方式,如果沒(méi)有提供raw target參數(shù),那么就代表使用KFold分類(lèi)方式。
cross_val_score函數(shù)的返回值就是對(duì)于每次不同的的劃分raw data時(shí),在test data上得到的分類(lèi)的準(zhǔn)確率。至于準(zhǔn)確率的算法可以通過(guò)score_func參數(shù)指定,如果不指定的話,是用clf默認(rèn)自帶的準(zhǔn)確率算法。
還有其他的一些參數(shù)不是很重要。
cross_val_score具體使用例子見(jiàn)下:
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_validation.cross_val_score(
... clf, raw data, raw target, cv=5)
...
>>> scores
array([ 1. ..., 0.96..., 0.9 ..., 0.96..., 1. ])
除了剛剛提到的KFold以及StratifiedKFold這兩種對(duì)raw data進(jìn)行劃分的方法之外,還有其他很多種劃分方法。但是其他的劃分方法調(diào)用起來(lái)和前兩個(gè)稍有不同(但是都是一樣的),下面以ShuffleSplit方法為例說(shuō)明:
>>> n_samples = raw_data.shape[0]
>>> cv = cross_validation.ShuffleSplit(n_samples, n_iter=3,
... test_size=0.3, random_state=0)
>>> cross_validation.cross_val_score(clf, raw data, raw target, cv=cv)
...
array([ 0.97..., 0.97..., 1. ])
添加回答
舉報(bào)