随机化是机器学习方法的一部分,使用伪随机是方法结果可再现的关键。
sklearn中的一个重要参数是random_state,用于控制随机数生成器,即设定随机种子。
比如,在train_test_split,svm.SVC中均存在random_state参数。
当random_state明确指定,对应函数可产生可再现的结果。将一个指定整数传递给random_state是最安全稳妥的方式。
但,sklearn中提到,random_state的存在并不意味着总是使用随机化,因为它可能取决于正在设置的另一个参数,例如shuffle。
random_state的三种取值:
1、None(Default)
未指定random_state时,将使用numpy.random中的全局随机状态实例。多次调用该函数将重用同一实例,并将产生不同的结果。
2、int
使用一个新的随机数生成器,以给定的整数为种子。使用int将在不同的调用中产生相同的结果。然而需要注意的是,在多个不同的随机种子中结果是否稳定。整数值必须在[0,2**32-1]范围内。
3、numpy.randomRandomState的实例
使用提供的随机状态,只影响同一随机状态实例的其他用户。多次调用函数将重用同一实例,并将产生不同的结果。(此参数没有使用过)
遇到过的一个坑:
在使用svm.SVC时,想要获得测试数据上的预测概率计算AUC,必须指定random_state,否则结果可能不一致,而此现象在其他语言中没有见过,因此稳妥的方式是在所有允许指定random_state的情况下都要额外注意。