决策树 - 用回归树拟合正弦曲线
rng = np.random.RandomState(1)
:一个伪随机数生成器,返回 RandomState 对象。随机数是用确定性的算法计算出来自均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。rand(80)
,指的是一个 80 个元素的一维数组,不是 80 行 1 列,或者 1 行 80 列,因为这二者都是二维数组的描述方式由于fit
接收 X 不接收一维特征,因此我们需要生成二维数组(数据矩阵),也就是rng.rand(80,1)
这里要注意 np.random.RandomState(1).rand()和 np.random.rand(),是不同的,前者是在一个固定的伪随机数生成器下生成的的随机数,即使我们在前面写了前者,但不经过固定的伪随机数生成器来调用 rand,那么我们生成的随机数依旧无法被固定。例如现在我们固定了一个伪随机数生成器
for i in range(3): rng = np.random.RandomState(1) print(rng.rand(3)) print(np.random.rand(3)) --- [4.17022005e-01 7.20324493e-01 1.14374817e-04] [0.24854201 0.50811133 0.49999858] [4.17022005e-01 7.20324493e-01 1.14374817e-04] [0.5478054 0.59739849 0.22514079] [4.17022005e-01 7.20324493e-01 1.14374817e-04] [0.17886054 0.60591715 0.64348522]
显然前者是固定的,对后者并无影响
这里有一些个人理解。可能 np.random.RandomState(1).rand()调用后再调用 np.random.rand(),会影响已经生成的 RandomState 对象,因此如果调用了 np.random.rand(),我们再想使用 np.random.RandomState(1).rand()生成固定随机数,需要再次得到之前的 RandomState 对象。即下述情况
rng = np.random.RandomState(1) for i in range(2): print(rng.rand(3)) print(np.random.rand(3)) --- [4.17022005e-01 7.20324493e-01 1.14374817e-04] [0.16401897 0.4949546 0.87024651] [0.30233257 0.14675589 0.09233859] [0.80481614 0.63129344 0.67668002]
np.sin(X)
结果是二维数组(80,1),但 y 必须是一维数组,因此使用ravel()
降维
增加一个的噪声
训练决策树
[:, np.newaxis]
类似于reshape(-1,1)
,把一维变成二维
np.random.rand(5).reshape(-1,1) --- array([[0.04267956], [0.78550248], [0.26686091]]) a = np.array([1, 2, 3, 4]) print(a[:])# 切片 # 几维数组,就最多能有几个切片,但低维数组可以用newaxis填充空的部分来升维 print(a[:, np.newaxis]) # 行数是a里的元素个数,列上的数据顺序是a里元素的顺序 # 可以认为是加列的方式变为二维数组,np.newaxis写在列索引位置 print(a[np.newaxis, :]) # 列数是a里的元素个数,行上的数据顺序是a里元素的顺序 # 可以认为是加行的方式变为二维数组,np.newaxis写在行索引位置 --- [1 2 3 4] [[1] [2] [3] [4]] [[1 2 3 4]]
np.newaxis
可以只会结论,不需要知道为什么
根据训练的决策树预测结果
显然最大深度等于 5 的受噪声影响大,有过拟合的趋势
视频作者:菜菜TsaiTsai 链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
版权声明: 本文为 InfoQ 作者【烧灯续昼2002】的原创文章。
原文链接:【http://xie.infoq.cn/article/264b842c2fda17202ab104791】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论