变分贝叶斯框架中的分类问题

如何解决变分贝叶斯框架中的分类问题

我正在尝试使用贝叶斯方法解决分类模型。特别是我使用以下工作作为参考:Modeling Analysts’ Recommendations via Bayesian Machine Learning

监督学习问题包括分析师在给定时间段内对大量股票的推荐数据集。每一行代表给定日期的给定股票,而每一列(我们称之为特征)代表给定的经纪人。该表填充了给定日期内给定股票的经纪人推荐,分为 4 个类别:

  • 0 如果推荐缺失
  • 1 个保留
  • 2 出售
  • 3 买

数据集还包含一个由 3 个类组成的标签向量:

  • 0 如果接下来 2 个月的股票回报率低于 5%
  • 2 如果股票在接下来的 2 个月内回报率高于 5%
  • 1 否则

由于数据集的大部分 99% 由缺失数据(零)组成,因此该分类问题适用于贝叶斯方法。

让我们重现数据的简化版本:

import pandas as pd
import numpy as np
index = pd.Index(range(100))
columns = ['B1','B2','B3','B4','B5']
recommendations = pd.DataFrame(np.random.randint(0,4,size=(len(index),len(columns))),index=index,columns=columns)
label = pd.DataFrame(np.random.randint(0,3,1)),columns=['label'])
df = recommendations.join(label)
df

     B1  B2  B3  B4  B5  label
0    0   0   2   1   3      0
1    3   2   0   2   2      2
2    1   3   3   3   3      2
3    0   1   3   3   2      1
4    1   1   1   0   0      0
..  ..  ..  ..  ..  ..    ...
95   3   2   0   2   3      1
96   2   0   2   0   1      2
97   3   0   3   1   0      0
98   1   2   3   0   3      0
99   3   2   1   0   0      1

我们假设行和列之间都是独立的。概率设置如下:我们假设标签概率为 k={k0,k1,k2} 并且具有参数 V=( v0、v1、v2)。对于每个经纪人,我们有 4 个不同的概率以 3 个标签类别为条件:Bk|T=t,t=0,1,2,Pr(Bk|T=t)=Pi_tk(对于每个经纪人,以我们拥有的每个事实为条件4 个概率)并假设每个 Bk 是一个四维狄利克雷分布,参数为 {a0,a1,a2,a3}。在我们的简化框架中,我们有 5(broker)x4(classes Recommendation)x3(classes label)=60 个参数。我们将模型的所有参数设置为 1。

现在,我想将数据库分成一个训练集,我观察特征和标签,以及一个测试集,我观察经纪人推荐,我想对标签类别进行预测。

train = df[df.index < 70]
test = df[df.index >=70]

我正在努力执行的任务是使用库 bayespy 为该框架构建合适的模型。我们可以将问题表示如下:

enter image description here

其中 A0 包含经纪人预测的狄利克雷分布的所有 3x5 四维超参数,V 是标签类别的狄利克雷分布的三维超参数,Pi 是经纪人推荐的 3x5 4D-狄利克雷随机变量,K 是标签类别的 3D-Dirichlet 随机变量,T=t_j 是在 Trining 期间观察到的分类标签类别,但必须在测试期间推断出来,B_kj 是在 Trining 和测试期间观察到的分类经纪人推荐。

我构建了以下模型:

import numpy as np
from bayespy import nodes
from bayespy.nodes import Mixture,Categorical

K = nodes.Dirichlet(np.ones(3),name='K')
T = nodes.Categorical(K,plates=(len(train),))

Pi = nodes.Dirichlet(np.ones(4),plates=(3,5),name='Pi') # four classes,one rv for each of the 3 truth,5 brokers

B = Mixture(T,Categorical,Pi)

但在这里我得到了错误:

不会自动从 CategoricalMoments 转换为具有不同类别数量的 CategoricalMoments

我会继续如下:

from bayespy.inference import VB
Q = VB(T,K,B,Pi)

Pi.initialize_from_prior()
K.initialize_from_prior()

B.observe(train[train.columns[:-1]])
T.observe(train.label)

Q.update(repeat=1000)

我知道我在构建模型时做错了,但经过多次试验后,我无法达到合适的设置。而且,我在网上搜索了一些关于分类混合模型构建的例子,但我没有找到类似的东西。

任何帮助将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res