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 06 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
python正则表达式之对号入座篇
Jul 24 Python
Django添加sitemap的方法示例
Aug 06 Python
python程序控制NAO机器人行走
Apr 29 Python
python中eval与int的区别浅析
Aug 11 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
详解Django中异步任务之django-celery
Nov 05 Python
如何在C++中调用Python
May 21 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
php 过滤器实现代码
2010/08/09 PHP
三种php连接access数据库方法
2013/11/11 PHP
php导出excel格式数据问题
2014/03/11 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
JS获取时间的方法
2015/01/21 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
Python用GET方法上传文件
2015/03/10 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
Django如何配置mysql数据库
2018/05/04 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
会议邀请函
2015/01/30 职场文书
导游词之凤凰古城
2019/10/22 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis
python中Matplotlib绘制直线的实例代码
2021/07/04 Python