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 13 Python
Python程序设计入门(3)数组的使用
Jun 16 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python中OrderedDict的使用方法详解
May 05 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
python 实现体质指数BMI计算
May 26 Python
Python语言内置数据类型
Feb 24 Python
python文件与路径操作神器 pathlib
Apr 01 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php获取地址栏信息的代码
2008/10/08 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
PHP实现的日历功能示例
2018/09/01 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
javascript基本语法分析说明
2008/06/15 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
详解python3中zipfile模块用法
2018/06/18 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
商业活动邀请函
2014/02/04 职场文书
旅游文化节策划方案
2014/06/06 职场文书
幼儿园中班教学反思
2016/03/03 职场文书