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 time模块用法实例详解
Sep 11 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
python3中str(字符串)的使用教程
Mar 23 Python
让代码变得更易维护的7个Python库
Oct 09 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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字段中固定字符串并替换的几个方法
2012/09/23 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
Python3中的2to3转换工具使用示例
2015/06/12 Python
python 写的一个爬虫程序源码
2016/02/28 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
python 决策树算法的实现
2020/10/09 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
AC Lens:购买隐形眼镜
2017/02/26 全球购物
大一新生军训时的自我评价分享
2013/12/05 职场文书
单位接收函范文
2015/01/30 职场文书
人生遥控器观后感
2015/06/11 职场文书