用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))
pipeline構造器接受(name, transform) tuple的列表作為引數。按順序執行列表中的transform,完成資料預處理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)
stratifiedkfold用法類似kfold,但是分層取樣,確保訓練集,測試集中各類別樣本的比例與原始資料集中相同
使用交叉驗證的建議不同的訓練集、測試集分割的方法導致其準確率不同
交叉驗證的基本思想是:將資料集進行一系列分割,生成一組不同的訓練測試集,然後分別訓練模型並計算測試準確率,最後對結果進行平均處理。這樣來有效降低測試準確率的差異。
k=10是乙個一般的建議
如果對於分類問題,應該使用分層抽樣(stratified sampling)來生成資料,保證正負例的比例在訓練集和測試集中的比例相同
from sklearn.cross_validation import cross_val_score
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())#輸出結果平均值
十折交叉驗證
交叉驗證主要分成以下幾類 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 作為訓練集...