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中with及contextlib的用法详解
Jun 08 Python
python Crypto模块的安装与使用方法
Dec 21 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
python中字符串内置函数的用法总结
Sep 13 Python
selenium+python自动化测试之环境搭建
Jan 23 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
python实现电子书翻页小程序
Jul 23 Python
Django 批量插入数据的实现方法
Jan 12 Python
如何使用python写截屏小工具
Sep 29 Python
Python os和os.path模块详情
Apr 02 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
Snoopy类使用小例子
2008/04/15 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
node.js超时timeout详解
2014/11/26 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python @property使用方法解析
2019/09/17 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
pymysql模块使用简介与示例
2020/11/17 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
Html5元素及基本语法详解
2016/08/02 HTML / CSS
优秀团员个人的自我评价
2013/10/02 职场文书
企业厂长岗位职责
2013/12/17 职场文书
门卫人员岗位职责
2013/12/24 职场文书
《风筝》教学反思
2016/02/23 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL