使用scikit-learn对模型进行比较

scikit-learn封装(wrapper)两种库来对进行分类

一种为KerasClassifier ,一种为KerasRegress

本例使用第一种分类器模型

通过使用build_in函数,为其传递一个训练模型,然后对结果进行评估

在这里,可以将我们的模型定义为一个函数,然后返回一个编译后的模型,该模型将作为参数传递给build_in函数

和使用fit()函数一样,该函数还接受epochs和batch_size参数

最终使用cross_val_score()函数来对模型进行评估,并打印出平均值


对模型进行比较:

在create_model()函数创建时,可以为其提供两个参数,分别为optimizer和init,这两个参数分别指定了优化器和初始化核

然后通过字典的形式,分别对这两个参数进行选择,最终可以生成不同的模型,从而进行比较

这里的optimizer可以选择参数 :rmsprop和adam

init参数可以选择:glorot_uniform ,normal, uniform

epochs可以选择:50,100,150

batch_size可以选择5,10,20

这样,通过不同的搭配,可以生成2*3*3*3种模型

最终,每个模型再使用3层的交叉验证,这样,就可以进行最终的模型对比评估

不过,这种方法使用于数据集比较小,特征比较少的情况,不然时间开销会很大


# MLP for Pima Indians Dataset with grid search via sklearn
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
import numpy

# Function to create model, required for KerasClassifier
def create_model(optimizer='rmsprop', init='glorot_uniform'):
	# create model
	model = Sequential()
	model.add(Dense(12, input_dim=8, kernel_initializer=init, activation='relu'))
	model.add(Dense(8, kernel_initializer=init, activation='relu'))
	model.add(Dense(1, kernel_initializer=init, activation='sigmoid'))
	# Compile model
	model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
	return model

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = KerasClassifier(build_fn=create_model, verbose=0)
# grid search epochs, batch size and optimizer
optimizers = ['rmsprop', 'adam']
init = ['glorot_uniform', 'normal', 'uniform']
epochs = [50, 100, 150]
batches = [5, 10, 20]
param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init=init)
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid_result = grid.fit(X, Y)
# summarize results
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
	print("%f (%f) with: %r" % (mean, stdev, param))

代码来源: https://machinelearningmastery.com/use-keras-deep-learning-models-scikit-learn-python/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值