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使用scrapy抓取网站sitemap信息的方法
Apr 08 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
Python如何使用ConfigParser读取配置文件
Nov 12 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
PHP多维数组排序array详解
2017/11/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
python选择排序算法的实现代码
2013/11/21 Python
Python实现字典的key和values的交换
2015/08/04 Python
使用python绘制常用的图表
2016/08/27 Python
Python3 replace()函数使用方法
2018/03/19 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
高中地理教学反思
2014/01/29 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
教师继续教育反思周记
2015/06/25 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
详解flex:1什么意思
2022/07/23 HTML / CSS