什么是特征缩放,它有什么好处?
① 特征缩放就是使多个特征都处在一个相近的范围。
注:如果这些特征处在一个相近的范围,这样梯度下降法能更快地收敛。
② 以两个特征值的情况来举例,当特征值的取值范围差距很大的时候,代价函数的轮廓图就像左边,呈椭圆。
注:如果用这个代价函数来运行梯度下降的话,你最终可能需要花很长一段时间,并且下降的过程会反复来回振荡,然后经过很长时间,才收敛到全局最小值。
③ 如果将特征值的范围缩放到相同的范围,比如都在-1到1之间,那么最终得到的轮廓图就像右边,比较圆,梯度下降的速度变得更快,收敛所需的循环次数更少。
注:在特征缩放的过程中,我们不用对x0进行缩放,因为它始终等于1,已经在这个范围了。
Python基础积累
打印进度条
import time
import sys
for i in range(5):
print(i)
# sys.stdout.flush()
time.sleep(1)
运行结果:
0
1
2
3
4
注:当我们打印一些字符时,并不是调用print函数后就立即打印的,一般会先将字符送到缓冲区,然后再打印。
注:这就存在一个问题,如果你想立刻看到日志,但由于缓冲区没满,不会打印。
注:我们需要采取一些手段。如每次打印后强行刷新缓冲区。
住:flush是刷新的意思,python的stdout是有缓冲区的,在print和sys.stdout.write输出时是有一个缓冲区的。
注:比如要向文件里输出字符串,是先写进内存(因为print默认flush=False,也没有手动执行flush的话)。
注:在close文件之前直接打开文件是没有东西的,如果执行一个flush就有了。
注:在终端执行上面代码,会一秒输出一个数字。然而如果注释掉flush,就会在5秒后一次输出01234。
注:可以用在网络程序中多线程程序,多个线程后台运行,同时要能在屏幕上实时看到输出信息。
注:time.sleep(secs) 函数表示推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
注:for i in range(5) 表示循环50次。
print('hello')
sys.stdout.write('hello'+'n')
运行结果:
hello
hello
注:print(obj)实质就是调用sys.stdout.write(obj+’n’)
注:两条语句等价。
import sys
import time
for i in range(50):
sys.stdout.write('#')
sys.stdout.flush()
time.sleep(0.5)
运行结果:
##################################################
注:若sys.stdout.write('#'),就每隔0.5秒就打印一个,这里是则横着打印50次
注:若sys.stdout.write('#n'),就每隔0.5秒就打印一个,这里是竖着打印50次,每打印一次就换一行。