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如何实现随机超参数搜索”有了一定的了解,如果想了解更多相关知识,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~