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学习笔记之os模块使用总结
Nov 03 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
Python验证码识别的方法
Jul 10 Python
深入理解python中的闭包和装饰器
Jun 12 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
解决python运行启动报错问题
Jun 01 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
Python如何读写CSV文件
Aug 13 Python
通过实例了解python__slots__使用方法
Sep 14 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
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
超实用的 30 段 Python 案例
2019/10/10 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
大学生创业计划书的范文
2014/01/07 职场文书
部队党性分析材料
2014/02/16 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
敬老月活动总结
2014/08/28 职场文书
借款协议书
2014/09/16 职场文书
租房协议书范例
2014/10/14 职场文书
2014年财政工作总结
2014/12/10 职场文书
颐和园英文导游词
2015/01/30 职场文书
十月围城观后感
2015/06/08 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android