关于随机数种子

来源:7-7 试手MNIST数据集

刘SW

2018-03-22

我训练digits时,只改变了random_state 的值,为什么score的值却发生了变化?

random_state  54 时 保留 0.92信息 准确率为 0.991  保留 0.82信息 准确率为 0.993

random_state  566 时 保留 0.92信息 准确率为 0.98  保留 0.82信息 准确率为 0.973

写回答

1回答

liuyubobobo

2018-03-23

具体你修改的是哪个类中的random_state?


sklearn中大多数算法的底层实现和我们这个课程中讲的具体实现是不一样的,虽然原理是一致的。但在具体计算上,大多数是出于性能的考量,会使用随机算法进行计算。随机算法的本质是牺牲精确度获得速度。也就是我们不一定要花费很多时间求出一个非常精准的解;而是花费很少的时间能够求出一个差不多的解。正因为如此,很多类中提供random_state这个属性,用于设定随机种子值。随机种子设置的不一样,结果会有不同。


大多数sklearn中的随机种子在决定机器学习中具体哪步的随机过程,在sklearn文档中会有详细的说明。比如这个问答中涉及决策树的随机种子的用法:https://coding.imooc.com/learn/questiondetail/47472.html 我引用的就是sklearn的文档。


再比如,sklearn的PCA也涉及随机种子。这是因为实际计算主成分的过程,对于稍微大一点的数据,使用我们这个课程介绍的基于搜索的方式,都太慢了。PCA有更好的数学解法,基于SVD分解。在这个课程中,为了不引入太复杂的数学,我特意避开了这种做法(印象里课程中有说明)。


不过,对于非常大的数据量,精准的SVD分解算法也会很慢,需要借助随机算法。这一点在sklearn的文档中有说明:http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

//img.mukewang.com/szimg/5ab403f7000185d307780225.jpg


随机算法获得的是近似解,不能保证绝对最优,也不能保证每次运行的结果是相同的:)

0
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程