You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从BernoulliRBM获取有效分数?鸢尾花数据集使用异常

解决BernoulliRBM处理鸢尾花数据集输出全1的问题

嘿,这个问题我之前踩过坑!核心原因很明确:BernoulliRBM是专门为二值数据(0/1)设计的模型,但鸢尾花数据集的特征都是连续的数值(比如花萼长度、花瓣宽度这类大于0的实数),而且你没有对数据做归一化处理,导致模型的激活函数直接输出全1了。

下面给你具体的解决思路和修改后的代码:

1. 先对特征做[0,1]区间归一化

BernoulliRBM的输入需要是0到1之间的值(可以理解为概率分布),所以我们要用MinMaxScaler把鸢尾花的连续特征缩放到这个区间,这是最关键的一步。

2. 调整模型参数(可选但能提升效果)

默认的迭代次数和学习率可能不够,适当调大n_iter(迭代次数)、微调learning_rate(学习率),能让模型更好地收敛,学习到有效的特征表示。

修改后的完整代码

from sklearn import datasets
import pandas as pd
from sklearn.neural_network import BernoulliRBM
from sklearn.preprocessing import MinMaxScaler

# 加载鸢尾花数据
iris = datasets.load_iris()
collist = ['SL', 'SW', 'PL', 'PW']
dat = pd.DataFrame(data=iris.data, columns=collist)

# 关键操作:将特征归一化到[0,1]区间
scaler = MinMaxScaler()
dat_scaled = scaler.fit_transform(dat)

# 初始化RBM模型,调整参数提升效果
model = BernoulliRBM(n_components=2, n_iter=100, learning_rate=0.01, random_state=42)
scores = model.fit_transform(dat_scaled)

# 查看结果(只打印前5行避免太长)
print(scores.shape)
print(scores[:5])

为什么这样能解决问题?

  • 归一化后的数据符合BernoulliRBM对输入的假设,模型可以正常学习特征间的关联,不会再输出全1。
  • 增加迭代次数和调整学习率,能让模型有足够的时间收敛,生成有意义的隐藏层表示。

运行上面的代码后,你就能得到有效的非全1分数啦!

内容的提问来源于stack exchange,提问作者rnso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:51:44