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


Posted in Python onJanuary 17, 2020

本文介绍了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 相关文章推荐
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
ipad上运行python的方法步骤
Oct 12 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
Python如何解除一个装饰器
Aug 07 Python
对Pytorch 中的contiguous理解说明
Mar 03 Python
Django中的JWT身份验证的实现
May 07 Python
Python requests用法和django后台处理详解
Mar 19 Python
python numpy 矩阵堆叠实例
Jan 17 #Python
Python利用Scrapy框架爬取豆瓣电影示例
Jan 17 #Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 #Python
pytorch forward两个参数实例
Jan 17 #Python
Python实现CNN的多通道输入实例
Jan 17 #Python
Python面向对象编程基础实例分析
Jan 17 #Python
通过python实现windows桌面截图代码实例
Jan 17 #Python
You might like
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
Python3 中文文件读写方法
2018/01/23 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python多进程fork()函数详解
2019/02/22 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
高中化学教学反思
2014/01/13 职场文书
水利学院求职自荐书
2014/02/01 职场文书
考研导师推荐信范文
2015/03/27 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby