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爬取NUS-WIDE数据库图片
Oct 05 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
Python中的Numpy矩阵操作
Aug 12 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
Python实现的文轩网爬虫完整示例
May 16 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Mac安装python3的方法步骤
Aug 09 Python
pytorch 归一化与反归一化实例
Dec 31 Python
keras 多任务多loss实例
Jun 22 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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自定义apk安装包实例
2014/10/20 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
让焦点自动跳转
2006/07/01 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
js charAt的使用示例
2014/02/18 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Django中间件实现拦截器的方法
2018/06/01 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
洗发水广告词
2014/03/13 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
先进个人材料怎么写
2014/12/30 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL