交叉验证
交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
Keras模型交叉验证
本次案例数据集采用鸢尾花的分类数据集
导入模块
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import KFold
from keras.utils.np_utils import to_categorical
import keras
导入数据
iris = load_iris()
seed = 7
X = iris.data
Y = iris.target
观察数据
我们需要将标签进行独热编码
Y_encode = to_categorical(Y)
构建深度学习网络模型
def build_model():
model = keras.models.Sequential()
model.add(keras.layers.Dense(7,activation='tanh',input_shape=(4,)))
model.add(keras.layers.Dense(3,activation="softmax"))
model.compile(loss="categorical_crossentropy",optimizer='sgd',metrics=['accuracy'])
return model
交叉验证
model = KerasClassifier(build_fn=build_model, epochs=20, batch_size=1)
kfold = KFold(n_splits=10,shuffle=True,random_state=seed)
result = cross_val_score(model,X,Y_encode,cv=kfold)
n_splits=10代表进行十次交叉验证
查看交叉验证结果
print("============")
print("mean:",result.mean())
print("std:",result.std())
交叉验证平均accuracy为0.9000000059604645
accuracy标准差为0.0906764646534975