深度學習 十折交叉驗證

2021-09-13 08:28:15 字數 3533 閱讀 6470

用scikit-learn來評價模型質量,為了更好地挑揀出結果的差異,採用了十折交叉驗證(10-fold cross validation)方法。

本程式在輸入層和第乙個隱含層之間加入20%dropout

採用十折交叉驗證的方法進行測試。

# dropout in the input layer with weight constraint

def create_model1():

# create model

model = sequential()

model.add(dropout(0.2, input_shape=(60,)))

model.add(dense(60, init='normal', activation='relu', w_constraint=maxnorm(3)))

model.add(dense(30, init='normal', activation='relu', w_constraint=maxnorm(3)))

model.add(dense(1, init='normal', activation='sigmoid'))

# compile model

sgd = sgd(lr=0.1, momentum=0.9, decay=0.0, nesterov=false)

model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])

return model

numpy.random.seed(seed)

estimators =

pipeline = pipeline(estimators)

kfold = stratifiedkfold(y=encoded_y, n_folds=10, shuffle=true, random_state=seed)

results = cross_val_score(pipeline, x, encoded_y, cv=kfold)

print("accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

from sklearn.pipeline import pipeline

from sklearn.preprocessing import standardscaler

num_pipeline = pipeline([

('imputer', imputer(strategy="median")),

('attribs_adder', combinedattributesadder()),

('std_scaler', standardscaler()),

])housing_num_tr = num_pipeline.fit_transform(housing_num)

pipeline構造器接受(name, transform) tuple的列表作為引數。按順序執行列表中的transform,完成資料預處理

stratifiedkfold用法類似kfold,但是分層取樣,確保訓練集,測試集中各類別樣本的比例與原始資料集中相同

不同的訓練集、測試集分割的方法導致其準確率不同

交叉驗證的基本思想是:將資料集進行一系列分割,生成一組不同的訓練測試集,然後分別訓練模型並計算測試準確率,最後對結果進行平均處理。這樣來有效降低測試準確率的差異。

使用交叉驗證的建議

k=10是乙個一般的建議

如果對於分類問題,應該使用分層抽樣(stratified sampling)來生成資料,保證正負例的比例在訓練集和測試集中的比例相同

from sklearn.cross_validation import cross_val_score
knn = kneighborsclassifier(n_neighbors=5)

# 這裡的cross_val_score將交叉驗證的整個過程連線起來,不用再進行手動的分割資料

# cv引數用於規定將原始資料分成多少份

scores = cross_val_score(knn, x, y, cv=10, scoring='accuracy')

print(scores)

print(scores.mean())#輸出結果平均值

cross_val_score交叉驗證及其用於引數選擇、模型選擇、特徵選擇

十折交叉驗證

交叉驗證主要分成以下幾類 1 k folder cross validation k個子集,每個子集均做一次測試集,其餘的作為訓練集。交叉驗證重複k次,每次選擇乙個子集作為測試集,並將k次的平均交叉驗證識別正確率作為結果。優點 所有的樣本都被作為了訓練集和測試集,每個樣本都被驗證一次。10 fold...

十折交叉驗證 crossvalind函式

indices crossvalind kfold n,k 該命令返回乙個對於n個觀察樣本的k個fold 意為折,有 層 之類的含義,感覺還是英文意思更形象 的標記 indices 該標記中含有相同 或者近似相同 比例的1 k的值,將樣本分為k個相斥的子集。在k fold交叉檢驗中,k 1個fold...

K折交叉驗證學習

交叉驗證主要用於防止模型過於複雜而引起的過擬合,是一種評價訓練資料的資料集泛化 能力的統計方法。其基本思想是將原始資料進行劃分,分成訓練集和測試集,訓練集用來對模型進行訓練,測試集用來測試訓練得到的模型,以此來作為模型的評價指標。講原始資料d按比例劃分,比如7 3,從資料集中隨機選取70 作為訓練集...