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 30 Python
用Python编写一个简单的Lisp解释器的教程
Apr 03 Python
玩转python爬虫之URLError异常处理
Feb 17 Python
python字符串的常用操作方法小结
May 21 Python
Python字典的核心底层原理讲解
Jan 24 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
jupyter notebook实现显示行号
Apr 13 Python
python制作抽奖程序代码详解
Jan 15 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
帝国cms常用标签汇总
2015/07/06 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
图解js图片轮播效果
2015/12/20 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Python实现京东秒杀功能代码
2019/05/16 Python
Python shutil模块用法实例分析
2019/10/02 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
基于python实现操作redis及消息队列
2020/08/27 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
意大利在线药房:Saninforma
2021/02/11 全球购物
校园安全广播稿
2014/02/08 职场文书
大学生党员承诺书
2014/05/20 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫