如何从伯努利RBM获得分数



我正在尝试使用sklearn.neural_network。伯努利RBM与虹膜数据集:

from sklearn import datasets
iris = datasets.load_iris() 
collist = ['SL', 'SW', 'PL', 'PW']
dat = pd.DataFrame(data=iris.data, columns=collist)
from sklearn.neural_network import BernoulliRBM
model = BernoulliRBM(n_components=2)
scores = model.fit_transform(dat)
print(scores.shape)
print(scores)

但是,我只得到 1 作为所有行的输出:

(150, 2)
[[1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]  # same for all rows

我能否获得与主成分分析中得到的单个行的分数相似的值?否则,我如何从RBM中获得一些有用的数字?我尝试了model.score_samples(dat)但这也为绝大多数行提供了0值。

根据文档:

该模型对输入的分布做出假设。在 目前,scikit-learn仅提供BernoulliRBM,它假设 输入可以是二进制值,也可以是介于 0 和 1 之间的值,每个 对特定功能打开的概率进行编码。

由于您的dat值都大于 1,我猜模型将所有输入数据截断为 1.0。 例如,如果应用规范化:

from sklearn.preprocessing import normalize
scores = model.fit_transform(normalize(dat))

您将获得一些变化的值:

array([[0.23041219, 0.23019722],
   [0.23046652, 0.23025144],
   ...,
   [0.23159369, 0.23137678],
   [0.2316786 , 0.23146158]])

由于输入要素必须具有概率解释,因此您需要考虑对于要解决的特定问题,如果任何归一化是合理的,该怎么办。

相关内容

  • 没有找到相关文章

最新更新