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 相关文章推荐
Django Highcharts制作图表
Aug 27 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
Django密码系统实现过程详解
Jul 19 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
python字符串反转的四种方法详解
Dec 02 Python
python二维键值数组生成转json的例子
Dec 06 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 Python
keras多显卡训练方式
Jun 10 Python
Python包和模块的分发详细介绍
Jun 19 Python
pytest进阶教程之fixture函数详解
Mar 29 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
ajax php 实现写入数据库
2009/09/02 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
PHP读取Excel类文件
2017/05/15 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
dojo 之基础篇
2007/03/24 Javascript
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python常用函数详解
2016/09/13 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
python支付宝支付示例详解
2019/08/22 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
python的scipy实现插值的示例代码
2019/11/12 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
python实现图像外边界跟踪操作
2020/07/13 Python
特色冷饮店创业计划书
2014/01/28 职场文书
学生个人自我鉴定
2014/03/26 职场文书
开展读书活动总结
2014/06/30 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
小学中队委竞选稿
2015/11/20 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python