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

 更新时间:2020年01月17日 09:46:42   转载 作者:廷益--飞鸟  
这篇文章主要介绍了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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python基本类型的连接组合和互相转换方式(13种)

    Python基本类型的连接组合和互相转换方式(13种)

    这篇文章主要介绍了Python中基本类型的连接组合和互相转换13种方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Django跨域请求CSRF的方法示例

    Django跨域请求CSRF的方法示例

    这篇文章主要介绍了Django跨域请求CSRF的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • python实现根据用户输入从电影网站获取影片信息的方法

    python实现根据用户输入从电影网站获取影片信息的方法

    这篇文章主要介绍了python实现根据用户输入从电影网站获取影片信息的方法,涉及Python正则表达式抓取网页的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Python Deque 模块使用详解

    Python Deque 模块使用详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除.
    2014-07-07
  • Python实现字符串的逆序 C++字符串逆序算法

    Python实现字符串的逆序 C++字符串逆序算法

    这篇文章主要为大家详细介绍了Python实现字符串的逆序,C++将字符串逆序输出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python实现生成简单的Makefile文件代码示例

    Python实现生成简单的Makefile文件代码示例

    这篇文章主要介绍了Python实现生成简单的Makefile文件代码示例,本文给出了两段实现代码,需要的朋友可以参考下
    2015-03-03
  • Python用GET方法上传文件

    Python用GET方法上传文件

    本文给大家介绍的是在Python中使用GET方法实现上传文件的方法,起因是有网友说Get方法不能用来上传文件,于是就做了这个例子,这里分享给大家,有需要的小伙伴参考下吧。
    2015-03-03
  • python读取配置文件方式(ini、yaml、xml)

    python读取配置文件方式(ini、yaml、xml)

    这篇文章主要介绍了python读取配置文件方式(ini、yaml、xml),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python数据持久化存储实现方法分析

    Python数据持久化存储实现方法分析

    这篇文章主要介绍了Python数据持久化存储实现方法,结合实例形式分析了Python基于pymongo及mysql模块的数据持久化存储操作相关实现技巧,需要的朋友可以参考下
    2019-12-12
  • python3中bytes和string之间的互相转换

    python3中bytes和string之间的互相转换

    这篇文章主要介绍了python3中bytes和string之间的互相转换,文中给出了详细的介绍和示例代码,相信对大家具有一定的参考价值,有需要的朋友们下面来一起学习学习吧。
    2017-02-02

最新评论