您好,登錄后才能下訂單哦!
小編給大家分享一下OpenCV python sklearn如何實現隨機超參數搜索,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
本文介紹了OpenCV python sklearn隨機超參數搜索的實現,分享給大家,具體如下:
""" 房價預測數據集 使用sklearn執行超參數搜索 """ import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import sklearn import pandas as pd import os import sys import tensorflow as tf from tensorflow_core.python.keras.api._v2 import keras # 不能使用 python from sklearn.preprocessing import StandardScaler from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split, RandomizedSearchCV from scipy.stats import reciprocal os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' assert tf.__version__.startswith('2.') # 0.打印導入模塊的版本 print(tf.__version__) print(sys.version_info) for module in mpl, np, sklearn, pd, tf, keras: print("%s version:%s" % (module.__name__, module.__version__)) # 顯示學習曲線 def plot_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模型 def build_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 _ in range(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) return model def main(): # 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如何實現隨機超參數搜索”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。