数据挖掘之贝叶斯优化——前反馈特征的参数,估计特征的最佳数值

贝叶斯优化是一个全局优化方法,用于优化具有噪声的黑盒函数。这一方法在许多现实世界的问题中都有应用,特别是在那些评估目标函数的代价很高的场合,例如超参数调优。

背景:

  1. 为什么需要贝叶斯优化?

在数据挖掘、机器学习和深度学习中,通常需要调整模型的参数(例如,学习率、树的深度等)来获得最佳性能。传统的方法,如网格搜索和随机搜索,不仅效率低下,而且很可能会错过最佳参数组合。而贝叶斯优化提供了一种更加高效的方法,它能够在较少的迭代中找到较好的参数值。

  1. 贝叶斯优化的工作原理是什么?

贝叶斯优化背后的核心思想是利用贝叶斯推断来构建目标函数的概率模型,通常使用高斯过程。这种概率模型能够为我们提供目标函数值的预测以及这些预测的不确定性(即预测的方差)。

基于这种预测和不确定性,贝叶斯优化定义了一个所谓的采集函数(例如预期提升),它告诉我们下一步应该在哪里评估目标函数。这样,贝叶斯优化就能够在每一步都做出明智的决策,选择合适的参数来评估,从而高效地找到最优解。

  1. 贝叶斯优化与特征的关系:

虽然贝叶斯优化最常用于超参数调优,但它同样可以应用于特征工程中,帮助确定最佳的特征表示或特征组合。

此外,贝叶斯优化也可以用于确定特定特征的最佳值,这在某些应用场景中可能非常有价值,例如化学、制药或其他领域,其中某些特征的精确值可能会导致最佳的实验结果。

  1. 前反馈特征的参数:

这通常指的是我们不仅基于模型的预测结果来更新特征的参数,还结合其他先验信息或领域知识来为优化过程提供方向。在某些场合,尤其是当数据较少或模型难以训练时,这种方法可能特别有用。

实际案例

利用贝叶斯优化来找到最优的特征值,使得模型的输出(预测的目标变量)最佳。

这是一个逆问题的实现,因为我们通常会使用特征输入模型来预测输出。但在这里,你希望固定输出,并优化输入的特征,以找到对于固定输出的最佳特征值。

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler
from skopt import gp_minimize# 假设你已经有了数据
X = np.random.rand(100000, 250)
y = np.random.rand(100000, 1)# 数据标准化
scaler = StandardScaler().fit(X)
X_scaled = scaler.transform(X)# 使用随机森林训练一个模型
model = RandomForestRegressor(n_estimators=100)
model.fit(X_scaled, y)# 贝叶斯优化的目标函数
def objective_function(features):features = np.array(features).reshape(1, -1)prediction = model.predict(features)# 这里我们假设目标输出为0.5(可以根据需要调整)target_output = 0.5return (prediction - target_output) ** 2# 定义特征的范围(因为我们进行了标准化,所以大部分值都在-3到3之间)
dimensions = [(-3.0, 3.0) for _ in range(250)]# 使用贝叶斯优化
res = gp_minimize(objective_function, dimensions, n_calls=50, random_state=0)# 获取最佳特征值,并转换回原始尺度
best_features_scaled = res.x
best_features = scaler.inverse_transform(np.array(best_features_scaled).reshape(1, -1))print(best_features)

在上面的代码中,我们首先对数据进行了标准化处理,并用标准化后的数据训练了一个随机森林模型。然后,我们定义了一个目标函数,它接受一组特征作为输入,计算模型的预测输出,并返回该预测输出与我们期望的目标输出之间的差异。最后,我们使用gp_minimize进行贝叶斯优化,试图找到最小化该差异的特征值。

当我们使用StandardScaler进行标准化时,我们实际上是对每个特征执行以下操作:

  • 从每个特征中减去其均值。
  • 将结果除以特征的标准差。

这样处理后,每个特征的均值为0,标准差为1。在正态分布的假设下,约99.7%的数据会落在均值(也就是0)的3个标准差范围内,因此范围从-3到3包括了绝大部分的数据。

实际上,不所有的特征都会严格遵循正态分布,但这是一个常用的假设,特别是在缺乏其他特定信息的情况下。如果你知道某些特征的分布不是正态分布,或者有异常值,那么可能需要为这些特征设置不同的范围。

在这个示例中,我们使用(-3, 3)作为标准化后特征的默认范围,主要是为了简化和方便。在实际应用中,你可能需要根据实际数据的分布情况来调整这个范围。

当我们使用StandardScaler对数据进行标准化时,我们的目的是使每个特征的均值为0,标准差为1。这意味着,对于标准正态分布的数据:

大约68%的数据点会落在均值的±1个标准差内(即,范围[-1, 1])
大约95%的数据点会落在均值的±2个标准差内(即,范围[-2,2])
大约99.7%的数据点会落在均值的±3个标准差内(即,范围[-3, 3])

因此,选取范围[-3, 3]是基于标准正态分布的这个特性。它意味着我们认为99.7%的标准化后的数据点都应该落在这个范围内。

但是,必须注意的是,不是所有的数据都会严格遵循正态分布。实际上,数据的真实分布可能会有所偏差。在这种情况下,可以采取以下几种策略来确定范围:

  • 数据观察:你可以观察数据的实际分布,例如使用直方图或密度图,并根据观察来调整范围。

  • 百分位:使用数据的百分位数来确定范围。例如,可以选择1%和99%的百分位数作为范围的下限和上限,确保覆盖大部分数据。

  • 试错法:开始时可以使用[-3, 3],但根据贝叶斯优化的结果和收敛性,逐步调整范围。

  • 领域知识:如果你对数据有深入的了解,或者你知道某些特征的物理、生物或经济上的限制,可以利用这些知识来设定范围。

这一类数据的应用场景,就是当我们有大量的数据是正常的,也是比较好的数据之后,我们可以收集好数据集,并将数据的质量提高

其次就是建立基础的模型

通过目标优化函数和目标优化变量,并返回特征数值的最佳值应该是哪些?

Optimized Parameters (scaled):
[0.56, 0.12, -0.34, …, 0.71, 0.92, -0.65]

Optimized Parameters (original scale): [12.45, 50.32, 120.23, …,
23.89, 450.32, 98.21]

这一类问题解决的前提就是:

  1. 首先我们有大量的数据
  2. 其次就是优质的数据源
  3. 好的生产数据,用于模型的学习
  4. 强大的计算资源

通过拿到问题我们都是采取机器学习的一些相关的回归算法进行,不管是神经网络模型还是各种基于概率还是树的模型,多个特征去预测一个特征是符合也是比较常见的一种建模思想,但是随着机器学习和深度学习的不断衍生,我们的需求也在越来越明确。

如果可以通过建立一个好的模型来调节和反馈我们实际生产过程中的哪些参数,对于我们“去中心化”,有着很好的帮助。

传统的制造业或者实际厂家都是结合经验和数据进行,可能一个工艺表一直在沿用,但是随着设备和不同情况的更新迭代与出现,这种只依靠经验的规则无法适用于大规模的数据,一个工序只能一个人来调节,多个工序可能需要多个工艺师来互相配合,无法达到最优的结果。

在这里插入图片描述

每文一语

不要只停留在当前的技术,要不断的去更新和迭代自己的思想

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/159919.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你知道跨境商城源码如何为商家节省成本和时间吗

跨境电商行业迅速发展,商家如何利用跨境商城源码实现成本和时间节省 在全球经济一体化的背景下,跨境电商行业蓬勃发展,为商家提供了全球范围的市场机会。然而,面临的挑战也日益增多,比如高昂的运营成本和繁琐的流程&am…

Ruby语言基础知识

Ruby是一种简单快捷的面向对象脚本语言,由日本人松本行弘(Yukihiro Matsumoto)在20世纪90年代开发,遵守GPL协议和Ruby License。它的灵感和特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。 以下是Ruby语言的一些特点&#…

rust: function

///file: nestd.rs ///ide: RustRover 233.8264.22 /// /// /// /***自定义函数*/ pub fn function() {println!("called my::nested::function()"); }#[allow(dead_code)] fn private_function() {println!("called my::nested::private_function()"); }/…

Linux服务器快速搭建pytorch

Linux服务器搭建pytorch 文章目录 Linux服务器搭建pytorch一、使用FileZilla传输Anaconda二、激活Anaconda环境1.创建一个虚拟环境2.使用已有项目生成requirements.txt3.在虚拟环境中使用requirements.txt安装其他项目相关库 总结 一、使用FileZilla传输Anaconda 提示&#xf…

Bitquiz重塑Learn to Earn热潮,用户零投入让学习创造价值

Axie 带来的暴富效应、StepN 带来的出圈效应,近期Bigtime 在熊市中的大火,为加密参与者带来的赚取效应,X to Earn 重新成为整个市场关注的重点,GameFi 再次站在了风口浪尖。 大家开始寻找下一个Bigtime,希望能够抓住一…

5.Python-使用XMLHttpRequest对象来发送Ajax请求

题记 使用XMLHttpRequest对象来发送Ajax请求,以下是一个简单的实例和操作过程。 安装flask模块 pip install flask 安装mysql.connector模块 pip install mysql-connector-python 编写app.py文件 app.py文件如下: from flask import Flask, reque…

framework通信机制—LiveData使用方法及原理

LiveData是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 activity、fragment 或 service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应…

树模型(三)决策树

决策树是什么?决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block),椭圆形成代表终止模块(terminating block),表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…

PyTorch 深度学习之加载数据集Dataset and DataLoader(七)

1. Revision: Manual data feed 全部Batch:计算速度,性能有问题 1 个 :跨越鞍点 mini-Batch:均衡速度与性能 2. Terminology: Epoch, Batch-Size, Iteration DataLoader: batch_size2, sheffleTrue 3. How to define your Dataset 两种处…

Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql

环境准备(非核心方法) 创建表 创建表的sql(下表是基于Oracle创建的) CREATE TABLE "SYSTEM"."STUDENT" ("ID" NUMBER(10, 0),"NAME" VARCHAR2(20 BYTE),"ADDRES" CLOB,PRIMARY KEY ( …

Element UI库 之 el-input 赋值后不能删除,修改,输入

最近做了一个需求就是导入数据的, 导入了之后发现打折跟促销价都发不能修改了, 甚至删除都不行。后面去查了下发现大概是数据响应的问题。大概的解决办法有下面几个,我是用最后一个解决的 方法一:强制更新 在绑定input里面的调用…

micropython ESP32-S3点亮板载RGB灯珠

micropython ESP32-S3点亮板载RGB灯珠 1、vscode中安装 RT-Thread插件 2、新建个文件夹 3、在这个文件夹下面创建一个文件,命名为neopixel.py。在该文件中粘贴下面代码。 # NeoPixel driver for MicroPython on ESP32 # MIT license; Copyright (c) 2016 Damie…

windows应用程序告警:帐户名与安全标识间无任何映射完成

目录 一、问题现象 二、问题解决 (一)官方方法 (二)问题定位 (三)问题处理 一、问题现象 今天巡检域控服务器时,发现告警如下: 安全策略已传播,但有警告信息。 0x534…

苹果 Vision Pro 头显新专利:增加重量减轻颈部压力

上周,彭博社的古尔曼表示 Vision Pro 头显过重,导致开发者佩戴后出现明显的颈部疲劳。随后,便有人发现在美国商标和专利局(USPTO)公示的清单中,苹果公司又获得了一项Vision Pro的专利,该专利提…

【深度学习 | Transformer】释放注意力的力量:探索深度学习中的 变形金刚,一文带你读通各个模块 —— Positional Encoding(一)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

SpringBoot面试题4:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个? Spring Boot支持多种日志框架,包括以下几种: Logback:Logback 是一个快速、灵活…

Windows10不常用操作(录屏、开启超级管理员、关闭自动IP配置、Edge崩溃等)

Win10家庭版开启超级管理员 Win10家庭版开启或禁用超级管理员账户步骤如下: 在搜索框中输入CMD,右键以管理员方式运行。 开启 net user administrator /active:yes禁用 net user administrator /active:no Win10关闭自动IP配置 win10设置完静态ip&am…

Nlopt在matlab中的配置教程

step1:克隆代码并编译 编译的前提是已经安装好MinGW64 # 使用镜像加速 git clone https://gitclone.com/github.com/stevengj/nloptcd nlopt mkdir build cd build cmake -G"MinGW Makefiles" .. cmake --build .# 注意此处博主在mingw安装目录将mingw3…

iPhone 如何强制重启

参考iPhone的官方使用手册 传送门 尤其当 iPhone 未响应,也无法将其关机再开机,此方法最有效: 按住调高音量按钮,然后快速松开。按住调低音量按钮,然后快速松开。按住侧边按钮。当 Apple 标志出现时,松开侧…

探索低代码技术

低/无代码的高速发展,属于软件市场的选择,相较于传统编写代码的开发方式,低/无代码开发效率高、投入成本低、技术门槛也更低,未来更多软件应用将使用低/无代码技术完成,这也是趋势。 身为开发人员经常需要花大量时间在…