1

使用幕府将军 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)

我想为许多幕府算法执行此操作,但这里是使用 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()每次都不同,但我相信设置随机种子应该会产生一致的结果。是否有我可以设置的属性,或其他方式来控制随机性并获得一致的结果?

4

1 回答 1

2

在 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 和开发分支。网站示例将在下一个版本中更新。

于 2019-08-13T15:23:29.257 回答