OpenCV python sklearn如何实现随机超参数搜索

小编给大家分享一下OpenCV python sklearn如何实现随机超参数搜索,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

本文介绍了OpenCV python sklearn随机超参数搜索的实现,分享给大家,具体如下:

OpenCV python sklearn如何实现随机超参数搜索

"""
房价预测数据集使用sklearn执行超参数搜索
"""
importmatplotlibasmpl
importmatplotlib.pyplotasplt
importnumpyasnp
importsklearn
importpandasaspd
importos
importsys
importtensorflowastf
fromtensorflow_core.python.keras.api._v2importkeras#不能使用python
fromsklearn.preprocessingimportStandardScaler
fromsklearn.datasetsimportfetch_california_housing
fromsklearn.model_selectionimporttrain_test_split,RandomizedSearchCV
fromscipy.statsimportreciprocal

os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
asserttf.__version__.startswith('2.')

#0.打印导入模块的版本
print(tf.__version__)
print(sys.version_info)
formoduleinmpl,np,sklearn,pd,tf,keras:
print("%sversion:%s"%(module.__name__,module.__version__))


#显示学习曲线
defplot_learning_curves(his):
pd.DataFrame(his.history).plot(figsize=(8,5))
plt.grid(True)
plt.gca().set_ylim(0,1)
plt.show()


#1.加载数据集california房价
housing=fetch_california_housing()

print(housing.DESCR)
print(housing.data.shape)
print(housing.target.shape)

#2.拆分数据集训练集验证集测试集
x_train_all,x_test,y_train_all,y_test=train_test_split(
housing.data,housing.target,random_state=7)
x_train,x_valid,y_train,y_valid=train_test_split(
x_train_all,y_train_all,random_state=11)

print(x_train.shape,y_train.shape)
print(x_valid.shape,y_valid.shape)
print(x_test.shape,y_test.shape)

#3.数据集归一化
scaler=StandardScaler()
x_train_scaled=scaler.fit_transform(x_train)
x_valid_scaled=scaler.fit_transform(x_valid)
x_test_scaled=scaler.fit_transform(x_test)


#创建keras模型
defbuild_model(hidden_layers=1,#中间层的参数
layer_size=30,
learning_rate=3e-3):
#创建网络层
model=keras.models.Sequential()
model.add(keras.layers.Dense(layer_size,activation="relu",
input_shape=x_train.shape[1:]))
#隐藏层设置
for_inrange(hidden_layers-1):
model.add(keras.layers.Dense(layer_size,
activation="relu"))
model.add(keras.layers.Dense(1))

#优化器学习率
optimizer=keras.optimizers.SGD(lr=learning_rate)
model.compile(loss="mse",optimizer=optimizer)

returnmodel


defmain():
#RandomizedSearchCV

#1.转化为sklearn的model
sk_learn_model=keras.wrappers.scikit_learn.KerasRegressor(build_model)

callbacks=[keras.callbacks.EarlyStopping(patience=5,min_delta=1e-2)]

history=sk_learn_model.fit(x_train_scaled,y_train,epochs=100,
validation_data=(x_valid_scaled,y_valid),
callbacks=callbacks)
#2.定义超参数集合
#f(x)=1/(x*log(b/a))a<=x<=b
param_distribution={
"hidden_layers":[1,2,3,4],
"layer_size":np.arange(1,100),
"learning_rate":reciprocal(1e-4,1e-2),
}

#3.执行超搜索参数
#cross_validation:训练集分成n份,n-1训练,最后一份验证.
random_search_cv=RandomizedSearchCV(sk_learn_model,param_distribution,
n_iter=10,
cv=3,
n_jobs=1)
random_search_cv.fit(x_train_scaled,y_train,epochs=100,
validation_data=(x_valid_scaled,y_valid),
callbacks=callbacks)
#4.显示超参数
print(random_search_cv.best_params_)
print(random_search_cv.best_score_)
print(random_search_cv.best_estimator_)

model=random_search_cv.best_estimator_.model
print(model.evaluate(x_test_scaled,y_test))

#5.打印模型训练过程
plot_learning_curves(history)


if__name__=='__main__':
main()

看完了这篇文章,相信你对“OpenCV python sklearn如何实现随机超参数搜索”有了一定的了解,如果想了解更多相关知识,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!

发布于 2021-05-30 14:06:03
收藏
分享
海报
0 条评论
170
上一篇:微信小程序如何实现静默登录 下一篇:Spring @Valid @Validated实现验证的方法
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码