随机种子可以从 shogun 的 python 界面控制吗?

Can the random seed be controlled from shogun's python interface?

使用 shogun 6.1.3 和 python 3.6。

出于测试目的,我试图在 shogun 中获得可复制的结果,但我没有找到控制随机种子的方法。

我试过:

import random
import numpy
from shogun import KMeans

random.seed(0)
numpy.random.seed(0)
km = KMeans(seed=0)

我想对许多 shogun 算法执行此操作,但这是使用 KMeans 的简单示例:

from shogun import KMeans, RealFeatures, MulticlassLabels, EuclideanDistance
import numpy

trainX = numpy.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]] * 3).astype(float)
trainY = numpy.array([[0], [1], [2]] * 3).astype(float).flatten()
testX = numpy.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]).astype(float)

Xtrain = RealFeatures(trainX.T)
Ytrain = MulticlassLabels(trainY)
Xtest = RealFeatures(testX.T)

km = KMeans()
km.set_distance(EuclideanDistance(Xtrain, Xtrain))
km.train(Xtrain)
labs = km.apply_multiclass(Xtest)
labs.get_labels()

labs.get_labels() 每次都不一样,但我相信设置随机种子应该会产生一致的结果。是否有我可以设置的属性,或其他一些方法来控制随机性并获得一致的结果?

在 Shogun 6.1.3(及更早版本)中,您可以使用(全局)静态调用 Math.init_random(seed)

由于全局种子会导致多线程设置中的重现性问题,因此在 Shogun 的开发分支中,我们最近删除了它。相反,您可以使用 obj.put("seed", my_seed) 设置特定对象的种子(递归)。或者,更简单,在 Python 中使用 kwargs 样式初始化器:km = sg.machine("KMeans", k=2, distance=d, seed=1).

这两个都记录在生成的元示例中,分别使用 6.1.3 和开发分支。网站示例将在下一个版本中更新。