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 文件操作实现代码
Oct 07 Python
使用Python的Twisted框架编写简单的网络客户端
Apr 16 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
简单了解python数组的基本操作
Nov 26 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
Python3如何判断三角形的类型
Apr 12 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
python基础之//、/与%的区别详解
Jun 10 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在linux上执行外部命令的方法
2017/02/06 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
jQuery 自定义函数写法分享
2012/03/30 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
script标签属性用type还是language
2015/01/21 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
python离线安装外部依赖包的实现
2020/02/13 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
捷克时尚网上商店:OTTO
2018/03/15 全球购物
Guess欧洲官网:美国服饰品牌
2019/08/06 全球购物
青安岗事迹材料
2014/05/14 职场文书
学校端午节活动方案
2014/08/23 职场文书
员工离职证明范本
2015/06/12 职场文书
安全生产奖惩制度
2015/08/06 职场文书
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript
Django中celery的使用项目实例
2022/07/07 Python